我首先使用 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 方法告诉上下文跟踪该实体。该实体将位于上下文中未更改的状态。”
关于c# - Entity Framework 在调用 savechanges 时复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15394207/