C# 是否更改代码优先实体框架中的列名?
我有以下数据类:C# 是否更改代码优先实体框架中的列名?,c#,entity-framework,C#,Entity Framework,我有以下数据类: 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
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更改为XID,将Y_ID更改为YID,但这会导致错误:
Invalid column name 'X_ID'.
Invalid column name 'Y_ID'.
如何更改列名而不遇到此问题?您是否正在编写第一代代码?实际上,我会对变量名进行更改,然后实际删除已创建的数据库,而不是更新,如果您正在尝试的话,然后重新创建。我在使用另一种方法时也遇到过类似的问题,即先使用DB。我最近遇到了这个问题,我第一次尝试解决它是编辑迁移并更新那里的列名,但遗憾的是,这导致在
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; }
}
注意:我还尝试了一种不需要将public int YID
属性添加到classx
的替代方法。对于您的示例,它类似于:
modelBuilder.Entity<X>()
.HasRequired(x => x.Y)
.WithMany()
.Map(x => x.MapKey("YID"));
modelBuilder.Entity()
.has必需(x=>x.Y)
.有很多
.Map(x=>x.MapKey(“YID”);
这有效地执行了与我在迁移中手动执行的相同的编辑,但仍然导致在
Seed()
方法中引发异常,抱怨列Y\u ID
不存在。只添加YID
属性更简单。运行updatedatabase
命令或更新edmx,具体取决于生成内容的方式。这可能不是解决此问题的更好方法。您可以简单地重写OnModelCreating方法。
class XConfiguration : EntityTypeConfiguration<X>
{
public XConfiguration()
{
HasRequired(x => x.Ys)
.WithMany(y => y.Xs)
.HasForeignKey(x => x.YID);
}
}
modelBuilder.Entity<X>()
.HasRequired(x => x.Y)
.WithMany()
.Map(x => x.MapKey("YID"));