Entity Framework Core 1.1 OnModelCreating方法未被调用

时间:2017-06-15 23:46:44

标签: asp.net-core .net-core entity-framework-core asp.net-core-webapi .net-standard

我在.Net Standard 1.4中创建了一个DBContext类,并在OnModelCreating方法中有一些实体配置代码,但看起来这个方法没有被调用,我收到一个抱怨列名的错误。

这是我的班级:

public partial class TestContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Data Source=blah");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<TestTable>().HasKey(t => t.Id).HasName("TestTableId");
        modelBuilder.Entity<TestTable>().ToTable("TestTable");
    }

    public virtual DbSet<TestTable> TestTable { get; set; }
}

public class TestTable
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

当我尝试查询此TestTable时,收到错误消息invalid column name "Id"

我在表格中没有Id,我有TestTableId,我希望我得到的OnModelCreating代码会处理该映射。

任何想法?

1 个答案:

答案 0 :(得分:2)

您遇到的问题是您在命名密钥而不是列:

modelBuilder.Entity<TestTable>()
    .HasKey(t => t.Id)
        .HasName("TestTableId");

这将创建一个主键,然后为该键TestTableId命名。你应该做的是:

modelBuilder.Entity<TestTable>()
    .Property(t => t.Id)
        .HasColumnName("TestTableId");