【问题标题】:Attaching and Updating with DateTime properties使用 DateTime 属性附加和更新
【发布时间】:2013-05-01 03:33:06
【问题描述】:

我正在使用带有 DbContext 的 Entity Framework 5。

在我的场景中,我正在尝试更新现有实体并将更改保存到数据库中。在其他属性中,实体有一个“LastUpdated”属性,它是一个 DateTime。

我的实体是 POCO 实体,我的上下文继承自 DbContext。

这是我的代码:

public void Update(Location location)
{
    using (var context = new EfContext())
    {
        context.Locations.Attach(location);
        context.Entry(location).State = EntityState.Modified;
        context.SaveChanges();
    }
}

我的应用程序的要求要求我将修改后的实体附加到新的上下文中,而不是先从同一上下文中检索实体。

这实际上适用于实体上的所有字段,除了 LastUpdated 字段。这是一个日期时间,没有保存。

我在这里做错了吗?

【问题讨论】:

    标签: c# .net datetime entity-framework-5 dbcontext


    【解决方案1】:

    尝试在 Update 方法中将位置 LastUpdated 属性值作为参数传递

    public void Update(Location location, DateTime locationLastUpdated)
    {
        using (var context = new EfContext())
        {
            location.LastUpdated = locationLastUpdated;
            context.Locations.Attach(location);
            context.Entry(location).State = EntityState.Modified;
            context.SaveChanges();
        }
    }
    

    【讨论】:

    • 抱歉,我应该提到 LastUpdated 值在将位置传递给方法之前已经设置。还有其他想法吗?
    • @user2019889 在您重新附加实体之后和调用SaveChanged() 之前,它是否保持设置?
    • 我了解在这种特定情况下,最好按照建议使用触发器和 getdate() 更新数据库中的 LastUpdated 字段,但是,此问题可能会发生在其他 DateTime 字段中不代表数据库时间戳。例如,假设我们正在处理 Person 对象并且我们想要编辑出生日期,这将是一个真正的问题。
    • 为了响应millimoose,我已经使用调试器逐步完成了代码,并且该值是调用SaveChanges()之前的正确日期时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多