#c# #sql-server #entity-framework-core
#c# #sql-server #entity-framework-core
Вопрос:
Я использую Microsoft.EntityFrameworkCore.SQLServer (3.1.4) для подключения к моей базе данных SQL Server. Я пытаюсь использовать пользовательский класс модели для «сопоставления» с таблицей State
:
CREATE TABLE [dbo].[State]
(
[StateID] INT IDENTITY(1, 1) NOT NULL,
[Name] VARCHAR(10) NULL,
CONSTRAINT [PK_State] PRIMARY KEY CLUSTERED ([StateID] ASC)
);
Затем, в моем MyDbContext.cs
, я объявил это как:
public DbSet<State> State { get; set; }
Мой пользовательский класс модели State
:
public enum StateID: int
{
Processed = 1,
Intransit = 2,
Delivered = 3,
Lost = 4,
Reordered = 5,
}
public class State
{
private State() { }
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public StateID StateID {get; set; }
[StringLength(10)]
public string Name {get; set;}
}
Когда я пытаюсь получить список состояний с помощью моего пользовательского класса модели через MyDbContext.State.ToList()
, я продолжаю получать исключение:
Microsoft.Data.SqlClient.SQLException: ‘Недопустимое имя объекта ‘Состояние’.’
Частично созданный стек вызовов выглядит следующим образом:
Microsoft.Data.SqlClient.SqlConnection.Ошибка (Microsoft.Data.SqlClient.SQLException, bool, System.Действие<Система.Действие>)
Microsoft.Data.SqlClient.SqlInternalConnection.Ошибка (Microsoft.Data.SqlClient.SQLException, bool, System.Действие<Система.Действие>)
Microsoft.Data.SqlClient.TdsParser.Throw exceptionandwarning (Microsoft.Data.SqlClient.TdsParserStateObject, bool, bool)
Microsoft.Data.SqlClient.TdsParser.Попробуйте выполнить (Microsoft.Data.SqlClient.RunBehavior, Microsoft.Data.SqlClient.SqlCommand, Microsoft.Data.SqlClient.SqlDataReader, Microsoft.Data.SqlClient.BulkCopySimpleResultSet, Microsoft.Data.SqlClient.TdsParserStateObject, out bool)
Microsoft.Data.SqlClient.SqlDataReader.Попробуйте consumemetadata()
Microsoft.Data.SqlClient.SqlDataReader.MetaData.get() Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader (Microsoft.Data.SqlClient.SqlDataReader, Microsoft.Data.SqlClient.RunBehavior, строка, bool, bool, bool) Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds (System.Data.CommandBehavior, Microsoft.Data.SqlClient.RunBehavior, bool, bool, int, out System.Многопоточность.Задачи.Task, bool, bool, Microsoft.Data.SqlClient.SqlDataReader, bool)
Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader (System.Data.CommandBehavior, Microsoft.Data.SqlClient.RunBehavior, bool, System.Многопоточность.Задачи.TaskCompletionSource, int, out System.Многопоточность.Задачи.Задача, вывод bool, bool, bool, string)
Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader (System.Data.CommandBehavior, Microsoft.Data.SqlClient.RunBehavior, bool, строка)
Комментарии:
1. Это исключение обычно просто означает, что таблица не существует в запрашиваемой базе данных. Хорошим первым шагом было бы убедиться, что таблица
State
существует в БД, на которую указывает строка подключения2. @devNull Да, она существует в БД с точно такими же атрибутами / полями
3. Затем проследите соединение и команды в EF ( learn.microsoft.com/en-us/ef/core/miscellaneous/logging?tabs=v3 ) или в SQL Server ( learn.microsoft.com/en-us/sql/tools/sql-server-profiler /… или learn.microsoft.com/en-us/sql/relational-databases / … )