将相同的项添加到EF中的不同对象

时间:2015-04-17 14:11:47

标签: .net entity-framework dbcontext

我有一个班级和一个班级项目:

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
}

Year类有0. *项。在初始化程序中创建项目和年份时,只有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只有项目。等等..

1 个答案:

答案 0 :(得分: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/