Member 13952856 Ответов: 3

Я получаю ошибку при выполнении программы MVC, исключение типа "system.data.entity.core.entitycommandexecutionexception" произошло в entityframework.sqlserver.dll


Я создал класс сотрудник как:

[Table("tlEmployee")]
    public class Employee
    {
        public int EmployeeId { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public string City { get; set; }

    }

Затем был создан класс contet для сотрудника типа:

public class EmployeeContext :DbContext
    {
        //establish a connection to the DB 
        public DbSet<employee> Employees { get; set; }
    }

Затем создается контроллер для класса employee типа:

public ActionResult Details(int id)
        {
            EmployeeContext employeeContext = new EmployeeContext();
            Employee employee= employeeContext.Employees.Single(emp=>emp.EmployeeId==id);

            return View(employee);
        }


Это моя конфигурация в web.config:
<connectionstrings>
    <add name="EmployeeContext" connectionString="Server=.;database=sample;Initial Catalog=master;Integrated Security=true" providerName="System.Data.SqlClient" />



SQL таблица это:
[sample].[dbo].[tlEmployee]



Получаю ниже ошибки:
Server Error in '/WebApplication2' Application.
Invalid object name 'dbo.tlEmployee'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.SqlClient.SqlException: Invalid object name 'dbo.tlEmployee'.

Source Error: 


Line 15:         {
Line 16:             EmployeeContext employeeContext = new EmployeeContext();
Line 17:             Employee employee= employeeContext.Employees.Single(emp=>emp.EmployeeId==id);
Line 18: 
Line 19:             return View(employee);

Source File: C:\Users\Suni\documents\visual studio 2015\Projects\WebApplication2\WebApplication2\Controllers\EmployeeController.cs    Line: 17 

Stack Trace: 


[SqlException (0x80131904): Invalid object name 'dbo.tlEmployee'.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +3277268
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +791
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4927
   System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +92
   System.Data.SqlClient.SqlDataReader.get_MetaData() +102
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +552
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest) +3114
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +554
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +98
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +307
   System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch(TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) +104
   System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext) +505
   System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +37

[EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.]
   System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +126
   System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context, ObjectParameterCollection parameterValues) +1047
   System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction(Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) +469
   System.Data.Entity.Core.Objects.<>c__DisplayClass7.<getresults>b__5() +205
   System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Func`1 operation) +238
   System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +349
   System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<t>.GetEnumerator>b__0() +30
   System.Data.Entity.Internal.LazyEnumerator`1.MoveNext() +37
   System.Linq.Enumerable.Single(IEnumerable`1 source) +240
   WebApplication2.Controllers.EmployeeController.Details(Int32 id) in C:\Users\Suni\documents\visual studio 2015\Projects\WebApplication2\WebApplication2\Controllers\EmployeeController.cs:17
   lambda_method(Closure , ControllerBase , Object[] ) +141
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +229
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +35
   System.Web.Mvc.Async.AsyncControllerActionInvoker.<begininvokesynchronousactionmethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +39
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +67
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.AsyncInvocationWithFilters.<invokeactionmethodfilterasynchronouslyrecursive>b__3d() +72
   System.Web.Mvc.Async.<>c__DisplayClass46.<invokeactionmethodfilterasynchronouslyrecursive>b__3f() +386
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.<>c__DisplayClass2b.<begininvokeaction>b__1c() +38
   System.Web.Mvc.Async.<>c__DisplayClass21.<begininvokeaction>b__1e(IAsyncResult asyncResult) +186
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38
   System.Web.Mvc.Controller.<beginexecutecore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +65
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38
   System.Web.Mvc.MvcHandler.<beginprocessrequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +44
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +65
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +399
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +137

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.114.0


Что я уже пробовал:

Я попытался снять установку и переустановить EntityFramewor, но безуспешно.
Проверил соглашения об именах, но безрезультатно.

Не могли бы вы, пожалуйста, кто-нибудь помочь мне в решении этого вопроса?

MadMyche

Вы проверили, что таблица существует на сервере БД

Member 13952856

Я проверил, что таблица присутствует в БД

3 Ответов

Рейтинг:
1

Gerry Schmitz

Цитата:
[Таблица("tlEmployee")]


Вы указали, что ваша "таблица базы данных" называется "tlEmployee".

В сообщении говорится, что таблица отсутствует в базе данных.


Member 13952856

но у меня есть таблица в базе данных:
Выберите топ-1000 [EmployeeId]
,[Имя]
,[Пол]
,[Город]
Из [образца].[dbo].[tlEmployee]
возможность извлечения таблицы

MadMyche

Проверьте строку подключения и убедитесь, что вы указываете на правильную базу данных на сервере и что указанный пользователь сопоставлен с правильной схемой.

Member 13952856

Это моя строка подключения
<соединительные нити>
&ЛТ;добавить имя="EmployeeContext" свойства connectionString="сервер=.;базы данных=образец;начальный каталог=мастер;Комплексная безопасность=истина" имя_поставщика="системы.Данных.В sqlclient" /&ГТ;

Vincent Maverick Durano

Попробуйте вместо этого:

&ЛТ;добавить имя="EmployeeContext" свойства connectionString="сервер=.;базы данных=образец;Комплексная безопасность=истина" имя_поставщика="системы.Данных.В sqlclient" /&ГТ;

Рейтинг:
1

Vincent Maverick Durano

Цитата:
<соединительные нити>
&ЛТ;добавить имя="EmployeeContext" свойства connectionString="сервер=.;базы данных=образец;начальный каталог=мастер;Комплексная безопасность=истина" имя_поставщика="системы.Данных.В sqlclient" /&ГТ;


Я предполагаю, что это больше похоже на connectionString тогда вопрос. В вашем connectionString вы устанавливаете значение master как Initial Catalog. Этот master база данных записывает всю информацию системного уровня для системы SQL Server. Это означает, что вы должны избегать создания своей базы данных там. Вы должны проверить, где находится ваша база данных на вашем SQL-сервере, и изменить ее connectionString соответственно.

Кроме того, если вы используете EF Core, то можете взглянуть на эту статью:
https://www.codeproject.com/Articles/1218427/Getting-Started-with-Entity-Framework-Core-Buildin


MadMyche

Если вы посмотрите на его строку подключения ... он заполняет исходный каталог как Мастер (что вы и предложили), а также устанавливает атрибут "база данных" в качестве образца.
Я удивлен, что никто не жаловался на использование как исходного каталога, так и псевдонима базы данных для него

Vincent Maverick Durano

Хороший улов. Ну, он может просто удалить начальный атрибут каталога.

Рейтинг:
0

Axxowiz

Все выглядит хорошо, Проблема заключается в строке вашей базы данных. Я бы предложил переписать базу данных не в мастер, а в обычную папку базы данных, которая должна быть первой в SQL SERVER.

После того, как вы перепишете свою таблицу, которая маленькая, так что ветер. Откройте в visual studio "Обозреватель серверов" и в разделе Data Connections - Add New connection - point to the Employee table add - test connection, затем щелкните правой кнопкой мыши соединение нажмите "Свойства" в visual studio вы увидите строку подключения просто скопируйте и вставьте ее. Остальная часть вашего кода выглядит нормально, и эти типы ошибок почти всегда связаны со строками. Я надеюсь, что это поможет, если вы уже исправили его, возможно, некоторые в будущем столкнутся с той же проблемой (распространенной).