[英]C# Entity Framework 6 - How to handle multiple schemas that have same table names
[英]Can't have the same table names in different entity framework models?
我的應用程序使用兩個不同的SQL 2008數據庫 數據庫有幾個具有相同名稱的表,即。 Users
我想將EF4用於這兩個數據庫。 但是,當我運行我的應用程序並且它遇到第二個數據庫的objectcontext創建時,我收到以下錯誤:
名稱為“User”的多個類型存在於不同名稱空間中的EdmItemCollection中。 基於約定的映射需要唯一的名稱,而不考慮EdmItemCollection中EdmItemCollectionto命名空間中的命名空間
這是否意味着我不能在同一個應用程序中使用兩個具有(部分)相同表名的數據庫? 它們位於不同的名稱空間,不同的edmx模型,不同的項目等。
PS其中一個模型是設計者生成的並使用POCO類,另一個是從數據庫中推斷出來並與EF緊密耦合。
要使用“基於默認約定的映射”,以下兩種方法將起作用:
1)使用通配符連接字符串導致沖突:
metadata=res://*/Repositories.EntityFramework.Model.csdl|res://*/Repositories.EntityFramework.Model.ssdl|res://*/Repositories.EntityFramework.Model.msl;
由於*不適用於您的項目,您可以定義多個連接字符串以對包含edmx的程序集進行硬編碼。
2)創建一個幫助器
public static EntityConnection GetEfConnectionString(this string sqlConnectionString)
{
var cs = string.Format(@"metadata=res://{0}/Repositories.EntityFramework.Model.csdl|res://{0}/Repositories.EntityFramework.Model.ssdl|res://{0}/Repositories.EntityFramework.Model.msl;provider=System.Data.SqlClient;provider connection string=""" + sqlConnectionString + @"""",
Assembly.GetCallingAssembly().FullName
);
return new EntityConnection(cs);
}
2017年更新:
public static string GetEfConnectionString(this string sqlConnectionString, Type type)
{
string cs =
string.Format(
@"metadata=res://{0}/Models.Model.csdl|res://{0}/Models.Model.ssdl|res://{0}/Models.Model.msl;provider=System.Data.SqlClient;provider connection string=""" +
sqlConnectionString + @"""",
type.Assembly.FullName
);
return cs;
}
// usage: don't "new" EntityConnection. See 2012 comment.
string connString = ConfigurationManager.ConnectionStrings["sqlConnection"].ConnectionString.GetEfConnectionString();
using(var entities = new XyzEntities(connString))
錯誤意味着,他說:你不能在你的場景中使用默認的基於約定的映射 。 請改用自定義數據庫映射 。 Scott Guthrie有一個關於此的詳細博客項目。
我有同樣的問題,但我的解決方案是從項目中刪除MODEL \\ edmx的DLL,因為它是從不同的項目復制,然后重建它。 解決了一切!
這個錯誤的另一個原因是我發生了什么:我的項目是從其他地方復制的,我重命名了項目,所以編譯后我的bin文件夾中有2個DLL。 上一個項目中的一個和一個全新的項目,根據新項目命名。 一旦我刪除了以前/舊的DLL,名稱空間歧義消失了,錯誤就消失了。
對於DB第一種方法,幸運的是有幾種解決方法非常簡單:
有關更多詳細信息,請參閱此鏈接
解釋得很清楚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.