Я использую структуру данных, подобную этой, где тип животного определяется из колонки дискриминатора в таблице: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)
Есть любой способ добиться этого?
ли вы какое-либо решение для вас ситуации, это то, что я 've искали .. – c0demaster