.NET Core Entity Framework 在作为实体访问时抛出无效的对象名称,但适用于 SQL

Joh*_*n P 3 asp.net-mvc entity-framework entity-framework-core

我正在使用 Entity Framework Core v6.2。我收到一个错误

SqlException: 无效的对象名称“Cdef.CellDefinition”

当我尝试DbSet直接访问,但使用相同的DbContext对象时,我可以使用FromSql命令直接查询对象。

我见过其他的答案说,修改公约来去除PluralizingTableNameConvention,但是因为我在做EntityFrameworkCore.DbContext的是ModelBuilder没有这样的选择,我没有看到任何证据表明它是试图访问一个多元化的名字。

我的实体设置如下:

[Table("Cdef.CellDefinition")]
public partial class CellDefinition
{
    [Key]
    public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

而我DbContext的就像:

public class CDefContext : Microsoft.EntityFrameworkCore.DbContext
{
    public virtual Microsoft.EntityFrameworkCore.DbSet<CellDefinition> CellDefinition { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试直接将对象作为实体访问时,出现错误:

无效的对象名称

但是如果我使用相同的对象名称发出 SQL,它就可以正常工作。

// This fails with Invalid Object Name
return cDefContext.CellDefinition.ToList();

// This succeeds
return cDefContext.CellDefinition.FromSql("select * from CDef.CellDefinition").ToList()
Run Code Online (Sandbox Code Playgroud)

Joh*_*n P 7

我找到了解决方案。您不能将架构放在表名中。

//This Does NOT work
[Table("Cdef.CellDefinition")]
public partial class CellDefinition{}


//But this DOES work
[Table("CellDefinition",Schema = "Cdef")]
public partial class CellDefinition{}
Run Code Online (Sandbox Code Playgroud)