我正在将EF6 .net fwk应用程序迁移到实体框架核心3.0。然而,在我的旧EF6项目中,我可以选择使用DbConnection对象初始化DbContext,用于实现工作单元并使用相同的事务,而无需更改connection对象。
public MyDataContext(IDbConnection connection)
: base((DbConnection) connection, false)
{
} 然而,在EF内核中,我只有一个选择来初始化使用DbContextOptions的上下文,那就是接受一个连接字符串。这将初始化新的连接,而我将无法处理事务。
旧EF代码
var pipeline = endpointConfiguration.Pipeline;
pipeline.Register(new UnitOfWorkSetupBehavior(storageSession =>
{
var dbConnection = storageSession.SqlPersistenceSession().Connection;
var context = ***new MyDataContext(dbConnection);***
context.Database.UseTransaction(storageSession.SqlPersistenceSession().Transaction);
storageSession.SqlPersistenceSession().OnSaveChanges(x => context.SaveChangesAsync());
return context;
}), "Setting up unit of work");带connection对象的构造器有什么替代方法,或者EF核心DBcontext中有什么真正的变化,不使用connection?
发布于 2020-02-09 22:43:52
在.Net核心中,Dependency injection成为框架的基石,所以,现在你不应该自己初始化DbContext,而应该使用leave it to the container,它默认使用"scoped liftime“来初始化它,因此在整个请求过程中,它将传递相同的DBContext给你的服务,因此一个失败应该(如果你做得对,在最后只调用一次保存更改)回滚所有的更改。
https://stackoverflow.com/questions/60137699
复制相似问题