4

EFを使用して作成されたアプリがあります。問題は、テーブルの1つにいくつかの無関係な外部キー列が作成されていることに気づいたことです。これらの列を削除すると、[SqlException(0x80131904):無効な列名'Material_Id'エラーが発生します。

これがクラス構造の簡略化されたバージョンです...

public class Hazard
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public abstract class HazardAnalysis
{
    public int Id { get; set; }
    public int HazardId { get; set; }
    public virtual Hazard Hazard { get; set; }
}

public class ProductHazard : HazardAnalysis
{

    public int ProductId { get; set; }
    public virtual Product Product { get; set; }
}

生成されたテーブルは次のようになりました...

dbo.Hazards
  Id int 
  Name string 
  Product_Id int 

ProductHazardsとHazardsの関係は1:manyであるため、Product_Idフィールドは存在しないはずです。この列を削除すると、無効な列名'Product_Id'エラーが生成されます。

モデルを何時間も精査しましたが、この列が存在する正当な理由を見つけることができません。

列を手動で削除した後にモデルを更新する方法はありますか?私は明らかにデータベースを削除して再作成したくありません。

また、新しいProductHazardが作成されるたびに、現在の製品のproductIdがdbo.HazardsProduct_Idテーブルに挿入されることに気付きました。ProductHazardsとHazardsの間には多対1の関係があるため、新しいProductHazardが作成されると、Product_Idフィールドが新しいProductHazardのProductIdで更新されます。これは奇妙に思えます。

アドバイスをいただければ幸いです。

DbSetコードは次のとおりです。

public DbSet<Hazard> Hazards { get; set; }
public DbSet<HazardAnalysis> HazardAnalyses { get; set; }

そしてまた...

modelBuilder.Entity<HazardAnalysis>()
                        .HasRequired(e => e.Hazard)
                        .WithMany()
                        .HasForeignKey(e => e.HazardId)
                        .WillCascadeOnDelete(false);
4

1 に答える 1