在对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后数据库中的表:
这是模型的调用:
(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,它解决了这个问题。
答案 0 :(得分:0)
您的代码令人振奋。您确定方法HasDefaultSchema被调用了吗?如果您的上下文是从基本上下文继承的,则需要调用base.OnModelCreating:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
...
}