может ли LINQ to SQL поддерживать наследование одной таблицы? - PullRequest
0 голосов
/ 11 марта 2011

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

Я искал в Google, и, похоже, лучший способ для этого дизайна - использовать Single Table Inheritance ссылку .

Правильно ли приведенное выше утверждение? Если да, может ли LINQ to SQL обрабатывать подход наследования одной таблицы? Я был бы признателен, если бы вы могли предоставить мне несколько образцов, так как я устал от изменения и добавления таблиц для различных требований клиентов.

1 Ответ

1 голос
/ 21 марта 2011

Модель «Единственное наследование таблиц» - единственная поддерживаемая LINQ to SQL. В этой модели вы устанавливаете столбец (тип) дискриминатора и указываете, какой тип объекта создать, основываясь на значении в дискриминаторе. Каждый тип экземпляра может иметь разные свойства поля. Столбцы, которые не используются всеми типами, должны быть установлены как обнуляемые, чтобы нулевые значения использовались при вставке других столбцов для данного типа.

При этом я не уверен, что вам нужна именно эта модель из вашего заявления о том, что вы "устали от изменения и добавления таблиц для разных требований клиентов". Подход с использованием одной таблицы требует, чтобы вы не только добавляли необходимые дополнительные столбцы в таблицы для новых типов, но также генерировали новые классы и компилировали приложение, чтобы учесть эти новые требования.

Возможно, вы захотите рассмотреть один из подходов базы данных пары ключ-значение / NoSql (http://en.wikipedia.org/wiki/Key-value_store#Key-value_store). В модели ключ-значение у вас есть отдельная строка для каждого свойства вашего объекта, где строка состоит из objectId , propertyName и Value. Эта структура данных позволяет вам иметь любую форму, не меняя схему базы данных. К сожалению, в LINQ нет встроенного механизма для принятия гибких моделей данных и их сопоставления с плоскими объектами. если хотите, создайте его с помощью динамических типов в .NET 4. Добавление пользовательского интерфейса и бизнес-логики - еще одна задача.

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