2014-01-21 2 views
0

Я использую код Entity Framework. Первые миграции на некоторое время теперь, и мне нравится думать, что я хорошо знаю основы. Однако вчера я столкнулся с довольно странной проблемой, и я не могу найти решение.Entity Framework - добавить создание миграции для объектов во внешней сборке

Я добавил ссылку на DLL (сторонняя сторона - не разработана нами), которая имеет некоторые интерфейсы, которые мне нужны на моих сущностях. DLL содержит множество других вещей, таких как некоторые классы, которые нам не нужны и которые не используются.

Теперь с ссылкой и внедрением некоторых интерфейсов - когда я добавляю перенос с помощью команды «Добавить-миграцию», Entity Framework, похоже, забирает некоторые из классов в DLL и пытается создать таблицы для них в миграция.

Например, у меня есть объект «Пользователь» в моем проекте. Я добавил ссылку на ThirdParty.dll, которая содержит интерфейс IThirdPartyUser. DLL также содержит UnusedClass, , который я не использую - это никак не является частью моего контекста.

Когда я создаю миграцию, я получаю код для создания таблиц базы данных для UnusedClass. Например:

  CreateTable(
      "dbo.UnusedClass", 
      c => new 
       { 
        Id = c.Int(nullable: false, identity: true), 
        RegistrationNumber = c.Int(), 
       }) 

Теперь моя теория состоит в том, что эта внешней сборке (неправильно) имеет некоторую зависимость от Entity Framework - но я не могу понять, почему миграция пытается генерировать код базы данных для них - особенно они не являются частью моего контекста.

Кто-нибудь сталкивался с этим раньше? Я собираюсь начать пробную пробную версию, чтобы попытаться разобраться в сути проблемы.

+0

Я думаю, что я достиг некоторого прогресса. Некоторые из неиспользуемых классов имеют свойства с именем «ID» в своем имени, которое, я думаю, Entity Framework собирает в качестве объекта, использующего его соглашения. У меня есть модель для игнорирования рассматриваемых классов - но есть ли способ исключить классы во всем пространстве имен/DLL или отключить соглашения таким образом? Не нравится тот факт, что EF рассматривает каждый класс в каждой отдельной DLL. – stevehayter

ответ

0

EF должен получать только классы, которые находятся в графе объектов, происходящих из вашего DbContext, поэтому, если класс A находится в вашем контексте, а класс A имеет свойство типа UnusedClass, EF попытается его подделать.

Вы можете добавить NotMappedAttribute к свойству или классу, чтобы EF игнорировал его при создании его сопоставления.

+0

Вот что я думал - но эти классы НЕ определены в моем DbContext. Вот почему я убежден, что внутри сборки есть что-то еще. У меня нет источника, поэтому я не могу добавить NotMappedAttribute (плюс это связано с добавлением ссылки на EF на сборку, что кажется немного неправильным). Я использовал DbModelBuilder.Ignore <>(), чтобы игнорировать рассматриваемые классы на данный момент. – stevehayter

Смежные вопросы