我使用類似於此,其中動物的類型是從表中的一個鑑別柱測定的數據結構:實體框架一對多映射TPH
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 {}
映射:
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"));
從每個動物的映射也不管用,它會產生額外的列(如Farm_Id
和Farm_Id1
- 除了FarmId
- 。每個動物類型一個)。
this.HasOptional(t => t.Farm)
.WithMany(t => t.Pigs)
.HasForeignKey(d => d.FarmId)
從Animal
模型的繼承機型移動導航屬性會導致產生一個附加列 - FarmId1
(!那麼一點點接近我想要比上述2)
有任何方式來實現這一目標?
你找到適合你的情況的任何解決方案,這就是我一直在尋找.. – c0demaster