0

楷模:

public class Status
{
    public int Id { get; set; }
}

public class Podcast
{
    public int Id { get; set; }

    public virtual Status Status { get; set; }
}

Podcast 表有 StatusId 列,该列是外键。在这种情况下,我收到以下错误消息:Invalid column name 'Status_Id'.为什么?- 很多次我都用这样的例子来面对那些文章。这是第一个问题。好的,没问题 - 我在这些列中添加了一个下划线字符:Sttaus_Id 等等。现在似乎一切正常,但是当我通过以下方式修改我的模型时:

public class Podcast
{
    public int Id { get; set; }

    public int Status_Id { get; set; }

    public virtual Status Status { get; set; }
}

现在我收到以下错误:Invalid column name 'Status_Id1'. 为什么?如果没有这些 xx_id 属性,我将无法使用 DropDownListFor 助手。

4

2 回答 2

3

我相信这里的问题是您首先创建了数据库并为您的 FK 引用创建了一个名为 StatusId 的列,但您没有告诉 EF 您正在为您的 FK 使用非默认列名。

以下将为您提供您所追求的结构(ps 我同意您的命名约定,我个人不喜欢 fk ids 中的 _)

    public class MyContext : DbContext
    {
        public DbSet<Podcast> Podcasts { get; set; }
        public DbSet<Status> Status { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Podcast>().HasOptional(p => p.Status)
                .WithMany().HasForeignKey(p => p.StatusId);
            base.OnModelCreating(modelBuilder);
        }
    }

    public class Status
    {
        public int Id { get; set; }
    }

    public class Podcast
    {
        public int Id { get; set; }

        public int? StatusId { get; set; }
        public virtual Status Status { get; set; }
    }
于 2012-05-16T08:24:43.630 回答
-1

至少外键字段的约定是表名+字段名,所以在你的情况下 StatusId 没有下划线。但我不确定它为什么这么说invalid column name Status_Id1

删除下划线,然后重试。如果您仍然收到错误消息,请使用结果对您的问题进行编辑。

于 2012-05-16T08:11:26.083 回答