如果我有以下代碼生成我的數據庫,它將TankComponent表中的外鍵分配給Asset表而不是Tank表。有人能解釋爲什麼嗎?我是否需要關閉Fluent API中的特定約定或更改?它真的只是看着列名嗎?從繼承無法正確映射外鍵
[Table("Asset")]
public abstract class Asset
{
[Key]
public int AssetId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
[Table("Tank")]
public class Tank : Asset
{
public Tank()
{
this.TankCompnents = new Collection<TankComponent>();
}
public int TankField1 { get; set; }
public ICollection<TankComponent> TankCompnents { get; set; }
[NotMapped]
public IEnumerable<Floor> Floors { get { return this.TankCompnents.OfType<Floor>(); } }
}
[Table("TankComponent")]
public abstract class TankComponent
{
[Key]
public int TankComponentId { get; set; }
[ForeignKey("Tank")]
public int AssetId { get; set; }
public Tank Tank { get; set; }
public string Name { get; set; }
}
//forgot this in initial post
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Tank>()
.Map(m =>
{
m.Properties(a => new { a.AssetId, a.Name, a.Description });
m.Requires("AssetType").HasValue(1);
m.ToTable("Asset");
})
.Map(m =>
{
m.Properties(t => new { t.AssetId, t.TankField1 });
m.ToTable("Tank");
});
}
我無法用EF 5.0,.NET 4.0,SQL Express重現此操作。我從'TankComponent'獲得FK到'Tank'(我必須添加一個派生自'TankComponent'的具體類來使模型有效,我猜你也有這樣的類。)。你使用什麼版本? – Slauma 2013-05-06 17:55:43
我忘了添加我的Fluent API代碼到這個: protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity() .MAP(M => { m.Properties(A =>新的{a.AssetId,a.Name,a.Description}); m.Requires( 「AssetType」) 。的HasValue(1); m.ToTable(「Asset」); } ) .MAP(M => { m.Properties(T =>新的{t.AssetId,t.TankField1}); m.ToTable( 「罐」); }); } –
stumpykilo
2013-05-06 18:21:30
是的,Slauma。我有一個從TankComponent派生的具體類。我使用EF 6.0,因爲我認爲它可以解決這個問題。在5.0 – stumpykilo 2013-05-06 18:23:36