Итак, приложение, над которым я сейчас работаю, использует 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, чтобы я мог более плавно кодировать с более строгими принудительными типами?