Entity Framework 4 Code-First 多对多插入
我在数据库层使用代码优先模式。
我有两个 POCO 类:
public class Order
{
[Key]
public int OrderId { get; set; }
public virtual ICollection<Item> Items { get; set; }
// other fields
}
然后
public class Item
{
[Key]
public int ItemId { get; set; }
public virtual ICollection<Order> Orders { get; set; }
// other fields
}
我有数据上下文类:
public class DataContext : DbContext
{
public DbSet<Item> Items { get; set; }
public DbSet<Order> Orders { get; set; }
}
我有一个“存储库”类:
public class OrderRepository
{
private DataContext dataContext = new DataContext();
public void Save(Order entity)
{
entity.OrderDate = System.DateTime.Now;
dataContext.Orders.Add(entity);
dataContext.SaveChanges();
}
}
当我调用此 OrderRepository.Save 方法时,我收到错误: 实体对象不能被 IEntityChangeTracker 的多个实例引用.
在数据库中,我有一个表 Items、Orders 和 Items_Orders...我在 google 上搜索了很多这个错误和 EF 多对多保存,但我没有找到任何有用的东西来帮助我,因为我找不到代码优先原则的示例。
谢谢!
I'm using code-first pattern for database layer.
I have two POCO classes:
public class Order
{
[Key]
public int OrderId { get; set; }
public virtual ICollection<Item> Items { get; set; }
// other fields
}
and
public class Item
{
[Key]
public int ItemId { get; set; }
public virtual ICollection<Order> Orders { get; set; }
// other fields
}
Then I have data context class:
public class DataContext : DbContext
{
public DbSet<Item> Items { get; set; }
public DbSet<Order> Orders { get; set; }
}
And I have an "repository" class:
public class OrderRepository
{
private DataContext dataContext = new DataContext();
public void Save(Order entity)
{
entity.OrderDate = System.DateTime.Now;
dataContext.Orders.Add(entity);
dataContext.SaveChanges();
}
}
When I call this OrderRepository.Save method I get an error: An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
In database I have a table Items, Orders and Items_Orders...I google-d a lot for this error and for EF many-to-many save, but I haven't find anything useful which would help me, because I couldn't find a sample for Code-First principle.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可能还有其他实体(来自其他存储库?),它们来自与您的
Order
实体相关的其他DataContext
。这会导致您看到的错误。所有存储库应在工作单元期间共享相同的
DataContext
。您通常通过构造函数注入来执行此操作,如下所示:You probably have other entities (from other repositories?) which came from other
DataContext
s related to yourOrder
entity. That would cause the error you're seeing.All repositories should share the same
DataContext
during a unit of work. You typically do this with constructor injection, like this: