Linq在错误的架构中查询正确的表

时间:2019-06-17 15:09:09

标签: c# asp.net-mvc entity-framework-6

在对OnModelCreating函数的覆盖中,我将默认模式设置为“ WHE”:

modelBuilder.HasDefaultSchema("WHE");

我通过CodeFirst实体框架创建了一个表:

using System.ComponentModel.DataAnnotations;

namespace Exemptions.Models
{
    public class KillYears
    {
        [Key]
        public int Id { get; set; }
        public string Year { get; set; }
    }
}

以下是迁移中的代码:

public override void Up()
    {
        CreateTable(
            "WHE.KillYears",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    Year = c.String(),
                })
            .PrimaryKey(t => t.Id);

    }

这是运行Update-Database后数据库中的表:

Table in the database

这是模型的调用:

(from k in model.KillYears
 orderby k.Year descending
 where k.Year != null
 select k).ToList()

...这是我得到的错误:

  

System.Data.Entity.Core.EntityCommandExecutionException:'执行命令定义时发生错误。有关详细信息,请参见内部异常。   内部异常   SqlException:对象名称'dbo.KillYears'无效。

我搜索了“ dbo”。在我的解决方案中,并得到以下结果:

Find all "dbo.", Find Results 1, Entire Solution, ""
  Matching lines: 0    Matching files: 0    Total files searched: 472

谁能告诉我为什么我的linq查询看错了模式?自从我接管该项目以来,我已经在该项目中创建了8或9个表,但没有一个出现此问题。

有什么建议吗?

编辑:根据@Orwel提出的问题找到了问题。最初构建此应用程序的人有两个模型,[appname] Model和IdentityModels。在一个模型中设置了HasDefaultSchema,但在另一个模型中未设置。我在第二个模型中调用了HasDefaultSchema,它解决了这个问题。

1 个答案:

答案 0 :(得分:0)

您的代码令人振奋。您确定方法HasDefaultSchema被调用了吗?如果您的上下文是从基本上下文继承的,则需要调用base.OnModelCreating:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    ...
}