Необходимо принять таблицу на иерархию (TPH), где вся иерархия сопоставлена с одной таблицей базы данных (dbo.Words
), содержащей все свойства всех классов, и использовать столбец WordTypeId
в качестве столбца дискриминатора. вот, пожалуйста.
1. Модель предметной области
public abstract class Word
{
public int WordId { get; set; }
public string WordText { get; set; }
//DO NOT map the WordTypeId column
//as it is used as the Discriminator column
}
public class Noun : Word { }
public class Verb : Word { }
public class Adjective : Word { }
2. Контекст
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//Assuming WordTypeId eqauls 1 for Nouns, 2 for Verbs, 3 for Adjectives
modelBuilder.Entity<Noun>().Map<Word>(c => c.Requires("WordTypeId").HasValue(1));
modelBuilder.Entity<Verb>().Map<Word>(c => c.Requires("WordTypeId").HasValue(2));
modelBuilder.Entity<Adjective>().Map<Word>(c => c.Requires("WordTypeId").HasValue(3));
}
Чтобы получить свои глаголы, используйте:
var verbs = x.Words.OfType<Verb>()