【问题标题】:Entity Framework Creates New / Duplicate Entries for Associated Objects实体框架为关联对象创建新的/重复的条目
【发布时间】:2013-12-20 18:52:16
【问题描述】:

我正在尝试使用 Code First 创建 SQL CE 4 数据库。运行下面的示例代码时,Entity Framework 每次都会为 product 插入新记录,即使数据完全相同。 我需要做什么才能使 Entity Framework 不创建重复的关联产品? ForeignID1 和 Product 对象中的值是数据库中已经存在的值,但是 Entity Framework 正在擦除我提供的 ID它并添加一个新 ID。

namespace MyApp.Model
{
    public class MyThing
    {    
        public int ID { get; set; }

        [ForeignKey("Product")]
        public int ForeignID1{ get; set; }

        public virtual Product Product { get; set; }
    }
}

// Data.DataManager.cs

public class DataManager : DbContext
{
    public DbSet<Model.MyThing> Things{ get; set; }
    public DbSet<Model.Product> Products { get; set; }
}

这些是它输入的值。表中应该只有一个值被多个MyThings's 引用

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    为了避免重复,您必须将相关实体附加到上下文:

    context.Products.Attach(myThing.Product);
    context.Things.Add(myThing);
    

    或者……

    myThing.Product = null;
    context.Things.Add(myThing);
    

    ...如果您已将 myThing.ForeignID1 设置为现有产品 ID,也可以正常工作。

    【讨论】:

    • 这在某种程度上是有效的。但现在我在想我的部分问题是它使用我的 ID 作为身份密钥,这导致 ID 被设置为 1、2、3 等。
    • 我最终使用了这个和[DatabaseGenerated(DatabaseGeneratedOption.None)] 的组合来禁用标识列。我还为每个孩子(产品)运行了自己的更新过程。
    • 在编辑要添加到数据库的对象的属性之前使用 Attach() 也很重要......也许我只是愚蠢......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2019-02-14
    相关资源
    最近更新 更多