如何在类库中找到EF生成的元文件?

时间:2011-06-23 07:24:02

标签: .net entity-framework-4 class-library

我已将我的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等,但收到错误“无法加载指定的元数据资源”。代替

2 个答案:

答案 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=&quot;Data Source=localhost\DB_01;Initial Catalog=MyDB;Persist Security Info=True;User ID=usr;Password=pwd;MultipleActiveResultSets=True&quot;"
providerName="System.Data.EntityClient"
/>

答案 1 :(得分:1)

解决方案是将元数据文件嵌入到程序集中,方法是将 CopyToOutputDirectory 的输出更改为 EmbedInOutputAssembly

这将允许res://*/Model.ssdl等工作