1

У меня есть абстрактный класс «StrategyBase», и набор подразделам классов, StrategyA/B/C и т.д. Классы суб использовать некоторые из свойств базовый класс, и имеют некоторые индивидуальные свойства. Мой вопрос заключается в том, как сохранить это в базе данных.Saving Аннотация и Суб классы в базе данных

В настоящее время я использую SqlCE и Linq-To-Sql, создавая классы сущностей автоматически с помощью SqlMetal.exe. Я видел, что есть три решения, показанные в this question, но я не могу видеть , как эти решения будут работать или нет с классами SqlMetal/entity. Хотя мне кажется, что «наследование бетонной таблицы », вероятно, будет работать без ручной модификации. Как насчет двух других, будут ли они проблематичными?

Для "Наследование отдельных таблиц" не будут ли все классы получать все переменные, даже если они им не нужны? А для «Наследование таблицы классов» решение я вообще не вижу, как это будет отображаться в сущности-классах для полезной цели. Я могу заметить, что я расширяю эти частичные классы сущностей для создания классов своих бизнес-объектов.

Я также могу рассмотреть возможность перехода к EntityFramework вместо SqlMetal/Linq2Sql, так что было бы неплохо узнать, не имеет ли никакого значения то, что схема легко реализовать.

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

Извините, вопрос немного «повсюду», но, надеюсь, здесь есть некоторые очевидные преимущества/недостатки, которые вы можете дать советам. ?

Приветствия!

+0

TPT/TPH с платформой Entity Framework 4.Сгенерируйте модель, создайте POCO, настройте наследование, посмотрите, как он качает и катит. Достаточно сказано. – RPM1984

ответ

2

На самом деле, этот точный вопрос задают очень много, и он был answered many times. Вероятно, вы не искали терминологию базы данных.

Проблема заключается в применении терминологии и мышления ОО в предметной области без объекта; делая обычную прямолинейную задачу очень сложной и ограниченной.

книги Мартина Фаулера и Скотт Амблер являются не стоит доллар за многие из них, детали в this answer, начиная с 11 дек 10 записи.

Если у вас все еще есть вопросы, отправьте комментарий.

0

Одним из вариантов было бы сделать StrategyBaseSerializable, тогда вы можете сохранить его как строку в базе данных. Я не знаю, насколько велика будет строка, так как все зависит от размера вашего объекта, но вы можете сделать поле базы данных nvarchar(1024) или даже nvarchar(max). В конечном итоге это приведет к тому, что весь объект будет храниться в одном поле таблицы как string.

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

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