【发布时间】: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