我有一个使用EF创建的应用。问题是我注意到在其中一个表中创建了一些无关的外键列。删除这些列会导致[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:很多,因此Product_Id字段不应该存在。删除此列会生成无效列名称“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);
答案 0 :(得分:0)
您需要定义关系的很多部分。在这种情况下,您需要向Hazard对象添加集合属性,如下所示:
public class Hazard
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<HazardAnalysis> HazardAnalyses { get; set; }
}