4

我有一个使用 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);
4

1 回答 1

0

您需要定义关系的许多部分。在这种情况下,您需要向 Hazard 对象添加一个集合属性,如下所示:

public class Hazard
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<HazardAnalysis> HazardAnalyses { get; set; }
}
于 2013-07-19T03:37:12.870 回答