2015-04-17 57 views
0

我有一个类年和​​一类产品:添加同一项目不同的对象在EF

public class Year 
{ 
    #region Properties 
    public int Nr { get; set; } 
    public virtual ICollection<Item> Item { get; private set; } 
    #endregion 

    #region Constructors 
    public Year() 
    { 
     Item = new HashSet<Item>(); 
    } 

    public Year(int year) : this() 
    { 
     Nr = year; 
    } 
    #endregion 
} 

public partial class Item 
{ 
    #region Properties 
    public string Name { get; set; } 
    #endregion 

    #region Constructors 
    public Item() 
    { 
    } 

    public Item(string name): this() 
    { 
     Name = name; 
    } 
    #endregion 
} 

年度类有0.1 *的项目。在初始化程序中创建项目和年份时,只有year4包含项目。目前我找不到任何解释。

protected override void Seed(MyContext context) 
    { 
     try 
     { 
      Year year1 = new Year(1); 
      Year year2 = new Year(2); 
      Year year3 = new Year(3); 
      Year year4 = new Year(4); 
      Year year5 = new Year(5); 
      Year year6 = new Year(6); 


      Item africa = new Item("Afrika"); 
      Item antarctica = new Item("Antarctica"); 
      Item azie = new Item("Azië"); 
      Item europa = new Item("Europa"); 
      Item noordAmerika = new Item("Noord-Amerika"); 
      Item zuidAmerika = new Item("Zuid-Amerika"); 
      Item oceanie = new Item("Oceanië"); 


      year1.Item.Add(europa); 
      year2.Item.Add(europa); 
      year3.Item.Add(europa); 
      year3.Item.Add(africa); 
      year3.Item.Add(antarctica); 
      year3.Item.Add(azie); 
      year3.Item.Add(noordAmerika); 
      year3.Item.Add(zuidAmerika); 
      year3.Item.Add(oceanie); 
      year4.Item.Add(europa); 
      year4.Item.Add(africa); 
      year4.Item.Add(antarctica); 
      year4.Item.Add(azie); 
      year4.Item.Add(noordAmerika); 
      year4.Item.Add(zuidAmerika); 
      year4.Item.Add(oceanie); 

      context.Years.Add(year1); 
      context.Years.Add(year2); 
      context.Years.Add(year3); 
      context.Years.Add(year4); 
      context.Years.Add(year5); 
      context.Years.Add(year6); 
      context.SaveChanges(); 
     } 

这里是我的本命年映射:

  //Properties 
     HasKey(t => t.Nr); 

     //Table 
     ToTable("Year"); 

     //Relationships 
     HasMany(t => t.Item) 
      .WithRequired() 
      .Map(m => m.MapKey("ItemName")) 
      .WillCascadeOnDelete(false); 

什么特别奇怪的是,如果我用上面的设置,只year4有项目。如果我从初始化程序中删除year4,则year3仅包含项目。等..

+0

好了,这是完全预料。一个'Item'有1'Year',由'.WithRequired()'配置,所以去年获胜。你真正想要的是一个多对多的关联。 –

回答

0

试试沿着这些线路:

 context.Item.AddOrUpdate(i => i.Name, new Item { Name = "Afrika" }); 
     context.Item.AddOrUpdate(i => i.Name, new Item { Name = "Antarctica" }); 
     context.Item.AddOrUpdate(i => i.Name, new Item { Name = "Azië" }); 
     context.Item.AddOrUpdate(i => i.Name, new Item { Name = "Europa" }); 
     context.Item.AddOrUpdate(i => i.Name, new Item { Name = "Noord-Amerika" }); 
     context.Item.AddOrUpdate(i => i.Name, new Item { Name = "Zuid-Amerika" }); 
     context.Item.AddOrUpdate(i => i.Name, new Item { Name = "Oceanië" }); 
     context.SaveChanges(); 

     var europa = context.Item.Find("Europa"); 
     var africa= context.Item.Find("Afrika"); 
     var antarctica= context.Item.Find("Antarctica"); 
     var azie= context.Item.Find("Azië"); 
     var noordAmerika= context.Item.Find("Noord-Amerika"); 
     var zuidAmerika= context.Item.Find("Zuid-Amerika"); 
     var oceanie= context.Item.Find("Oceanië"); 

     context.Years.AddOrUpdate(y => y.Nr, new Year { Nr = 1, Item = {europa } }); 
     context.Years.AddOrUpdate(y => y.Nr, new Year { Nr = 2, Item = {europa } }); 
     context.Years.AddOrUpdate(y => y.Nr, new Year { Nr = 3, Item = {europa, africa, antarctica, azie, noordAmerika, zuidAmerika, oceanie } }); 
     context.Years.AddOrUpdate(y => y.Nr, new Year { Nr = 4, Item = {europa, africa, antarctica, azie, noordAmerika, zuidAmerika, oceanie } }); 
     context.Years.AddOrUpdate(y => y.Nr, new Year { Nr = 5 }); 
     context.Years.AddOrUpdate(y => y.Nr, new Year { Nr = 6 }); 
     context.SaveChanges(); 

http://thedatafarm.com/data-access/take-care-with-ef-4-3-addorupdate-method/