我尝试将使用EF4初始开发的项目迁移到EF6,以利用EF6事务管理。在代码优先模式下使用上下文,代码是从数据库优先或模型优先开发的EDMX文件生成的
余米面临的问题是,该项目已使用数据库优先方法创建的,所以当我米使用像context.Database.UseTransaction
代码,我米遇到以下错误:
The context is being used in Code First mode with code that was generated from an EDMX file for either Database First or Model First development.
此异常内触发OnModelCreating
我的DbContext
类的方法。
有什么想法?
感谢
编辑:
的事情是,它的使用与EDMX数据库第一种方法的遗留代码。我必须在这个项目中实现EF6事务,所以它现在应该更像是代码优先模式。
此外,这里的上下文类:
public class MyContext : BaseDbContext
{
public MyContext (DbConnection existingConnection, bool contextOwnsConnection)
: base(existingConnection, contextOwnsConnection)
{
}
}
和连接字符串:
<add name="CS"
connectionString="Data Source=MyServ;Initial Catalog=MyDBName;User Id=MyUser;Password=MyPwd;Pooling=True;Min Pool Size=5;Max Pool Size=20;Persist Security Info=True;MultipleActiveResultSets=True;Application Name=EntityFramework;Enlist=false"
providerName="System.Data.EntityClient" />
我尝试设置providerName
到System.Data.SqlClient
但它不会改变任何东西。
请注意,原来的连接字符串是数据库中的第一个格式:
<add name="OrderManagement"
connectionString="metadata=res://*/MyManagementModel.csdl|res://*/MyManagementModel.ssdl|res://*/MyManagementModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=MyServer;Initial Catalog=MyDBName;User Id=MyUser;Password=MyPwd;Pooling=True;Min Pool Size=5;Max Pool Size=20;Persist Security Info=True;MultipleActiveResultSets=True;Application Name=EntityFramework""
providerName="System.Data.EntityClient" />
如果我尝试,而我一直在数据库中的第一格式的连接字符串打开连接,我米面临异常Keyword metadata not supported
,并且当我将连接字符串放在代码第一格式上时,我正面临错误The context is being used in Code First mode with code that was generated from an EDMX file for either Database First or Model First development.
检查您的连接字符串。如果它不包含元数据部分,那么它将首先被假定为代码,如果它包含,那么它假定它是基于edmx的。所以有可能你有一个连接字符串来实例化这个缺少元数据部分的db上下文。 – reckface
感谢您的回复。这就是事情开始变得怪异的地方。实例化我的dbcontext时,我尝试了两种连接字符串格式。当我使用代码优先的方法(没有元数据部分),我仍然得到上面提到的相同的错误,当我添加元数据部分时,它说“不支持关键字:'元数据'” – Podelo
当你有元数据部分? – reckface