2013-12-19 2 views
3

Я использую структуру данных, подобную этой, где тип животного определяется из колонки дискриминатора в таблице:Entity Framework One-TPH Многие Mapping

public class Farm { 
    public int Id { get; set; } 

    public virtual ICollection<Pig> Pigs { get; set; } 

    public virtual ICollection<Cow> Cows { get; set; } 
} 

public class Animal { 
    public int Id { get; set; } 

    public int FarmId? { get; set; } 

    public virtual Farm Farm { get; set; } 

    public string Name { get; set; } 
} 

public class Pig : Animal {} 
public class Cow : Animal {} 

Mapping:

this.Map<Pig>(m => m.Requires("Type").HasValue((int) AnimalType.Pig)); 
this.Map<Cow>(m => m.Requires("Type").HasValue((int) AnimalType.Cow)); 

Но я не могу изобразить отношения между Свиньи, Коровы и Фермы. Я попытался это из FarmMap, который дает дубликат ошибки отображения столбца:

this.HasMany(t => t.Pigs) 
    .WithOptional(t => t.Farm) 
    .Map(m => m.MapKey("FarmId")); 
this.HasMany(t => t.Cows) 
    .WithOptional(t => t.Farm) 
    .Map(m => m.MapKey("FarmId")); 

Mapping от каждого из животных не работает либо, он создает дополнительные столбцы (например Farm_Id и Farm_Id1 - в дополнение к FarmId -. по одному для каждого типа животных).

this.HasOptional(t => t.Farm) 
    .WithMany(t => t.Pigs) 
    .HasForeignKey(d => d.FarmId) 

Перемещения навигации свойства от Animal модели к наследуемым моделям вызывает один дополнительный столбец будет генерироваться - FarmId1 (! Так немного ближе к тому, что я хочу, чем выше 2)

Есть любой способ добиться этого?

+0

ли вы какое-либо решение для вас ситуации, это то, что я 've искали .. – c0demaster

ответ

0

Я не эксперт EF, но от модели, первый подход, я знаю, что это будет отображаться как коллекция животных, вы можете выбрать Farm.Animals.OfType<Pig>()

+0

Не означает ли это, что вся коллекция животных загружается с SQL Server, а затем фильтруется в те, которые являются свиньями? – Jamie

+0

(Это было то, чего я пытался избежать с этим вопросом ... http://stackoverflow.com/questions/20663337/entity-framework-filtered-navigation-properties) – Jamie

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