2009-03-10 1 views
3

Я начал экспериментировать с LINQ to SQL, и то, что я делаю, в основном создает классы с декораторами отображения LINQ - тем самым выбирая, какие части схемы таблицы db я хочу включить в свои классы.Могу ли я использовать Entity Framework, как я использую LINQ to SQL?

Простой пример:

private DateTime? _LocalCopyTimestamp = (DateTime)SqlDateTime.MinValue; 
[Column(Name = "recaLocalCopyTimestamp", Storage = "_LocalCopyTimestamp", CanBeNull = true)] 
public DateTime? LocalCopyTimestamp 
{ 
    get 
    { 
     return this._LocalCopyTimestamp; 
    } 
    set 
    { 
     this._LocalCopyTimestamp = value; 
    } 
} 

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

Есть ли способ иметь эту гибкость с помощью Entity Framework без необходимости включать файлы информации схемы и/или множество отдельных файлов кода?

Мог ли я затем создавать классы, которые «используют» несколько базовых таблиц?

Может ли кто-нибудь указать мне на документацию по этому вопросу?

ответ

8

Функция, которую вы запрашиваете (введите классы C# и сгенерируйте свою модель из них), называется командой Entity Framework «Model First». Он не существует в текущей, отправляющей версии Entity Framework, но является запланированной функцией для следующей версии. Если вы смотрите Entity Framework talks from PDC, вы можете увидеть демонстрации этой новой функции. В текущей версии вам не нужно писать «много» файлов сопоставления, но вам нужен один (файл EDMX), и он должен быть XML.

Да, вы можете создавать классы сущностей, которые используют несколько базовых таблиц. Это называется «Entity splitting». Пошаговые инструкции по ссылке. В общем, вы обнаружите, что Entity Framework поддерживает множество более сложных сценариев сопоставления, чем LINQ to SQL.

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

  1. Для большинства из ранней истории (предварительно RTM; «ObjectSpaces») в Entity Framework, написание XML-файлы вручную был единственный способ, чтобы использовать инструмент. Дизайнер - это недавняя функция и значительно менее стабильна, чем сама Entity Framework.
  2. Существуют определенные функции Entity Framework, такие как сложные типы, которые вообще не поддерживаются дизайнером.
  3. В дизайнере не поддерживаются определенные сценарии сопоставления, такие как сопоставление отдельных столбцов или таблиц сопоставления без отношения внешнего ключа, которые могут быть необходимы для устаревших баз данных.
  4. Как я уже упоминал в (1), конструктор довольно немного груб чем сам Entity Framework. Таким образом, по более крупным проектам вам, вероятно, придется очистить после ошибок дизайнера.
+0

Хороший ответ, я думаю, в соответствии с тем, что вы сказали, лучше подождать следующей версии. – leppie

+0

Все ваши замечания к дизайнеру отмечены. Я также согласен с leppie: я держусь за следующую версию; -p Провел день, глядя на нее на саммите MVP, - выглядит намного лучше, чем текущее воплощение. –

+0

«На протяжении большей части истории Entity Framework» ... ну, для истории RTM они оба имеют одинаковый возраст ... –

1

Entity Framework использует EDM для моделирования данных; это набор из 3 сложных файлов схемы (хранилище, концептуальное, сопоставление), чаще всего хранящихся в качестве ресурсов в проекте (через конструктор, который использует один файл EDMX для генерации всех 3 файлов схемы).

Он не поддерживает атрибутивные классы для этой информации. Единственный разумный способ написать EDM - через конструктора (по сути, инструмент моделирования, который вам не нравится).

Re классифицирует «использование» более чем одной базовой таблицы; да, один объект Entity Framework на концептуальном уровне (то есть классы) может охватывать несколько таблиц хранения. Это особенно полезно для некоторых примеров наследования, но может использоваться (IIRC) и для плоских моделей. Вы делаете это через «сопоставления» между хранилищем и концептуальными слоями (чаще всего, на вкладке в дизайнере).

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

  • Нет связанных вопросов^_^