2013-08-01 156 views
2

我有這些數據類:更改Code-first實體框架中的列名稱?

public class X 
{ 
    public int ID{ get; set; } 
    public string Value{ get; set; } 
    public virtual ICollection<Y> Ys{ get; set; } 
} 

public class Y 
{ 
    public int ID{ get; set; } 
    public string Value{ get; set; } 
    public virtual ICollection<X> Xs{ get; set; } 
} 

假設生成的表是:

X [ ID, Value ] 

Y [ ID, Value ] 

XYs [ X_ID, Y_ID ] 

我想X_ID更改爲XID和Y_ID到雲南發展培訓學院,但它給了我錯誤:

Invalid column name 'X_ID'. 
Invalid column name 'Y_ID'. 

如何更改列名而不會遇到此問題?

+0

根據您生成的東西,運行'Update-Database'命令或更新您的edmx。 – CodeCaster

回答

1

你在做第一代代碼嗎?我實際上會對變量名進行更改 - 然後刪除創建的數據庫,而不是更新,如果這是您正在嘗試的,然後重新創建的。走向另一條路時,我遇到了類似的問題 - 即數據庫第一。

+1

這可能不是這個問題的更好解決方案。您可以簡單地重寫OnModelCreating方法。 –

1

我最近遇到了這個問題,我第一次嘗試解決這個問題,就是編輯遷移並更新列名,但遺憾的是導致在Seed()方法中拋出異常。爲了解決這個問題,我需要修改使用,你的例子可能看起來像我的課:

public class X 
{ 
    public int ID { get; set; } 
    public string Value { get; set; } 

    public int YID { get; set; } 
    public virtual ICollection<Y> Ys { get; set; } 
} 

public class Y 
{ 
    public int ID { get; set; } 
    public string Value { get; set; } 

    public virtual ICollection<X> Xs{ get; set; } 
} 

然後在class X配置類,像這樣:

class XConfiguration : EntityTypeConfiguration<X> 
{ 
    public XConfiguration() 
    { 
     HasRequired(x => x.Ys) 
      .WithMany(y => y.Xs) 
      .HasForeignKey(x => x.YID); 
    } 
} 

注意我也試過,沒有按另一種方法不需要將public int YID財產添加到class X。對於示例這將是類似於:

modelBuilder.Entity<X>() 
    .HasRequired(x => x.Y) 
    .WithMany() 
    .Map(x => x.MapKey("YID")); 

這是有效地執行相同的編輯,我做手工的遷移,仍然導致了Seed()方法拋出一個異常,抱怨如列Y_ID不存在。只需添加YID屬性更簡單。