要使用“默认的惯例基于映射”下面的方法2将工作:
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))
在设计器中更改其中一个实体名称是否会解决此问题?不过,这似乎有点不方便。 – 2010-11-01 13:24:06
我希望有一个不同的解决方案。这是一个数据库转换应用程序(从旧数据库到新数据库),因此有相同的表名。除了结束了错误的类型名称之外,在设计器中重命名它们意味着在新的应用程序中会进行一些严重的重构。 – Carvellis 2010-11-01 13:30:05
我有不同的实体名称相同的问题... – juanora 2016-11-25 09:59:45