2

我已经在.NET 1.4标准创建的DbContext类,并有实体配置一些代码,在OnModelCreating方法,但看起来这个方法是没有得到所谓的,我抱怨列名称时出现错误。实体框架的核心1.1 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代码能够处理该映射。

任何想法?

回答

2

你的问题是,你在这里命名的关键,而不是列:

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

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

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