Можно ли смоделировать эту структуру данных в EF4, nHibernate, Subsonic? - PullRequest
0 голосов
/ 08 декабря 2010

В настоящее время мы не используем ORM.Я хочу смоделировать относительно простую структуру базы данных в существующем приложении.Это попытка добавить гибкость и адаптацию во время выполнения к схеме при использовании SQL Server (2008) по сравнению с переходом на нереляционную базу данных документов (Couch, Mongo и т. Д.)

Мы используемэтот шаблон в ряде мест, но здесь я обобщу его для ясности:

У нас есть таблица Object со следующей структурой:

create table Object (
    ObjectID int,
    FixedObjectProperty1 varchar(25),
    FixedObjectProperty2 int,
    etc.
)

Есть также связанный Object_Attributes таблица, которая содержит «гибкие» свойства для каждого объекта.По сути, это группа пар имя / значение для каждого объекта со следующей структурой:

create table Object_Attributes (
    Object_AttributesID int,
    ObjectID int,
    PropertyName varchar(50),
    PropertyValue varchar(50)
)

Я хочу смоделировать это с использованием некоторой технологии ORM (EF4, Subsonic, nHibernate или "roll my own")взять приведенную выше структуру данных и получить динамический / анонимный объект (который в конечном итоге будет отправлен веб-клиенту в виде JSON) со следующей структурой (например, 3 записи в таблице Object_Attributes:

ObjectID
FixedObjectProperty1
FixedObjectProperty2
PropertyName1
PropertyName2
PropertyName3,
etc

Конечно, я также должен иметь возможность десериализации из JSON обратно в БД. Любые мысли или предложения приветствуются.

Ответы [ 2 ]

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

IMO невозможно отобразить это в EF.Вы не сможете спроецировать отношение 1-N в сплющенную структуру.

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

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

То, что вы можете попытаться сделать, это загрузить object и object_attributes общим подходом (объект будет иметь коллекцию атрибутов) и построить некоторую динамическую оболочку flatten (DLR) на вершине этой структуры.,Но в случае JSON было бы проще просто создать собственную сериализацию.

0 голосов
/ 08 декабря 2010

Способ сделать это - создать представления в базе данных и создать объекты для представлений.

...