我有一個使用EF創建的應用程序。問題是我注意到在其中一個表中創建了一些無關的外鍵列。刪除這些列導致[SqlException(0x80131904):無效的列名'Material_Id'錯誤。如何更新Code First應用程序以適應手動模式更改?
下面是類結構的簡化版本...
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和危害之間的關係爲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);
這看起來好像與MVC無關,並且與EntityFramework無關。 – Phill
您可以爲您的DbSet定義添加代碼嗎? –
爲什麼你會說這是多對一的關係?你的班級模型根本不代表多對一。它是一個0..1到0..1,所以兩端必須有一個相互參照。多對一會有一些類型的集合,並且您的模型中沒有集合。 –