C# 实体框架4代码第一次多对多插入

C# 实体框架4代码第一次多对多插入,c#,entity-framework,entity-framework-4,many-to-many,code-first,C#,Entity Framework,Entity Framework 4,Many To Many,Code First,我在数据库层使用代码优先模式 我有两个POCO课程: public class Order { [Key] public int OrderId { get; set; } public virtual ICollection<Item> Items { get; set; } // other fields } 调用此OrderRepository.Save方法时,我得到一个错误:一个实体对象不能被多个IEntityChangeTracker实例引

我在数据库层使用代码优先模式

我有两个POCO课程:

public class Order
{
    [Key]
    public int OrderId { get; set; }
    public virtual ICollection<Item> Items { get; set; }
    // other fields
}
调用此OrderRepository.Save方法时,我得到一个错误:一个实体对象不能被多个IEntityChangeTracker实例引用。

在数据库中,我有一个表Items、Orders和Items\u Orders…我搜索了很多关于这个错误和EF多对多保存的内容,但我没有找到任何有用的帮助,因为我找不到代码优先原则的示例


谢谢

您可能有其他实体(来自其他存储库?),它们来自与您的
订单
实体相关的其他
DataContext
s。这会导致你看到的错误

在一个工作单元中,所有存储库都应该共享相同的
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;
    }
}

谢谢你的回答。如何为DataContext类创建构造函数注入?请参阅更新的答案。然后对UOW中的所有存储库使用一个
DataContext
。谢谢,就这样了!:)你能给我推荐一本EntityFramework4的书/网站/博客,里面有每个使用它的人都应该知道的基本知识吗?我问错人了。我从来没有读过EF的书。但是MarkSeeman在.NET中的依赖注入很好地涵盖了EF和MVC的集成。
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();
    }
}
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;
    }
}