日期时间字段不会更新实体框架 SQL Server 2012 和 Web API

本文关键字:Server SQL 2012 API Web 框架 实体 字段 时间 更新 日期 | 更新日期: 2023-09-27 18:34:54

好的,我要把头发了。

有实体框架,我正在尝试调用SaveChanges(),但它没有更新日期时间列。

我尝试更改实体状态,删除毫秒,更改精度等。

我运行了SQL Server Profiler来准确查找发送到SQL Server的内容。下面是进行更改的代码和配置文件日志。

PRICE currentPrice = db.PRICES.Find(id);
currentPrice.PRICE_AMOUNT = dec;
currentPrice.PRICE_TS = DateTime.Now;
db.Entry(currentPrice).State = EntityState.Modified;
db.SaveChanges();

SQL Server 配置文件日志

exec sp_executesql N'UPDATE [dbo].[PRICES]
SET [PRICE_AMOUNT] = @0, [PRICE_BIZ_ID] = @1, [PRICE_SOLDOUT] = @2
WHERE ([PRICE_ID] = @3)
SELECT [PRICE_TS]
FROM [dbo].[PRICES]
WHERE @@ROWCOUNT > 0 AND [PRICE_ID] = @3',N'@0 decimal(4,2),@1 int,@2 bit,@3 int',@0=2.48,@1=1,@2=0,@3=1

它完全跳过了价格的变化!我根本不知道它为什么要做选择!

请帮忙!

编辑:这是我的价格等级。我正在使用数据库优先 EDMX

public partial class PRICE
{
    public int PRICE_ID { get; set; }
    public decimal PRICE_AMOUNT { get; set; }
    public int PRICE_BIZ_ID { get; set; }
    public System.DateTime PRICE_TS { get; set; }
    public bool PRICE_SOLDOUT { get; set; }
    public virtual BUSINESS BUSINESS { get; set; }
}

日期时间字段不会更新实体框架 SQL Server 2012 和 Web API

零件

SELECT [PRICE_TS]

显示您已将PRICE_TS映射为计算列,即在 EDMX 设计器中,您已将其 StoreGeneratedPattern 属性设置为 Computed

计算列的值始终在插入和更新语句之后从数据库中提取,因为数据库生成该值,并且 EF 希望实体对象正确表示数据库内容。

通过删除并重新添加实体,属性将恢复为默认值。

不会相信这个...我添加了另一个表来存档此数据,以便稍后在价格中显示图表,并发现该表中的日期时间会更新得很好!这是另一个的精确副本。因此,我从 EDMX 中删除了价格表,将其添加回来并构建了它。现在它起作用了。Microsoft在那里处于最佳状态。如果他们和我有同样的问题,希望这对某人有所帮助。

我一生中有4+个小时。