在使用“代码优先”的情况下,使用MetadataType强制进行验证是否有意义?

萨钦

我似乎理解在“数据库优先”的情况下帮助MetadataTypeAttribute模型添加验证的背后原因,因为我们希望避免下次从数据库生成模型时所做的更改被覆盖。

我注意到,MetadataType即使使用代码优先方法,也很少有人定义使用验证,并且他们的实体类不会被某种自动生成的代码覆盖。

不直接将这些DataAnnotation应用于实际的Entity类,而是将它们分成部分类定义,然后使用进行链接MetadataType,即使使用“代码优先”方法来定义实体模型,这也有意义吗?

public class MyEntity
{
    [Required]
    public string Name { get; set;}
}

public partial class MyEntity
{
    public string Name { get; set;}
}

[MetadataType(typeof(MyEntityMetadata))]
public partial class MyEntity
{
}

public class MyEntityMetadata
{
    [Required]
    public string Name { get; set;}
}
伊万·斯托夫(Ivan Stoev)

不直接将这些DataAnnotation应用于实际的Entity类是否有意义,而是将它们分成部分类定义,然后使用MetadataType进行链接,即使使用Code First方法定义实体模型也有意义吗?

在大多数情况下,这是没有意义的,因为它涉及不必要的和冗余的代码重复,只是为了将某些属性与属性相关联。

如果实体类模型是由您使用代码创建的,则没有任何意义。

如果它是由您可以控制的某些自定义代码生成(例如T4模板)创建的,也没有任何意义,因为您可以自定义生成本身。

唯一有意义的情况是您无法控制实体类代码(例如,来自第三方库的类)。在这种情况下,您可以使用AssociatedMetadataTypeTypeDescriptionProvider类将元数据与第三方类关联。

例如,假设以下类来自另一个没有源代码的库:

public sealed class ExternalEntity
{
    public string Name { get; set;}
}

然后,您可以定义元数据类:

public class ExternalEntityMetadata
{
    [Required]
    public string Name { get; set;}
}

并将其与ExternalEntityusingTypeDescriptor.AddProvider方法关联一次(在应用程序启动期间或其他过程中):

TypeDescriptor.AddProvider(new AssociatedMetadataTypeTypeDescriptionProvider(
    typeof(ExternalEntity), typeof(ExternalEntityMetadata),
    typeof(ExternalEntity));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在没有Message或Inted中间件的情况下使用JMS是否有意义?

来自分类Dev

可以在没有有意义的替代文本的情况下使用longdesc吗?

来自分类Dev

可以在没有有意义的替代文本的情况下使用longdesc吗?

来自分类Dev

在这种情况下,New是否有意义?

来自分类Dev

在不处理慢速 IO 的情况下,从性能的角度来看,使用响应式编程有意义吗?

来自分类Dev

使用R进行回归的randomForest有意义吗?

来自分类Dev

使用dts签入Visual Studio代码类型文件夹是否有意义?

来自分类Dev

在进行同步 IO 基准测试时使用队列深度是否有意义?

来自分类Dev

使用六核CPU是否有意义?

来自分类Dev

在现代Linux上使用noatime是否有意义?

来自分类Dev

在同步方法中使用ReadWriteLock是否有意义?

来自分类Dev

对$ scope使用去抖是否有意义?

来自分类Dev

使用TaskCompletionSource的这种异步方法是否有意义?

来自分类Dev

是否存在使用 NOT LIKE ANY 有意义的场景?

来自分类Dev

使用IO.FileInfo.Name在作业应用程序中有意义的情况下交换(FileInfo)列表中的项目(求职信,简历,证书)

来自分类Dev

Restful API:在没有封闭实体的情况下发送PUT是否有意义?

来自分类Dev

熊猫仅在有意义的情况下重新采样

来自分类Dev

在scikit-learn的Pipeline中包含分类器以进行交叉验证是否有意义?

来自分类Dev

编写伪代码进行赋值,并想再次检查它是否有意义

来自分类Dev

使用JWT和基本身份验证保护REST应用程序是否有意义?

来自分类Dev

使用源代码管理来管理图形文件(例如PSD和AI文件)是否有意义

来自分类Dev

进行这种聚合根设计是否有意义?

来自分类Dev

同时使用countvectorizer和tfidfvectorizer作为特征向量与KMeans进行文本聚类是否有意义?

来自分类Dev

如何在不重新加载页面的情况下将textarea值转换为有意义的内容?

来自分类Dev

使用事务时,使用MySQL批量插入行是否有意义?

来自分类Dev

使用外部方法设置对象是否有意义?使用这个吗?

来自分类Dev

使用通用的Unix工具在路径中使用./是否有意义?

来自分类Dev

使用异步代码时获取有意义的堆栈跟踪

来自分类Dev

使用JavaScript进行输入消毒不是没有意义吗?

Related 相关文章

  1. 1

    在没有Message或Inted中间件的情况下使用JMS是否有意义?

  2. 2

    可以在没有有意义的替代文本的情况下使用longdesc吗?

  3. 3

    可以在没有有意义的替代文本的情况下使用longdesc吗?

  4. 4

    在这种情况下,New是否有意义?

  5. 5

    在不处理慢速 IO 的情况下,从性能的角度来看,使用响应式编程有意义吗?

  6. 6

    使用R进行回归的randomForest有意义吗?

  7. 7

    使用dts签入Visual Studio代码类型文件夹是否有意义?

  8. 8

    在进行同步 IO 基准测试时使用队列深度是否有意义?

  9. 9

    使用六核CPU是否有意义?

  10. 10

    在现代Linux上使用noatime是否有意义?

  11. 11

    在同步方法中使用ReadWriteLock是否有意义?

  12. 12

    对$ scope使用去抖是否有意义?

  13. 13

    使用TaskCompletionSource的这种异步方法是否有意义?

  14. 14

    是否存在使用 NOT LIKE ANY 有意义的场景?

  15. 15

    使用IO.FileInfo.Name在作业应用程序中有意义的情况下交换(FileInfo)列表中的项目(求职信,简历,证书)

  16. 16

    Restful API:在没有封闭实体的情况下发送PUT是否有意义?

  17. 17

    熊猫仅在有意义的情况下重新采样

  18. 18

    在scikit-learn的Pipeline中包含分类器以进行交叉验证是否有意义?

  19. 19

    编写伪代码进行赋值,并想再次检查它是否有意义

  20. 20

    使用JWT和基本身份验证保护REST应用程序是否有意义?

  21. 21

    使用源代码管理来管理图形文件(例如PSD和AI文件)是否有意义

  22. 22

    进行这种聚合根设计是否有意义?

  23. 23

    同时使用countvectorizer和tfidfvectorizer作为特征向量与KMeans进行文本聚类是否有意义?

  24. 24

    如何在不重新加载页面的情况下将textarea值转换为有意义的内容?

  25. 25

    使用事务时,使用MySQL批量插入行是否有意义?

  26. 26

    使用外部方法设置对象是否有意义?使用这个吗?

  27. 27

    使用通用的Unix工具在路径中使用./是否有意义?

  28. 28

    使用异步代码时获取有意义的堆栈跟踪

  29. 29

    使用JavaScript进行输入消毒不是没有意义吗?

热门标签

归档