实体框架核心:生成的查询选择不再存在的列

时间:2018-02-15 07:51:49

标签: c# .net-core entity-framework-core

我有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执行此操作?

0 个答案:

没有答案