2

我有这些数据类:

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'.

如何在不遇到此问题的情况下更改列名?

4

2 回答 2

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属性更简单。

于 2013-10-30T21:55:47.017 回答
1

你在做第一代代码吗?我实际上会更改变量名称 - 如果您正在尝试然后重新创建,则去物理删除创建的数据库而不是更新。当我走另一条路时,我也遇到了类似的问题——即首先使用数据库。

于 2013-08-01T07:58:56.417 回答