我已将我的Entity Framework 4模型移动到类库中。元文件构建到\ bin \ Debug
我用什么连接字符串来查找类库中的元文件?我试过了:
<add name="Models.DataModelConnectionString"
connectionString="metadata=res://MyClassLibrary, 1.0.0.0, neutral,
null/bin/Debug/Models.DataModel.csdl|res://MyClassLibrary, 1.0.0.0, neutral,
null/bin/Debug/Models.DataModel.ssdl|res://MyClassLibrary, 1.0.0.0, neutral,
null/bin/Debug/Models.DataModel.msl;provider=Devart.Data.Oracle;
....">
我仍然收到错误“指定的元数据路径无效”。
我是否需要将元文件移动到类库根目录?
修改
我已尝试使用res://*/Models.DataModel.csdl
等,但收到错误“无法加载指定的元数据资源”。代替
答案 0 :(得分:2)
当EF模型位于另一个项目使用的单独/项目(MyCompany.MyApp.Infra)中时,您需要在app.config或web.config中正确配置连接字符串
见这个例子:
MyCompany.MyApp.Infra项目中的MyContext.cs 。
namespace MyCompany.MyApp.Domain
{
using System.Data.Objects;
/// <summary>
/// The MyContext
/// </summary>
public partial class MyContext : ObjectContext, IUnitOfWork
{
/// <summary>
/// The ConnectionString
/// </summary>
public const string ConnectionString = "name=MyContext";
/// <summary>
/// The ContainerName
/// </summary>
public const string ContainerName = "MyContext";
/// <summary>
/// Initializes a new instance of the <see cref="MyContext"/> class.
/// </summary>
public MyContext()
: base(ConnectionString, ContainerName)
{
this.ContextOptions.LazyLoadingEnabled = true;
}
}
}
Silverlight Web项目中的web.config
<add name="MyContext"
connectionString="metadata=res://MyCompany.MyApp.Infra/DataModel.MyContext.csdl|
res://MyCompany.MyApp.Infra/DataModel.MyContext.ssdl|
res://MyCompany.MyApp.Infra/DataModel.MyContext.msl;
provider=System.Data.SqlClient;
provider connection string="Data Source=localhost\DB_01;Initial Catalog=MyDB;Persist Security Info=True;User ID=usr;Password=pwd;MultipleActiveResultSets=True""
providerName="System.Data.EntityClient"
/>
答案 1 :(得分:1)
解决方案是将元数据文件嵌入到程序集中,方法是将 CopyToOutputDirectory 的输出更改为 EmbedInOutputAssembly
这将允许res://*/Model.ssdl
等工作