使用EF 4.0。我有两个实体模型,都名为CoreEntities,但在不同的程序集和不同的名称空间中。
如果我有一个引用两个assmeblies的项目,EF似乎对要加载的正确元数据工件感到困惑。
具体来说,我得到的错误如下:
The EntitySet name 'CoreEntities.MyEntities' could not be found.
一旦删除对其中一个程序集的引用,错误就会停止发生。
我不确定这是否有所作为,但我使用以下代码生成我的权利连接字符串:
public static string BuildEntityConnectiongString(string entityContextName)
{
//Format: metadata=res://*/{EntityContext}.csdl|res://*/{EntityContext}.ssdl|res://*/{EntityContext}.msl;provider=...
string rawString = System.Configuration.ConfigurationManager.ConnectionStrings["GenericEntityConnectionString"].ConnectionString;
return rawString.Replace("{EntityContext}", entityContextName);
}
EF如何确定在哪个程序集中查找嵌入的元数据?人们会认为它总是会首先看到包含模型的装配体,但显然这不是它的工作方式。
想法?
答案 0 :(得分:1)
像往常一样,快速查看文档提供了答案:
http://msdn.microsoft.com/en-us/library/cc716756.aspx
基本上,res:// * /中的通配符告诉EF在所有已加载的程序集中搜索元数据。它找到匹配的第一个,它使用。
就我而言,它首先找到错误的。
对此的解决方法是修改我的BuildEntityConnectiongString函数(以及我正在使用的通用连接字符串)以允许我明确指定程序集名称。