2013-08-01 85 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属性更简单。