Linq запрашивает правильную таблицу в неправильной схеме - PullRequest
1 голос
/ 17 июня 2019

Я установил в своей схеме по умолчанию значение "WHE" в переопределении функции OnModelCreating:

modelBuilder.HasDefaultSchema("WHE");

Я создал таблицу через платформу CodeFirst Entity Framework:

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: 'Anпроизошла ошибка при выполнении определения команды.Смотрите внутреннее исключение для деталей.Внутреннее исключение 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 голосов
/ 18 июня 2019

Ваш код должен работать. Вы уверены, что метод HasDefaultSchema вызывается? Если ваш контекст наследуется от базового контекста, вам нужно вызвать base.OnModelCreating:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...