Могут ли быть использованы первые возможности кода в EF 4.1 и выше, если схема БД неизвестна до времени выполнения? - PullRequest
2 голосов
/ 28 февраля 2012

Это, кажется, явно не указано в качестве функции в любом из редких примеров, которые я могу найти, например:

http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-1-introduction-and-model.aspx

http://www.codeproject.com/Articles/336187/code-first-practical-case

или

http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx

Но я думаю, что документы DbContext по крайней мере подразумевают, что это возможно: http://msdn.microsoft.com/en-us/library/system.data.entity.dbcontext(v=vs.103).aspx

DbContext обычно используется с производным типомкоторый содержит свойства DbSet для корневых объектов модели.Эти наборы автоматически инициализируются при создании экземпляра производного класса.

Моя цель - использовать EF для доступа к БД через службу данных WCF из клиента Silverlight, где некоторые изстолбцы неизвестны во время выполнения.Любые лучшие идеи будут оценены

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Ни WCF, ни EF не подходят для этой ситуации.WCF и его автоматически сгенерированные прокси ожидают модель, определенную во время компиляции - вы можете избежать этого, но в результате вы будете работать не со строго типизированными контрактами данных, а с «общими данными» и работать с ними на уровне XML или JSON.

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

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

0 голосов
/ 28 февраля 2012

Если кому-то интересно, вот краткий обзор того, как изменить файлы EDMX в соответствии с БД, обнаруженной во время выполнения:

  1. Получение и анализ схемы из базы данных (простой XML)
  2. Поместите схему в формат, сопоставимый с метаданными EDMX (более сложный XML)
  3. Используйте такой инструмент: http://efmodeladapter.codeplex.com/ для внесения изменений в метаданные (требуется некоторая сборка)
  4. Создание модели данных

Существует коммерческий инструмент для того же, но он не бесплатный: http://huagati.com/dbmltools/

А вот лучший список других, более приемлемых вариантов: Изменение модели Entity Framework во время выполнения

...