【问题标题】:EF Code First "Transactional Issue"EF Code First“事务性问题”
【发布时间】:2010-12-17 17:19:48
【问题描述】:

在 asp.net 网络应用程序中使用最新的 EF Code First CTP,我似乎遇到了问题。请原谅缺少代码(暂时),但我会尽力解释清楚。

在我的控制器中,我通过我的 DI 容器注入了一个存储库工厂和一个 IDataContext。 IDataContext 只是我的 DbContext 的一个接口,存储库工厂本身也将注入其中之一。

我的问题是,当从存储库(从工厂)检索用户,然后在 using(DataContext) 块中添加一些属性 - 注入的 IDataContext 时,更改不会被保存。

如果我创建一个新用户 - 效果很好。但是当我将记录添加到用户的 ICollection 时,它们不会持久存在。

我创建了一个测试以使用一个 DataContext 来创建用户,然后使用另一个 DataContext(都在使用块中)来添加记录。它工作正常(在这个 create-dispose-create-dispose 序列中)。

我的猜测是,在控制器中,IDataContext 的不同实例正在影响发送到数据库的命令 - 甚至在此之前......

我应该明天解决问题。但是,如果我无法找到问题,任何建议都会很好。

【问题讨论】:

  • 我遇到了和你类似的问题,但更多的是关于交易为空。我通过重写控制器事件(即 OnActionExecuting 并设置事务值)修复了它。
  • 您是否将 DbContext 本身的实例用作事务?或者您是否可能使 DbContext 成为单例(如在 Singleton 通过 IoC 绑定但仍然“新建”)并在实例调用 SaveChanges() 时更新所有实例以反映数据库的当前状态?

标签: entity-framework entity-framework-4 ef4-code-only


【解决方案1】:

我设法修复它。基本上我只需要告诉 DependencyResolver 我的 DbContext 实例是每个请求的。

希望这可以节省一些时间。

【讨论】:

    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2023-03-12
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    相关资源
    最近更新 更多