contact
のMarketingContact
タイプを追加して、データベースのテーブルにオブジェクトを追加しています。これらは私のモデルクラスです:Entity Frameworkを使用して他のオブジェクトのリストを含むテーブルにオブジェクトを追加
public class MarketingContact
{
public MarketingContact()
{
this.ContactTags = new List<ContactTag>();
}
public int id { get; set; }
//..some other properties not complex properties...
public virtual ICollection<ContactTag> ContactTags { get; set; }
}
これはContactTagモデルです:
public class ContactTag
{
public ContactTag()
{
this.MarketingContacts = new List<MarketingContact>();
}
public int TagId { get; set; }
//some other no complex properties...
public virtual ICollection<MarketingContact> MarketingContacts { get; set; }
}
そして、これは私のコントローラの私のAddContact()
方法であって、私のコントローラのアクションIであること
[HttpPost]
public ActionResult AddContact(MarketingVM marketingContactVM)
{
List<ContactTag> contactTags = new List<ContactTag>();
for (int i = 0; i < marketingContactVM.MarketingContacts.Count; i++)
{
if (marketingContactVM.MarketingContacts[i].IsSelected==true)
{
contactTags.Add(new ContactTag { Name = marketingContactVM.MarketingContacts[i].Name, TagId = marketingContactVM.MarketingContacts[i].TagId,
InfusionSoftId = marketingContactVM.MarketingContacts[i].InfusionSoftId});
}
}
MarketingContact marketingContact = AutoMapper.Mapper.Map<MarketingContact>(marketingContactVM);
marketingContact.ContactTags = contactTags;
context.MarketingContacts.Add(marketingContact);
context.SaveChanges();
return Json(new { result = "success"}, JsonRequestBehavior.AllowGet);
}
注意ViewModel(MarketingVM type
)を使用しています。私はMarketingContact
オブジェクトがMarketingContacts
テーブルに保存されますが、ContactTags
テーブルに新しい行がmarketingContact
に属しContactTags ICollection
が含まれているものに応じて作成された、と私はちょうどContactTags
から選択していたデータベースに保存する時には 、行は既にそこにありますが、私はContactTags
テーブルに同じ値が追加された行は必要ありません、なぜこれが起こっていますか?オブジェクトをデータベースに保存する瞬間に、marketingContact
オブジェクトには、TagId
の値を含めて、ContactTags
テーブルにフィールドが存在するContactTags
コレクションが含まれていますが、MarketingContacs
テーブルのその行に関連付けるのではなく、 ContactTags
テーブルはTagId
(新しい値を生成する)を除いて同じ値を持ちますので、値は毎回ContactTags
テーブルに複製されており、その必要はありません。私は何を変える必要がありますか?