我有一个使用 EF 创建的应用程序。问题是我注意到在其中一个表中创建了一些无关的外键列。删除这些列会导致 [SqlException (0x80131904): Invalid column name '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 字段不应存在。删除此列会生成 Invalid column name 'Product_Id' 错误。
我已经对模型进行了数小时的搜索,但找不到该专栏存在的任何正当理由。
手动删除列后有什么方法可以更新模型?我显然不想删除并重新创建数据库。
我还注意到,每当创建新的 ProductHazard 时,当前产品的 productId 就会插入到 dbo.Hazards Product_Id 表中。由于 ProductHazards 和 Hazards 之间存在多对一的关系,因此在创建新的 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);