我最近用C#开始了一个使用实体核心框架的项目,我的问题是关于实体字段的两个配置方法.您可能已经知道,每个实体都有一个特殊的ConfigurationFile,其中以编程方式指定了字段的属性,以便在数据库中实现它们.我注意到有两个方法:HasColumnType(...)和HasPrecision(...),乍一看似乎非常相似.我的问题是,如果有的话,它们之间有什么不同?如果你还能提供一个例子来说明其中的区别,那就太棒了.

我已经在Microsoft文档中快速浏览了这些页面,但目前我还不能找出任何主要的区别.我把链接放在下面.我还问过著名的ChatGpt,它说在如何计算刻度和精度的位数方面可能会有一些微小的差异,但我想得到一些确认.简而言之,如果在一个属性上同时使用这两种方法(如果可能的话),那么最简单的公式是什么,以确保在数据库和代码中具有相同的比例和精度?

HasPrecision(...)

HasColumnType(...)

希望我已经说清楚了.提前感谢!

推荐答案

像往常一样,"著名的ChatGpt"是错误的.

这两个定义之间存在major的差异,因为HasColumnType是数据库specific,而HasPrecision是数据库agnostic.

换句话说,前者需要为特定数据库指定具有有效数据类型的字符串.相反,后者只指定所需的精度和比例,并让数据库提供程序将其映射到其特定的数据类型.

这同样适用于IsUnicode(指定数据库特定varcharnvarchar的不可知方式)、IsFixedLength(在varcharchar之间进行 Select )和HasMaxLength.所有这些都可以用HasColumnType来代替.

数据库不可知属性/fluent API的主要好处是,您(作为C#/. NET开发人员)不需要知props 体的数据库类型,而且您可以通过单一数据类型配置针对多个数据库类型.

但是,如果你的目标是单个特定的数据库,并且你do知道它的数据类型,你可以使用任何一种方法.但还是比较可取的.

但两者都是不可取的.优先级/优先级规则不明确,并且在EF版本之间可能会发生变化.

Csharp相关问答推荐

获取Windows和Linux上的下载文件夹

在C# 11之前, struct 中的每个字段都必须显式分配?不能繁殖

总是丢弃返回的任务和使方法puc无效之间有区别吗?

有没有一种方法可以防止在编译时在MicrosoftC或非单线程上下文中调用方法?

.NET HttpClient、JsonSerializer或误用的Stream中的内存泄漏?

使用可信第三方的Iext8.Net pdf签名

如何在没有前缀和可选后缀的情况下获取Razor Page Handler方法名称?

如何使用C#获取FireStore中的列表输出文档

每个http请求需要60秒,为什么?

BlockingCollection T引发意外InvalidOperationException

有没有类似于扩展元素的合并元组的语法?

C#动态设置ServerReport报表参数

Azure Functions v4中的Serilog控制台主题

类/值和日期的泛型方法

我想根据姓氏按字母顺序对包含150行徽章编号、姓氏、名字、地址等的文件进行排序.e

使用可空引用类型时C#接口实现错误

Xamarin.Forms中具有类似AspectFill的图像zoom 的水平滚动视图

根据优先级整理合同列表

如何在特定时间间隔运行多个后台任务?

默认架构不存在EF核心迁移