实体框架Code First - ID列无效

3

我有一个使用数据库优先和Entity Framework的大型ASP.NET MVC应用程序。它在数据库优先模式下可以正常运行。我想将应用程序改为使用Code first模式。但是结果出现了错误:

{"Invalid column name 'ID'"}

我还有一些继承类。

所有外键都映射到 OnModelCreating 方法和类中,作为 [ForeignKey("类名")] 属性。

这是我的代码的一部分:

[Table("Member")]
public partial class Member
{
    public Member() {}

    public int ID { get; set; }

    [ForeignKey("Seed1")]
    public int? SeedID { get; set; }

    public virtual Seed Seed1 { get; set; }

    ...
}

[Table("Seed")]
public partial class Seed : Member
{
    public Seed()
    {
        Members = new HashSet<Member>();
    }

    public int Locale { get; set; }

    public virtual ICollection<Member> Members { get; set; }

    ...
}

你能展示一下你定义模型和表结构的地方吗? - user1666620
你怎么知道无效列错误来自这些类?生成错误的代码是什么? - Gert Arnold
如果我将Member类中的列“ID”重命名为“ID1”,有时会出现“无效列'ID1'”错误。 - A. Gladkiy
1个回答

0

解决方案是:

[Table("Member")]
public partial class Member
{
    public Member() {}

    public virtual int ID { get; set; }

    public int? SeedID { get; set; }

    public virtual Seed Seed1 { get; set; }

    ...
}


[Table("Seed")]
public partial class Seed : Member
{
    public Seed()
    {
        Members = new HashSet<Member>();
    }

    public override int ID
    {
        get { return MemberID; }
        set { MemberID = value; }
    }

    [NotMapped]
    public int MemberID { get; set; }

    public int Locale { get; set; }
}

public class SeedMap : EntityTypeConfiguration<Seed>
{
    public SeedMap()
    {
        HasKey(c => c.ID);
        Property(c => c.ID)
            .HasColumnName("MemberID")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        HasMany(e => e.Members)
            .WithOptional(e => e.Seed1)
            .HasForeignKey(e => e.SeedID);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接