datetime2数据类型转换为datetime数据类型Error

Ale*_*lov 11 c# asp.net-mvc datetime entity-framework

我有一个控制器:

[HttpPost]
public ActionResult Create(Auction auction)
{
    var db = new EbuyDataContext();
    db.Auctions.Add(auction);
    db.SaveChanges();
    return View(auction);
}
Run Code Online (Sandbox Code Playgroud)

一个模型:

public class Auction
{
        public long Id { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public decimal StartPrice { get; set; }
        public decimal CurrentPrice { get; set; }
        public DateTime StartTime { get; set; }
        public DateTime EndTime { get; set; }}
}
Run Code Online (Sandbox Code Playgroud)

并且观点:

@model Ebuy.Website.Models.Auction
@using (Html.BeginForm())
{
    <p>
        //All the information fields...
        @Html.LabelFor(model => model.EndTime)
        @Html.EditorFor(model => model.EndTime)
    </p>
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我收到错误:

将datetime2数据类型转换为日期时间数据类型会导致超出范围的值.

模型 - 控制器 - 视图来自一对一复制的书.

我需要输入到该EndTime字段的格式是什么,所以我不会有这个错误?

mat*_*mmo 22

该错误是因为您实际上没有正确设置这些值,请确保根据应用程序区域设置它们.(例如,dd/mm/yyyy en-GB,mm/dd/yyyy en-US).

它也像你的数据库已设置为使用一datetime2列,并没有datetime列.

你可以:

A)修改数据库以将类型更改datetime2datetime

B)通过以下方式更改模型中的类型datetime2:

[Column(TypeName = "DateTime2")]
public DateTime StartTime { get; set; }

[Column(TypeName = "DateTime2")]
public DateTime EndTime { get; set; }
Run Code Online (Sandbox Code Playgroud)


Asa*_*saf 13

当我尝试将未分配的DateTime成员保存到数据库时,我遇到了同样的问题,同时使用了EntityFramework.我在这里阅读了答案,并且我了解到它可以通过将成员声明为可空来解决.我试过了,它奏效了!所以这里有一个代码快照,对于那些需要它的人:

public Nullable<DateTime> MyDateTime { get; set; }
Run Code Online (Sandbox Code Playgroud)

要么

public DateTime? MyDateTime { get; set; }
Run Code Online (Sandbox Code Playgroud)

后来我可以像下面一样使用它:

if(MyDateTime.HasValue)
{
    DoBlaBla(MyDateTime.Value);
}
Run Code Online (Sandbox Code Playgroud)

或者只是为它分配一个值,就像什么都没发生一样......

MyDateTime = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)