Entity Core Framework - HasColumnType 和 HasPrecision 之间有什么区别?

问题描述 投票:0回答:1

我最近开始使用 C# 中的 Entity Core Framework 开发一个项目,我的问题与实体字段的 2 种配置方法有关。您可能已经知道,每个实体都有一个特殊的配置文件,其中以编程方式指定字段的属性,以便在数据库中实现它们。我注意到有两种方法:HasColumnType(...) 和 HasPrecision(...) 乍一看似乎非常相似。我的问题是,如果有的话,它们之间有什么区别?如果您还可以提供差异的示例,那就太棒了。

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

HasPrecision(...)

HasColumnType(...)

希望我已经说清楚了。预先感谢!

c# .net entity-framework-core orm relational-database
1个回答
0
投票

像往常一样,“众所周知的 ChatGpt”是错误的。

这两个定义之间存在重大差异,

HasColumnType
是数据库特定,而
HasPrecision
是数据库不可知论

换句话说,前者需要为特定数据库指定具有有效数据类型的字符串。相反,后者只是指定所需的精度和小数位数,然后让数据库提供者将其映射到其特定的数据类型。

这同样适用于

IsUnicode
(指定数据库特定的
varchar
nvarchar
的不可知方式)、
IsFixedLength
(在
varchar
char
之间进行选择)和
HasMaxLength
。这些都可以用单个
HasColumnType
代替。

与数据库无关的属性/流畅的 API 的主要好处是,您(作为 C# / .NET 开发人员)不需要了解具体的数据库类型,并且您可以使用单一数据类型配置来定位多种数据库类型。

但是,如果您的目标是单个特定数据库并且您确实知道其数据类型,则可以使用任一方法。还是摘要更好。

但不鼓励在房产上使用(混合)两者。优先级/覆盖规则不清楚,并且可能在 EF 版本之间发生变化。

© www.soinside.com 2019 - 2024. All rights reserved.