微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围

如何解决将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围

问题是您使用ApplyPropertyChanges的模型对象仅填充了表单中的数据(标题、故事和图像)。ApplyPropertyChanges将更改应用于对象的所有属性包括DateTime设置为 0001-01-01 的 uninitialized ,这超出了 sql Server 的DATETIME.

我建议不要使用ApplyPropertyChanges,而是检索正在修改的对象,更改表单编辑的特定字段,然后使用这些修改保存对象;这样,只修改更改的字段。或者,您可以在页面中放置隐藏的输入并填充其他字段,但这对并发编辑不是很友好。

这是一个未经测试的示例,仅更新对象的某些字段(假设您使用的是 LINQ to sql):

var story = _db.ArticleSet.First(a => a.storyId == ArticletoEdit.storyId);
story.headline = ArticletoEdit.headline;
story.story = ArticletoEdit.story;
story.image = ArticletoEdit.image;
story.modifiedDate = DateTime.Now;
_db.SubmitChanges();

解决方法

我的 HomeController 中有以下代码:

public ActionResult Edit(int id)
{
    var ArticleToEdit = (from m in _db.ArticleSet where m.storyId == id select m).First();
    return View(ArticleToEdit);
}

[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Article ArticleToEdit)
{
    var originalArticle = (from m in _db.ArticleSet where m.storyId == ArticleToEdit.storyId select m).First();
    if (!ModelState.IsValid)
        return View(originalArticle);

    _db.ApplyPropertyChanges(originalArticle.EntityKey.EntitySetName,ArticleToEdit);
    _db.SaveChanges();
    return RedirectToAction("Index");
}

这是 Edit 方法的视图:

<% using (Html.BeginForm()) {%>

    <fieldset>
        <legend>Fields</legend>
        <p>
            <label for="headline">Headline</label>
            <%= Html.TextBox("headline") %>
        </p>
        <p>
            <label for="story">Story <span>( HTML Allowed )</span></label>
            <%= Html.TextArea("story") %>
        </p>
        <p>
            <label for="image">Image URL</label>
            <%= Html.TextBox("image") %>
        </p>
        <p>
            <input type="submit" value="Post" />
        </p>
    </fieldset>

<% } %>

当我点击提交按钮时,我收到错误:{"The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.\r\nThe statement has been terminated."}任何想法是什么问题?我假设编辑方法正在尝试将数据库中的发布值更新为已编辑的值,但由于某种原因它不喜欢它......虽然我不明白为什么涉及日期,因为它没有在控制器编辑方法?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。