实体框架格式化 DateTime SQL 参数,不带毫秒以实现乐观并发

2023-12-07

我正在尝试在实体框架中使用具有乐观并发性的 DateTime LastModifiedDate 列(可能会将其升级到 DateTime2。)我已将并发模式设置为固定。但是,当我检索实体、更改列并尝试保存时,出现并发异常。

存储的LastModifiedDate是2017-01-04 21:16:55.283但看看为更新生成的 SQL 实体框架:

UPDATE [dbo].[Facilities] 
SET [Password] = @0 
WHERE (([pk_FacilityID] = @1) AND ([LastModifiedDate] = @2)) 

-- @0: 'bz0dkK+smlat9psrIrbyXkxjpcXcDK1DeUiha7jCRkU=' (Type = String, Size = 255) 

-- @1: '6801bdcf-266d-46bd-b15e-dac21116208d' (Type = Guid) 

-- @2: '1/4/2017 9:16:55 PM' (Type = DateTime2)

请注意,它传递了一个格式化的日期时间字符串@2其中不包括毫秒。当然,如果它没有传递与检索到的值相同的值,那么它就不匹配!我已经验证在运行时,.NET DateTime 确实包含 0.283 秒。请告诉我有一种方法可以传递完整的值。为什么它会这样,我怎样才能改变它以包括毫秒?


-- @2: '1/4/2017 9:16:55 PM' (Type = DateTime2)

这不是发送的实际参数值。这只是日志记录,并且省略了小数秒。有一个问题,但不是这个。

如果您进行分析,您应该会看到类似这样的内容,其中显示了参数类型和值的详细信息。

exec sp_executesql N'UPDATE [dbo].[Facilities]
SET [Name] = @0
WHERE (([FacilityId] = @1) AND ([LastModified] = @2))
',N'@0 nvarchar(max) ,@1 int,@2 datetime2(7)',@0=N'newName',@1=1,@2='2017-08-31 15:45:55.3030000'

发生的情况是 datetime2(7) 值不是往返于日期时间之间转换的。最简单的解决方法就是对表列使用 datetime2(7) 。如果您想使用该列进行乐观并发控制,则无论如何都需要额外的精度。

所以像这样:

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;

namespace Ef6Test
{
    public class Facility
    {
        public int FacilityId { get; set; }

        public string Name { get; set; }

        [ConcurrencyCheck(),Column(TypeName ="datetime2")]
        public DateTime LastModified { get; set; }
    }

    class Db : DbContext
    {
        public DbSet<Facility> Facilities { get; set; }


        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }

    }
    class Program
    {
        static void Main(string[] args)
        {
            Database.SetInitializer(new DropCreateDatabaseAlways<Db>());


            using (var db = new Db())
            {
                var f = db.Facilities.Add(new Facility() { LastModified = DateTime.Now, Name = "Faclity1" });
                db.SaveChanges();
            }
            using (var db = new Db())
            {
                var f = db.Facilities.First();
                f.Name = "newName";
                db.SaveChanges();
            }


            Console.ReadKey();
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架格式化 DateTime SQL 参数,不带毫秒以实现乐观并发 的相关文章

  • 如何计算关联实体而不在实体框架中获取它们

    我想知道这个问题已经有一段时间了 所以我认为值得使用我的第一篇 Stack Overflow 帖子来询问它 想象一下我正在与关联的消息列表进行讨论 DiscussionCategory discussionCategory reposito
  • 从 SQL Server 2012 查询结果中减去小时数

    我正在 SQL Server 2012 Management Studio 中的警报系统信号自动化平台数据库上运行查询 但遇到了一些问题 我的查询运行得很好 但我无法将结果细化到我想要的水平 我正在选择一些格式为的列DATETIME 我只想
  • 合并两个 linq 表达式

    我有两个在不同时间构建的表达式 但需要合并才能获得 where 子句的准确 分组 我确实尝试过this https stackoverflow com questions 10390784 how do i combine expressi
  • 如何在使用 LINQ to Entities 和辅助方法时保持 DRY?

    假设我有一种特殊的方法来确定某些字符串是否 匹配 如下所示 public bool stringsMatch string searchFor string searchIn if string IsNullOrEmpty searchFo
  • 找出该月第一个星期日/星期一等的日期

    我想在java中检测每个月第一周 第二周的第一个星期日 星期一的日期 我怎样才能实现它 我已经检查了 java 中的 Calendar 类和 Date 类 但无法找到解决方案 所以请帮助我解决这个问题 Calendar calendar C
  • 我如何获取当前时间?

    我如何获取当前时间 Use datetime https docs python org 3 library datetime html gt gt gt import datetime gt gt gt now datetime date
  • 如何根据表名在 DbContext 中选择正确的 DbSet

    假设我有一个包含以下 DbSet 的 DbContext class Amimals DbContext public DbSet
  • 同一数据库的多个实体框架

    我们可以在项目中为同一个数据库创建多个实体框架吗 我想为每个子系统创建实体框架 一些子系统具有共享表 这是可能的 您可以根据需要创建多个 EDMX 文件 但不建议这样做 因为 您不能查询不同模型中的多个表 定义边界将非常困难 因为大多数表都
  • 更改 pandas 中多个日期时间列的时区信息

    有没有一种简单的方法可以将数据帧中的所有时间戳列转换为本地 任何时区 不是逐列进行吗 您可以有选择地将转换应用于所有日期时间列 首先 选择它们select dtypes https pandas pydata org pandas docs
  • MVC 3 EF 4.1 dbContext - 删除具有不可空外键关系的一对多数据对象

    我正在使用 MVC 3 EF 4 1 和 dbContext 我需要知道如何删除具有不可空外键的一对多关系的实体 当我删除子实体并执行 SaveChanges 时 出现错误 操作失败 无法更改关系 因为一个或多个外键属性不可为空 当关系发生
  • 如何向javascript的日期时间对象添加24小时[重复]

    这个问题在这里已经有答案了 可能的重复 向 Javascript Date 对象添加小时 https stackoverflow com questions 1050720 adding hours to javascript date o
  • LINQ to Entities - 无法将“System.DateTime”强制转换为 orderBy 中的“System.Object”类型

    我试图从传入的 Expression gt 中按日期订购实体的 IQueryable 并收到错误 无法将类型 System Nullable 1 转换为类型 System Object LINQ to Entities 仅支持转换实体数据模
  • 优化 LINQ 查询 - 如何缩短执行时间?

    我想知道是否有一个好的方法来优化我的 LINQ 查询 我正在使用类似于以下内容的 LINQ 查询从数据库检索数据 PKs is a list of integers var import context table Where x gt P
  • 从字符串到日期的日期格式

    我正在使用上传的 csv 进行日期格式化 其中日期是具有以下格式的字符串 10 30 2021 8 41 PM 我试图在谷歌大查询中将其更改为 mm dd yyyy 但不断收到错误消息 提示 无效日期 或 无效日期时间 我尝试过使用子字符串
  • 好的实体框架示例应用程序? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一些使用实体框架的优秀 asp net 示例应用程序 我看到了几个 NorthWind 应用
  • 如何删除实体框架6中的多对多关系

    如果将项目连接为多对多关系 则从数据库中删除项目时会出现问题 我的数据库看起来像 Project lt JobInProject gt Job ProjectID JobInProjectID JobID ProjectID JobID 主
  • 使用实体框架创建临时表

    我想使用实体框架在 SQL Server 中创建临时表 我有什么办法可以做到这一点吗 如果我可以创建临时表 我的下一个问题是 如何读取它 提前致谢 Andr 好吧 所以你不喜欢存储过程路线 说实话我也不喜欢 但这是我能想到的最快的方法 基于
  • 实体框架中的多态性

    具体类 BankAccount and CreditCard 在控制器上不可见 我被这个问题困扰了 我正在使用该网站的示例 http weblogs asp net manavi archive 2010 12 28 inheritance
  • 如何从java中的字符串时间戳中提取日期和时间

    我正在获取日期和时间String TIMESTAMP来自服务器的 MySQL 格式如下 2014 02 15 05 18 08 我想要的是提取日期DD MM YYYY格式和时间HH MM SS AM PM格式 而且这个时间戳的时区是不同的
  • Ruby Time.parse 给我超出范围的错误

    我正在使用 Time parse 从字符串创建 Time 对象 因为某些原因 Time parse 05 14 2009 19 00 导致参数超出范围错误 而 Time parse 05 07 2009 19 00 does not 有任何

随机推荐