为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8_20241226_x86_win_64
【操作系统】:Windows 11 24H2
【CPU】:i9-12900K
【问题描述】*:
项目目前很多家医院使用,原先使用的是sql server数据库,已使用维护更新好几年了,最近要适配信创,所以准备使用达梦数据库。
主要依赖版本:
.net 8
Microsoft.EntityFrameworkCore 8.0.12
DM.Microsoft.EntityFrameworkCore 8.0.0.28188
数据库是使用以下两行命令使用 ef core 新生成的,所以所有的表都是空白的
dotnet ef migrations add dm_init dotnet ef database update
.net8 使用EntityFrameworkCore访问数据库,在linq查询一个空白表时报“Dm.DmException:“6110,日期字符串长度太短”
软件在启动时会做一些基础数据的初始化,先判断数据库有没有,没有的话插入。
执行到以下语句时报错:
_context.Languages.IgnoreQueryFilters().Any(l => l.TenantId == language.TenantId && l.Name == language.Name)
这里就是简单的查了下Languages表是否已存在对应的数据,却报报“Dm.DmException:"6110,日期字符串长度太短"
从日志里看这里的linq被转换成了
SELECT CASE
WHEN EXISTS (
SELECT 1
FROM "AbpLanguages" AS "a"
WHERE "a"."TenantId" IS NULL AND "a"."Name" = :__language_Name_1) THEN 1
ELSE 0
END
这张表里有三个时间字段,在c#里定义的都是DateTime类型
public virtual DateTime? DeletionTime { get; set; }
ef core 生成的表字段是TIMESTAMP
DM.Microsoft.EntityFrameworkCore
我移除掉了 NuGet在线版本 8.0.0.28188
新安装了数据库安装包文件里的 8.0.0.29681
问题依旧
我手动在之前的表里插入了数据后,之前的错不再报了,出现了其他错

提示语句不兼容
SELECT TOP(1) "a"."Id", "a"."ConcurrencyStamp", "a"."CreationTime", "a"."CreatorUserId", "a"."DeleterUserId", "a"."DeletionTime", "a"."Description", "a"."DisplayName", "a"."IsDefault", "a"."IsDeleted", "a"."IsStatic", "a"."LastModificationTime", "a"."LastModifierUserId", "a"."Name", "a"."NormalizedName", "a"."TenantId" FROM "AbpRoles" AS "a" WHERE "a"."TenantId" IS NULL AND "a"."Name" = 'Admin'
但是我复制这个语句放在DM管理工具中查询是正常的
