1、找不到实体容器。
在开发ADOEF的对象时作为dll发布。由其他框架这些dll进行加载。但在加载两个不同的dll是发生了一个小问题。
建立两个dll:test1和test2。两个dll中的.edmx都采用NewEntity这个名字。在加载这两个dll时,无论先加载哪一个,在加载第二个时都会出错:
在映射和元数据信息中找不到指定的默认 EntityContainer 名称“TestEntities”。
加载第二个时找不到实体名称。估计是路径的问题,导致找不到。字符串如下:
<add name="TestEntities" connectionString="metadata=res://*/NewEntity.csdl|res://*/NewEntity.ssdl|res://*/NewEntity.msl;provider=System.Data.SqlClient;provider connection string="Data Source=JIAYZ2003\SQL2005;Initial Catalog=Test;Integrated Security=True;
MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
因为所有的实体定义都在.csdl,.ssdl,msl中,因此要正确的找到这三个文件。
res://*/:
"*"表示它会去输出路径下所有的Aseembly中找这三个被嵌入在Assembly中的文件。如果两个dll中有相同的配置,而实体名不同就会引起错误。如果知道Assembly的名称,最好使用强制路径:
即:metadata=res://test1/NewEntity.csdl|res://test1/NewEntity.ssdl|res://test1/NewEntity.msl;
这样既保证正确性又提高速度。
部分相关配置:
Metadata Artifact Processing: 设置为Embed,将三个实体文件嵌入到Assembly中。
Build Action:设置为EntityDeploy。