我有dotnet ef dbcontext scaffold
生成的实体模型。
它为这个表生成了一个类(等等):
CREATE TABLE MyTable
(
Id INT IDENTITY(1,1) NOT NULL,
ProductId INT NOT NULL,
CountryId NVARCHAR(3) NOT NULL
);
类别:
public class MyTable
{
public int Id { get; set; }
public int ProductId { get; set; }
public string CountryId { get; set; }
}
的DbContext:
// extraction ...
public virtual DbSet<MyTable> MyTables { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyTable>(entity =>
{
entity.ToTable("MyTable");
entity.Property(e => e.CountryId).HasMaxLength(3);
}
}
// ...
过了一段时间后,我对这张桌子做了一些改动:
CREATE TABLE MyTable
(
Id INT IDENTITY(1,1) NOT NULL,
ProductId INT NOT NULL,
TheCountryId INT NOT NULL -- Rename and change the Data type
);
当然还有课堂和DbContext
。
类别:
public class MyTable
{
public int Id { get; set; }
public int ProductId { get; set; }
public int TheCountryId { get; set; } // Rename and change the Data type
}
的DbContext:
// extraction ...
public virtual DbSet<MyTable> MyTables { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyTable>(entity =>
{
entity.ToTable("MyTable");
// Remove restriction
}
}
// ...
当我运行_db.MyTables.ToArray()
或类似代码时,Entity Framework会生成仍然选择CountryId
(而不是TheCountryId
)的查询
SELECT
[m.MyTable].[Id], [m.MyTable].[ProductId], [m.MyTable].[CountryId], [m.MyTable].[TheCountryId]
FROM
[MyTable] AS [m.MyTable]
为什么会这样?我删除了所有表明该类具有属性CountryId
的内容。我还删除了bin一个obj文件夹,以确保程序是一个清晰的编译。什么都行不通。是实体框架核心缓存查询还是SQL Server执行此操作?