gpt4 book ai didi

c# - [DataType(DataType.EmailAddress)] 在流利的 api 中有对应部分吗?

转载 作者:行者123 更新时间:2023-11-30 16:59:04 28 4
gpt4 key购买 nike

如果没记错的话,是[DataType(DataType.Currency)]的DataAnnotation的对应部分在 Fluent api 中是 modelBuilder.Entity<T>.Property(i => i.Price).HasColumnType("Currency") .

那么[DataType(DataType.EmaillAddress)]的对应部分是什么? ?

或者是否有一个网站有一个列表,如果你可以在数据注释中做,你可以在流利的 api 中做。因为我想使用 Fluent Api 进行验证和映射。谢谢

最佳答案

这是一个众所周知的令人困惑的领域。

关于你的例子:

  • [DataType(DataType.Currency)] 注释的属性实现为 decimal(18,2)(在 Sql Server 中)。 关闭
  • 流畅的映射 HasColumnType("Money")(不是“Currency”)将列创建为 Money 数据类型。 完美匹配。
  • [DataType(DataType.EmailAddress)] 注释的字符串属性将被创建为 nvarchar(max)。当然,这对于电子邮件地址来说已经足够了。但它远不及强制执行特定格式的数据类型。

当然 EF 可以做得更好,不是吗?那么,在后一种情况下,它应该做什么呢?没有内置的电子邮件数据类型,我认为我们不能期望 EF 使用规则和所有内容动态创建用户定义的类型(更不用说 Sql Server 中的规则已被弃用)。

令人困惑的部分是,不同的框架使用不同的数据注释,如解释的那样here .

我不确定 EF 团队通过代码优先实现注解的子集 是否做出了正确的决定。当然,它们不能在广泛的 System.ComponentModel.DataAnnotations 命名空间中实现所有 属性。但目前的实现充其量是半心半意的。上面的例子只是一个小的演示——一个注解被实现了,另一个没有。而且,就此而言,EF 很高兴允许您将 int 属性注释为 EmailAddress

因此,要回答您的问题,DataType.EmailAddress 没有流畅的对应项。没有什么可以对应的。

另一方面,为 EF 说话,根本不实现注释会迫使我们做很多多余的事情。如果我们将 MVC 和 EF 一起使用,注解可以应用一次,并且两个系统都非常一致。使注释和流畅的配置匹配将是一项乏味的工作。

不幸的是,我找不到任何资源来公开注释和流畅的 API 之间的完整映射。也许这是最糟糕的部分:我们必须通过反复试验来找出答案。有人在那里启发我们吗?

关于c# - [DataType(DataType.EmailAddress)] 在流利的 api 中有对应部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24332925/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com