Car*_*lis 16 .net c# sql-server entity-framework
我的应用程序使用两个不同的SQL 2008数据库 数据库有几个具有相同名称的表,即.Users.我想将EF4用于这两个数据库.但是,当我运行我的应用程序并且它遇到第二个数据库的objectcontext创建时,我收到以下错误:
名称为"User"的多个类型存在于不同名称空间中的EdmItemCollection中.基于约定的映射需要唯一的名称,而不考虑EdmItemCollection中EdmItemCollectionto命名空间中的命名空间
这是否意味着我不能在同一个应用程序中使用两个具有(部分)相同表名的数据库?它们位于不同的名称空间,不同的edmx模型,不同的项目等.
PS其中一个模型是设计者生成的并使用POCO类,另一个是从数据库中推断出来并与EF紧密耦合.
Leb*_*ses 22
要使用"基于默认约定的映射",以下两种方法将起作用:
1)使用通配符连接字符串导致冲突:
metadata=res://*/Repositories.EntityFramework.Model.csdl|res://*/Repositories.EntityFramework.Model.ssdl|res://*/Repositories.EntityFramework.Model.msl;
Run Code Online (Sandbox Code Playgroud)
由于*不适用于您的项目,您可以定义多个连接字符串以对包含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);
}
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10931 次 |
| 最近记录: |