1

次のコードでデータベースを生成すると、TankComponent テーブルの外部キーが Tank テーブルではなく Asset テーブルに割り当てられます。誰かが理由を説明できますか?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");
        });
}
4

1 に答える 1