Обтекание существующей базы данных с Entity Framework - PullRequest
1 голос
/ 16 декабря 2010

Продукт, с которым мы работаем, содержит очень грязную базу данных (это не наш продукт)

  • Первичные ключи не определены
  • Нет внешних ключей
  • Все поля допускают пустое значение без значения null
  • 400 столов

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

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

  1. Заменить нулевые значения значением по умолчанию для типа ("", 0 и т. Д.) При чтении
  2. Добавить навигацию
  3. Использовать LINQ
  4. Экспорт интерфейса OData
  5. Используется в службах отчетов (не очень важно)

Все это должно быть сделано без каких-либо изменений в базе данных, т.е. без представлений, SP и т. Д.

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

[Column(Name="Quantity", CanBeNull = true, DbType="Int")]
private int? _Quantity;
...
[Column(Storage = "_Quantity", DbType = "Int")]
public int Quantity {
    get { return _Quantity ?? 0; }
    set { _Quantity = value; }
}

и затем я вручную добавляю необходимые свойства навигации.

К сожалению, похоже, что инвестировать в linq2sql сейчас плохо. Если я хочу OData, мне нужно пойти с сущности. Проблема в том, что структура сущностей не будет работать вообще, если у таблиц нет первичного ключа (и все поля допускают ноль, поэтому конструктор просто показывает сообщения об ошибках в модели)

Есть идеи, как это сделать?

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

1 Ответ

1 голос
/ 16 декабря 2010

OData можно создавать с помощью LINQ to SQL.

Тем не менее, EF работает нормально (как и все ...) без ПК. Это дизайнер , который хочет знать PK. Поэтому вы должны либо самостоятельно определить EDMX, либо использовать Code-First, либо создать «поддельную» БД с реальными PK для создания вашей модели, а затем переключиться на версию «no PK» во время выполнения.

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