Entity Framework Core 1.1 OnModelCreating 方法未被调用
Entity Framework Core 1.1 OnModelCreating method not getting called
我已经在 .Net Standard 1.4 中创建了一个 DBContext class 并且在 OnModelCreating 方法中有一些用于实体配置的代码,但是看起来这个方法没有被调用并且我收到了一个错误抱怨列名。
这是我的 class:
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"
而且我在 table 中没有 Id
,我有 TestTableId
,我希望我得到的 OnModelCreating
代码会处理该映射。
有什么想法吗?
您遇到的问题是您在这里命名键而不是列:
modelBuilder.Entity<TestTable>()
.HasKey(t => t.Id)
.HasName("TestTableId");
这将创建一个主键,然后将该键命名为 TestTableId
。你应该做的是:
modelBuilder.Entity<TestTable>()
.Property(t => t.Id)
.HasColumnName("TestTableId");
我已经在 .Net Standard 1.4 中创建了一个 DBContext class 并且在 OnModelCreating 方法中有一些用于实体配置的代码,但是看起来这个方法没有被调用并且我收到了一个错误抱怨列名。
这是我的 class:
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"
而且我在 table 中没有 Id
,我有 TestTableId
,我希望我得到的 OnModelCreating
代码会处理该映射。
有什么想法吗?
您遇到的问题是您在这里命名键而不是列:
modelBuilder.Entity<TestTable>()
.HasKey(t => t.Id)
.HasName("TestTableId");
这将创建一个主键,然后将该键命名为 TestTableId
。你应该做的是:
modelBuilder.Entity<TestTable>()
.Property(t => t.Id)
.HasColumnName("TestTableId");