Расширение Entity Framework Model для включения нового свойства - PullRequest
7 голосов
/ 23 мая 2011

Я новичок в EF, поэтому, пожалуйста, извините, если это нубский вопрос.

По сути, у нас есть модель EF, настроенная с использованием Model First для нашего проекта «платформа», и она используется многими приложениями.который мы строим на вершине этой платформы.В некоторых из этих приложений мы хотим расширить классы, чтобы включить дополнительные свойства без изменения модели в платформе.Возможно ли это с EF 4, и как бы я мог сделать это без изменения файла .edmx?

Я заметил, что все сгенерированные классы являются частичными, поэтому потенциально я мог бы создать новый частичный класс с тем же именемчтобы включить новые свойства, но есть ли какие-то отображения, о которых нужно позаботиться?

ps при нормальных обстоятельствах, я бы предпочел использовать наследование и создать новый класс для хранения новых свойств вместо этого, но снова,Я не знаю, как это сделать с EF. Любое просветление здесь будет высоко ценится!

Большое спасибо,

Ответы [ 3 ]

22 голосов
/ 23 мая 2011

Вы не можете использовать наследование, поскольку после загрузки сущности из источника данных EF не будет знать о наследовании, и поэтому будет создавать экземпляр базового типа без ваших свойств вместо производного типа с вашими свойствами. Любое наследование должно отображаться в EDMX, если EF должен с ним работать.

Использование частичного класса решит вашу проблему, но:

  • Все части частичного класса должны быть определены в одной сборке
  • Свойства вашей частичной части не сохраняются в базе данных
  • Свойства вашей частичной части не могут использоваться в запросах linq-to-entity
7 голосов
/ 23 мая 2011

EF генерирует частичные классы.Таким образом, чтобы расширить MyEntity, создайте файл MyEntity.cs с

partial class MyEntity
{
    public string MyExtraProperty {get;set;}
}

edit: в том же пространстве имен, что и ваши сгенерированные сущности

1 голос
/ 23 мая 2011

Я согласен с добавлением дополнительных свойств к частичному классу ваших сущностей (как вы и Кайдо сказали).

Таким образом, вы можете свободно добавлять нужные свойства, не изменяя сгенерированные классы и если вы генерируете свою модельснова (или обновите его из БД), ваш частичный класс не изменяется.

По моему мнению, добавление свойств к частичным классам сгенерированных сущностей - это путь.

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