Ahm*_*med 5 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 {
...
}
Run Code Online (Sandbox Code Playgroud)
我的数据库中已有面料.我创建了一个新的产品对象,并为该集合添加了一些fabriclineitems.当我尝试保存产品时会发生什么,它会复制数据库中的结构并在调用后将其引用到新结构
DataContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
在调用savechanges之前,在调用它们之后,调试器中的值是否正确?知道为什么我会得到这种奇怪的行为吗?
Hol*_*ley 11
我也遇到了EF的问题,即当一个项目在另一个要添加到数据库的新对象中被引用时,该项目已经存在.
@NeilThompson给了我如何解决这个问题的线索:
您需要将现有实体附加到上下文,以便它知道它已经存在:
例如:
context.Fabrics.Attach(product.Fabric);
context.Products.Add(product);
context.SaveChanges();
return organisation;
Run Code Online (Sandbox Code Playgroud)
我从这里得到了这个:
"如果您知道某个实体已经存在于数据库中但当前没有被上下文跟踪,那么您可以告诉上下文使用DbSet上的Attach方法跟踪实体.实体将处于Unchanged状态上下文."
我怀疑上下文不知道Fabrics不是新项目 - 所以它添加/插入它们.
如果将结构附加到DataContext(作为Unchanged/NotModified) - 或者从数据库中选择它们,那么当调用SaveChanges()时,上下文知道现有的Fabric对象,然后可以创建新FabricLineItem的导航关系而不创建一个新的面料
EF看起来很多'笨拙' - 你真的需要告诉它几乎所有东西.
| 归档时间: |
|
| 查看次数: |
11555 次 |
| 最近记录: |