型号:
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助手。
答案 0 :(得分:3)
我认为这里的问题是您首先创建了数据库,并为您的FK引用创建了一个名为StatusId的列,但您没有告诉EF您使用的是FK的非默认列名。
以下内容将为您提供您所遵循的结构(ps我同意您的命名惯例,我个人不喜欢fk ID中的_)
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; }
}
答案 1 :(得分:-1)
至少对于外键字段的约定是表名+字段名,所以在你的情况下StatusId没有下划线。但我不确定为什么会说invalid column name Status_Id1
。
删除下划线,然后重试。如果您仍然收到错误消息,请使用结果修改您的问题。