【问题标题】:LINQ to SQL: Change timestamp forcefully of a tableLINQ to SQL:强制更改表的时间戳
【发布时间】:2011-03-25 16:41:18
【问题描述】:

我正在使用 LINQ to SQL,在更新表中的时间戳列时需要一些帮助。

Car candidate = Context.Cars.Where(c => c.CarID == car.Id).SingleOrDefault();
candidate.CarName = carToUpdate.CarName;
candidate.CarDescription = carToUpdate.CarDescription;
candidate.IsActive = carToUpdate.IsActive;
candidate.IsCab = carToUpdate.IsCab;
candidate.StockTypeId = carToUpdate.StockTypeId;
Context.SubmitChanges();

如果汽车实体的属性没有变化,则时间戳不会改变。 (看起来 LINQ to SQL 足够智能,不会向数据库发送更新)。

有没有办法将时间戳从 LINQ 提前更改为 SQL?

请帮忙。

谢谢。

【问题讨论】:

    标签: c# sql linq linq-to-sql timestamp


    【解决方案1】:

    如何添加一个 LastUpdatedDate 列并将其设置为 DateTime.Now ,这将确保它始终进行更新,然后将更改您的时间戳列。

    【讨论】:

    • 我想过,但这是我最后的选择。 LastUpdatedDate 列将是虚拟的,除此之外没有任何用处。
    • 如果我使用 T-SQL 更新数据库,时间戳一直在变化。
    【解决方案2】:

    SQL 表上的触发器不是一个选项吗?

    编辑:我认为这个帖子回答了你的问题force LinqToSql to submit

    【讨论】:

    • 因为 LINQ to SQL 没有向数据库发送任何更新语句,所以触发器永远不会被调用。应该有某种方法可以强制将该更新语句发送到数据库。
    • 对不起,我误解了你的问题。您想更新时间戳。我认为时间戳列根本没有更新。我会尝试想一个不同的解决方案。
    • 看看我修改后的解决方案。
    【解决方案3】:

    我认为答案是否定的。

    如果修改后实体的属性与将实体从数据库中拉出时的属性相同,则它实际上并没有改变。

    当行实际上没有更新时,强制生成新时间戳的目的是什么?

    【讨论】:

      【解决方案4】:

      我正在阅读Object States and Change-Tracking (LINQ to SQL),它指出:

      您可以通过观察来检测更新 变更通知。 通知是通过 属性中的 PropertyChanging 事件 二传手。通知 LINQ to SQL 时 对对象的第一次更改,它 创建对象的副本并 将对象视为候选对象 生成更新语句。

      对于没有实现的对象 INotifyPropertyChanging,LINQ to SQL 维护一个值的副本 物体在它们最初的时候有 物化了。你打电话时 SubmitChanges,LINQ to SQL 比较 当前值和原始值 判断对象是否已经 改变了。

      您能否创建一个分部类,添加一个调用PropertyChanging 的属性来更新未映射且仅存在于代码中的属性?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多