IEntityChangeTracker的多个实例不能引用实体对象

时间:2010-12-29 21:05:14

标签: asp.net-mvc entity-framework asp.net-mvc-2 entity-framework-4

嘿伙计们,我正在使用 EF4 MVC2 项目中工作,我有以下例外:

  

IEntityChangeTracker的多个实例

无法引用实体对象

我正在尝试做这样的事情:

Transaction transaction = new Transaction();
transaction.Amount = response.Amount;
...
_transactionService.Add(transaction);
_transactionService.Save();

OrderPayment orderPayment = new OrderPayment();
orderPayment.AuthorizationTransaction = transaction;
...
_orderPaymentService.AddOrderPayment(orderPayment);
_orderPaymentService.Save();

我有3层

  1. 存储库层,其中包含所有 EF4 逻辑,以及每个实体的基本CRUD
  2. 应用我所有业务逻辑并使用repo的服务层,当然,我在这里没有任何对 EF4
  3. 的objectcontext的引用
  4. 我网页图层中的 MVC 内容
  5. 上面的代码属于web层的控制器,我的回购是:

    OrderPaymentRepo

    public void AddOrderPayment(OrderPayment orderPayment)
    {
        _pharmacyDpnCtx.OrderPayments.AddObject(orderPayment);
    }
    
    public int Save()
    {
        return _pharmacyDpnCtx.SaveChanges();
    }
    

    TransactionRepo

    public void Add(Transaction transaction)
    {
        _pharmacyDpnCtx.Transactions.AddObject(transaction);
    }
    
    public int Save()
    {
        return _pharmacyDpnCtx.SaveChanges();
    }
    

    我正在网上进行研究,但很多解决方案都使用 UnityOfWork 来使用相同的 ObjectContext ,这是最好的解决方案,但现在我能负担得起,任何没有 UnityOfWork

    的建议

1 个答案:

答案 0 :(得分:0)

首先,看一下这个链接 - 8 Entity Framework Gotchas,在第5章和第6章,有关于你的问题的完整解释。

其次,您可以轻松地在Save and Add方法中使用相同的“Context”对象。