Как найти метафайлы, сгенерированные EF, в библиотеке классов? - PullRequest
2 голосов
/ 23 июня 2011

Я переместил свою модель 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 ]

2 голосов
/ 23 июня 2011

Когда модель EF находится в отдельном проекте / (MyCompany.MyApp.Infra), который используется другим проектом, необходимо правильно настроить строку подключения в app.config или web.config

См. Этот пример:

MyContext.cs в проекте MyCompany.MyApp.Infra.

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;
        }
    }
}

web.config в веб-проекте Silverlight

<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 голос
/ 23 июня 2011

Решение состоит в том, чтобы внедрить файлы метаданных в сборку, изменив вывод с CopyToOutputDirectory на EmbedInOutputAssembly

Это позволит res://*/Model.ssdl и т. Д. Работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...