c# - Entity Framework 在调用 savechanges 时复制

标签 c# entity-framework ef-code-first

我首先使用 entityframework 5 代码,我有一个这样的模型。

class Product {
    public Product() {
        Fabrics = new BindingList<FabricLineItem>();
    }
    ...
    public virtual ICollection<FabricLineItem> Fabrics { get;set; }
}

class FabricLineItem {
    [ForeignKey("Fabric")]
    public int FabricId { get; set; }  
    public virtual Product Product { get;set; }
    public virtual Fabric Fabric { get;set; }  
}

class Fabric {
    ...
}

我的数据库中已有 Fabric 。我创建了一个新的产品对象并将一些 fabriclineitems 添加到集合中。当我尝试保存产品时,它会复制数据库中的结构,并在调用

后将其引用到新的结构
 DataContext.SaveChanges(); 

在调用 savechanges 之前,调试器中的值在调用之后是否正确?知道为什么我会出现这种奇怪的行为吗?

最佳答案

我还遇到了 E.F. 的问题,当一个项目在另一个要添加到数据库的新对象中被引用时,无法识别该项目已经存在。

@NeilThompson 给了我上面如何解决这个问题的线索:

您需要将现有实体附加到上下文,以便它知道它已经存在:

例如:

context.Fabrics.Attach(product.Fabric); 
context.Products.Add(product);
context.SaveChanges();

return organisation;

我从这里得到的:

“如果您知道一个实体已经存在于数据库中,但当前未被上下文跟踪,那么您可以使用 DbSet 上的 Attach 方法告诉上下文跟踪该实体。该实体将位于上下文中未更改的状态。”

http://blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add-attach-and-entity-states.aspx

关于c# - Entity Framework 在调用 savechanges 时复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15394207/

相关文章:

c# - 表 'DBNAME.dbo.TableNAME' 不存在 MySQL Entity Framework 6

c# - Entity Framework Code First 通过 DataAnnotations 实现多对多关系

c# - 非常简单的 ASP.NET 3.5 应用程序的问题,使用 C#

c# - Linq 中的左修剪

entity-framework - 如何清除 Visual Studio 2010 的缓存,实体数据模型向导

c# - Entity Framework 代码首先更新复杂类型的单个属性

entity-framework - 哪一条路?数据库优先、模型优先、代码优先?

c# - C# 如何将多个数据表的数据插入到一个数据表中

c# - 单个SQL查询处理多个一对多关系,只输出一次结果

c# - 如何使用 System.Drawing 将旋转的字符串绘制为图像?