如何在实体框架中使用sql用户定义类型
本文关键字:sql 用户 定义 类型 实体 框架 | 更新日期: 2023-09-27 18:04:51
如何在实体框架中使用由SQL CLR编写的用户定义类型?该类型旨在以正确的方式实现波斯语日期数据类型。我尝试使用HasColumnType()来使用这个自定义类型:
modelBuilder.Properties()
.Where(x => x.PropertyType == typeof(DateTime))
.Configure(c => c.HasColumnType("PersianDate"));
但是它没有成功,我得到了这个错误:
系统。InvalidOperationException:序列不包含匹配的元素在System.Linq.Enumerable。单个[TSource](IEnumerable
1 source, Func
2 predicate)在System.Data.Entity.Utilities.DbProviderManifestExtensions。GetStoreTypeFromName(DbProviderManifest, providerManifest,字符串名称)在System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration。配置列(EdmProperty列,EntityType表,DbProviderManifest)在System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration。配置(EdmProperty列,EntityType表,DbProviderManifest, providerManifest, Boolean allowOverride, Boolean fillFromExistingConfiguration)在…
我确信这个错误是使用HasColumnType()的结果。此外,我确信这种类型在我的数据库中正确工作。
在这一点上,我也同意你在HasColumnType("PersianDate")
中声明了错误的值。
基于MSDN, HasColumnType
配置数据库列的数据类型,通常使用原始数据类型(更多信息参见这里)。
可能当前的EF 6实现对于用户定义数据类型有一些限制,因为用户定义类型需要在初始化DB时检查类型是否已经创建。
作为用户定义类型的解决方案,在SQL端使用datetime2
将波斯语日期声明为列(datetime
的最小限制为1753年1月1日,因此不能用于波斯语年),并将其映射为DateTime
:
modelBuilder.Properties()
.Where(x => x.PropertyType == typeof(DateTime))
.Configure(c => c.HasColumnType("datetime2"));
欢迎提出任何建议。
附加参考:https://stackoverflow.com/a/8143626/6378815