Я следую онлайн-урок по 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 # или объединений и т. Д. Это чисто прямой запрос из одной таблицы.