2013-03-26 2 views
1

В нашей базе данных есть таблицы под названием LookUps (общий, нет таблицы под названием lookups) - 1. FamilyStaus (LookUpId, описание). 2. TypeOfRelations (LookUpid, описание) 3. Название (LookUpid, описание)Entity Framework Code First Table Hierarchy

Что было бы лучшим способом определить модель для таких таблиц. Я думал, что если бы я создал общий класс, например

public class LookUp<T> 
{ 
//where T is one of lookup kind 
} 

public class MaritalStatus : LookUp 
{ 
// no field 
} 

// тот же, что и для типа Title и relationship.

Но я смущаюсь, как собрать все вместе 1. Нужно ли мне сопоставлять все типы с таблицами и т. Д. Для конфигурации? 2. У общего поиска нет таблицы в базе данных? Любой хороший учебник или предложения приветствуются. Спасибо, Daljit

ответ

1

Вы смешиваете некоторые концепции, я полагаю. Я считаю, что вы намерены иметь доступ к справочным таблицам, используя только один класс в следующей схеме:

var maritalStatus = new Lookup<MaritalStatus>(); 
var typeOfRelations = new Lookup<TypeOfRelations>(); 

И затем оставить EF, чтобы выяснить, как иметь дело с чтением и записью данных в и из базы данных, используя общий класс Lookup<T>. Такой подход невозможен с помощью EF, потому что не может быть DbSet<T> родовых типов, поскольку EF не знал бы, какие таблицы следует читать и писать заранее (T может быть любым).

Одним из способов использования этого метода является использование наследования типа «Тип таблицы» на EF. Если вы можете изменить схему базы данных, тогда вы можете создать родительскую таблицу LookUp, а остальные LookUps - от родителя, тогда вы можете использовать функцию EF в таблице для каждого типа и вызвать метод расширения .OfType<T> во время запросов.

Проверить статью Morteza Манави за очень хорошее объяснение о том, как только что: http://weblogs.asp.net/manavi/archive/2010/12/28/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt.aspx

Если вы не можете изменить схему базы данных, то вы можете использовать таблицу на классовый подход Бетонный, который получает от без бетонный стол для родительского класса, также описанный здесь в статье Мортезы Манави: http://weblogs.asp.net/manavi/archive/2011/01/03/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and-choosing-strategy-guidelines.aspx

Удачи.

+0

Спасибо, это действительно хороший ответ, и учебник очень информативен. Большое спасибо. Иногда лучше знать, что нельзя сделать. – daljit

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