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);