【发布时间】:2019-10-11 12:09:42
【问题描述】:
我正在尝试将最初使用 EF4 开发的项目迁移到 EF6,以利用 EF6 事务管理。
我面临的问题是该项目是使用数据库优先方法创建的,所以当我使用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.
此异常在我的 DbContext 类的 OnModelCreating 方法内触发。
有什么想法吗?
谢谢
编辑:
问题在于它是使用 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,当我将连接字符串置于代码优先格式时,我将面临错误@ 987654331@
【问题讨论】:
-
检查您的连接字符串。如果它不包含元数据部分,则假定它首先是代码,如果包含,则假定它是基于 edmx 的。因此,您可能有一个连接字符串实例化了缺少元数据部分的数据库上下文。
-
感谢您的回复。这就是事情开始变得奇怪的地方。在实例化我的 dbcontext 时,我尝试了两种连接字符串格式。当我使用代码优先方法(没有元数据部分)时,我仍然得到上面提到的相同错误,当我添加元数据部分时,它显示“不支持关键字:'元数据'”
-
当您拥有元数据部分时,您的 providername 设置为什么?
-
设置为“System.Data.EntityClient”。我尝试将其设置为“System.Data.SqlClient”,但它是一样的。
-
当您使用数据库优先方法并使用 edmx 时,使用
OnModelCreating没有任何意义。请添加有关该问题的更多详细信息,例如分享您的上下文文件代码,并说明您是否使用 edmx 并从网络配置分享您的连接字符串。
标签: c# .net entity-framework