EntityFramework 4.1: несколько классов специалистов в одной таблице - PullRequest
0 голосов
/ 20 июня 2011

Итак, приложение, над которым я сейчас работаю, использует Linq2SQL и отображает классы 1-1 в схему базы данных.Это в целом реалистично, но неудобно для определенной области БД.Я экспериментирую с EntityFramework 4.1 и проверяю, могу ли я получить более естественное строго типизированное отображение для данной области.


Область выглядит примерно так (каждая таблица имеет уникальный идентификатор Guid для идентификатора каждой строки):

tblSubscription [имеет одну службу, имеет множество параметров SubscriptionParameters]
- fkService (Guid)

tblService [имеет много подписок, имеет много ServiceParameters]
- sServiceType (String)

tblSubscriptionParameter [имеет одну подписку, имеет один ServiceParameter]
- sValue (String - частостроковое представление типа int или bool)
- nIndex (Int - для нескольких значений, соответствующих одному и тому же параметру службы)
- fkServiceParameter (Guid)

tblServiceParameter [имеет одну службу, имеет много SubscriptionParameters]
- sName (String) - fkService (Guid)


Фундаментальная таблица здесь - это Подписки.Есть несколько различных специализированных типов подписок, которые я хотел бы написать жестко.Это дает мне преимущество в том, что я могу написать что-то похожее:
var allTestParams = ...SecretSubscriptions.Select(s => s.TestParameter)

вместо довольно уродливого шаблона, которому я должен следовать, используя Linq2SQL:

var allTestParams = ...Subscriptions.Where(s => s.Service.Name == "SecretService")
    .Select(s => s.SubscriptionParameters.First(sp => 
        sp.ServiceParameter.Name == "TestParameter").Value);


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

Как настроитьEntityFramework, чтобы я мог более плавно кодировать с более строгими принудительными типами?

1 Ответ

0 голосов
/ 20 июня 2011

EF не поможет вам в этом.Он может помочь вам в сопоставлении общих подписок со специализированными типами через таблицу для каждого иерархического наследования (но Linq-to-sql также может это делать), но не позволит сопоставлять связанные сущности в качестве параметров производного типа подписки.Это потребует пользовательских представлений базы данных и хранимых процедур для изменений.

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