Entity Framework Code первой и нескольких сборок - PullRequest
5 голосов
/ 21 марта 2011

У меня есть подкласс в сборке, отличной от его базового класса. Родителем является класс POCO, используемый для EF Code First.

Когда я пытаюсь добавить экземпляр унаследованного класса в базу данных, я получаю InvalidOperationException: "Не удалось найти сопоставление объектов для типа с идентификатором Foo.Bar. .MyInheritedClass».

Работает нормально, если подкласс находится в той же сборке, что и базовый класс.

В обычном EF решение представляется вызовом ObjectContext.MetadataWorkspace.LoadFromAssembly (сборка) . Но я не могу понять, как это относится к Code First.

Любой совет?

Я использую Entity Framework 4.1 RC.

Ответы [ 3 ]

3 голосов
/ 23 марта 2011

Я решил эту проблему, унаследовав от DbContext первой сборки, добавив DbSet <> для производного класса, а затем добавив к нему новые экземпляры производного типа.

Опубликованный код на форуме MSDN здесь.

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

Я знаю, что этот пост немного устарел, но я смог сделать это, используя рекомендацию @ Dave внутри конструктора:

public Context() {
    ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(
        System.Reflection.Assembly.GetAssembly(
             typeof(--[Inherited DbContext]--)));
}
1 голос
/ 04 октября 2012

Я довольно новичок в EF (Entity Framework 4) и получил то же исключение, когда вносил изменения в модель.

Моя проблема оказалась в том, что я не знал, что EF нужны все имена для согласования всех свойств навигации, а не только их тип. Например, если есть свойство навигации с именем foo, то в соответствующем классе должна быть объявленная переменная с тем же именем.

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