我有这些数据类:
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更改为YID,但它会给我错误:
Invalid column name 'X_ID'.
Invalid column name 'Y_ID'.
如何在不遇到此问题的情况下更改列名?
答案 0 :(得分:1)
你在做Code First吗?我实际上会对变量名进行更改 - 然后去物理删除已创建的数据库而不是更新,如果这是您正在尝试然后重新创建的。当我走另一条路时,我遇到了类似的问题 - 即DB先。
答案 1 :(得分: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
属性更简单。