实体框架4代码 - 首先是多对多插入 [英] Entity Framework 4 Code-First many to many insert
问题描述
我有两个POCO类:
public class Order
{
[Key]
public int OrderId {get;组; }
public virtual ICollection< Item>物品{get;组; }
//其他字段
}
和
public class Item
{
[Key]
public int ItemId {get;组; }
public virtual ICollection< Order>订单{get;组; }
//其他字段
}
然后我有数据上下文类:
public class DataContext:DbContext
{
public DbSet< Item>物品{get;组; }
public DbSet< Order>订单{get;组; }
}
我有一个仓库类:
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-d很多这个错误和EF多对多保存,但我没有找到任何有用的,这将有助于我,因为我找不到代码优先原则的示例。
谢谢!
你可能有其他实体/ code> c code code code code code code这将导致您看到的错误。
所有存储库应在工作单元中共享相同的 DataContext
。您通常使用构造函数注入来执行此操作,如下所示:
public class OrderRepository
{
private readonly DataContext DataContext的;
public void Save(Order entity)
{
entity.OrderDate = System.DateTime.Now;
dataContext.Orders.Add(entity);
dataContext.SaveChanges();
}
public OrderRepository(DataContext dataContext)
{
this.dataContext = dataContext;
}
}
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!
You probably have other entities (from other repositories?) which came from other DataContext
s related to your Order
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:
public class OrderRepository
{
private readonly DataContext dataContext;
public void Save(Order entity)
{
entity.OrderDate = System.DateTime.Now;
dataContext.Orders.Add(entity);
dataContext.SaveChanges();
}
public OrderRepository(DataContext dataContext)
{
this.dataContext = dataContext;
}
}
这篇关于实体框架4代码 - 首先是多对多插入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!