我嘗試將使用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