Как преодолеть «Ошибка приведения к значению типа« System.DateTime », поскольку материализованное значение равно нулю» при перечислении модели в представлении в MVC - PullRequest
0 голосов
/ 08 мая 2019

Я следую онлайн-урок по MS, как сначала использовать код MVC в существующей БД. Я пытаюсь отобразить содержимое модели MVC в виде и бомбардировки здесь:

Сведения об исключении

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

Ошибка источника

Строка 27:


Строка 28:
Строка 29: @foreach (var customer in Model)
Строка 30: {
Строка 31:

Трассировка стека:

[InvalidOperationException: приведение к типу значения 'System.DateTime' не удалось, потому что материализованное значение равно нулю. Либо результат универсальный параметр типа или запрос должен использовать тип, допускающий значение NULL.]
System.Data.Entity.Core.Common.Internal.Materialization.ErrorHandlingValueReader 1.GetValue(DbDataReader reader, Int32 ordinal) +107<br> System.Data.Entity.Core.Common.Internal.Materialization.Shaper.GetColumnValueWithErrorHandling(Int32 ordinal) +57 lambda_method(Closure , Shaper ) +2588<br> System.Data.Entity.Core.Common.Internal.Materialization.Coordinator 1.ReadNextElement (Shaper формирователь) + 181
System.Data.Entity.Core.Common.Internal.Materialization.SimpleEnumerator.MoveNext () +76 System.Data.Entity.Internal.LazyEnumerator 1.MoveNext() +112 ASP._Page_Views_Customers_Index_cshtml.Execute() in C:\OneDrive\FakeFolderName\Development\MasterDataWebApp\MDMWebApp\Views\Customers\Index.cshtml:29 System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +197<br> System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +105<br> System.Web.WebPages.StartPage.RunPage() +17<br> System.Web.WebPages.StartPage.ExecutePageHierarchy() +73<br> System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +78<br> System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +235<br> System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +107<br> System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +291 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13<br> System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList 1 фильтры, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) + 56
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive (фильтры IList 1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +420<br> System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1, actionResult actionResult) + 52
System.Web.Mvc.Async. <> C__DisplayClass3_6.b__3 () +198 System.Web.Mvc.Async. <> C__DisplayClass3_1.b__5 (IAsyncResult asyncResult) + 100
System.Web.Mvc.Async.WrappedAsyncResult 1.CallEndDelegate(IAsyncResult asyncResult) +10<br> System.Web.Mvc.Async.WrappedAsyncResultBase 1.End () + 49
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction (IAsyncResult asyncResult) + 27
System.Web.Mvc. <> C.b__152_1 (IAsyncResult asyncResult, ExecuteCoreState innerState) + 11
System.Web.Mvc.Async.WrappedAsyncVoid 1.CallEndDelegate(IAsyncResult asyncResult) +29<br> System.Web.Mvc.Async.WrappedAsyncResultBase 1.End () + 49
System.Web.Mvc.Controller.EndExecuteCore (IAsyncResult asyncResult) +45 System.Web.Mvc. <> C.b__151_2 (IAsyncResult asyncResult, Контроллер контроллера) + 13
System.Web.Mvc.Async.WrappedAsyncVoid 1.CallEndDelegate(IAsyncResult asyncResult) +22<br> System.Web.Mvc.Async.WrappedAsyncResultBase 1.End () + 49
System.Web.Mvc.Controller.EndExecute (IAsyncResult asyncResult) + 26
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute (IAsyncResult asyncResult) + 10
System.Web.Mvc. <> C.b__20_1 (IAsyncResult asyncResult, ProcessRequestState innerState) + 28
System.Web.Mvc.Async.WrappedAsyncVoid 1.CallEndDelegate(IAsyncResult asyncResult) +29<br> System.Web.Mvc.Async.WrappedAsyncResultBase 1.End () + 49
System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) +28 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest (IAsyncResult результат) + 9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +9874041 System.Web.HttpApplication.ExecuteStepImpl (шаг IExecutionStep) +48 System.Web.HttpApplication.ExecuteStep (IExecutionStep шаг, логическое и завершено синхронно) + 159

  • MVC Версия: 5
  • Аутентификация: индивидуальные учетные записи пользователей
  • EF Mode: сначала код с существующей базой данных

Существует CustomersController , который имеет действие с именем Index . Вот код контроллера:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MDMWebApp.Models;

namespace MDMWebApp.Controllers
{
    public class CustomersController : Controller
    {
        private ApplicationDbContext _context;

        public CustomersController()
        {
            _context = new ApplicationDbContext();
        }

        protected override void Dispose(bool disposing)
        {
            _context.Dispose();
        }

        // GET: Customers
        [Route("payroll/customers")] 
        public ActionResult Index()
        {
            var customer = _context.Customers;

            return View(customer);
        }
    }
}

Критически, в модели Customer есть только два столбца даты и времени. И оба они могут иметь значение NULL в таблице SQL Server.

Что я пробовал Я пытался добавить '?' после типа данных в модели, т.е.

[Key]
[Column(Order = 31)]
public DateTime? FirstBuy { get; set; }

[Key]
[Column(Order = 32)]
public DateTime? LastSale { get; set; }

Но это не работает.

Я также исследовал опцию DefaultIfNull, но, похоже, это больше подходит для случаев, когда в модели вообще нет записей. Существует множество вопросов StackOverflow по этой теме, но все они, похоже, связаны с объединением сущностей в c # или объединений и т. Д. Это чисто прямой запрос из одной таблицы.

1 Ответ

0 голосов
/ 08 мая 2019

Причиной возникновения ошибки было то, что я забыл создать первичный ключ в таблице базы данных.В результате MVC предположил, что каждый столбец является ключом, т. Е. Он добавил [Ключ] в начало каждого столбца в модели.

Как только я добавил первичный ключ в таблицу и обновил модельошибка ушла.

...