Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Fluent API=数据注释?_C#_Asp.net Mvc_Asp.net Mvc 4_Data Annotations_Fluentvalidation - Fatal编程技术网

C# Fluent API=数据注释?

C# Fluent API=数据注释?,c#,asp.net-mvc,asp.net-mvc-4,data-annotations,fluentvalidation,C#,Asp.net Mvc,Asp.net Mvc 4,Data Annotations,Fluentvalidation,简单问一下,就功能而言,Fluent API是否可以替代数据注释? Fluent API中未包含的数据注释中的哪些功能 我想使用Fluent API,因为关注点分离(在我的模型和持久性之间),约定优先于配置(映射定义在一个位置DbContext.OnModelCreating(),但不是在每个模型属性上),我想用它来确保我的POCO类永远不会依赖于EF,但是如果我从源代码中完全删除数据注释,我会错过什么呢?提供了数据注释的全方位功能,甚至更多功能。因此,如果您使用FV而不是数据注释,您绝对不会遗

简单问一下,就功能而言,Fluent API是否可以替代数据注释? Fluent API中未包含的数据注释中的哪些功能


我想使用Fluent API,因为关注点分离(在我的模型和持久性之间),约定优先于配置(映射定义在一个位置
DbContext.OnModelCreating()
,但不是在每个模型属性上),我想用它来确保我的POCO类永远不会依赖于EF,但是如果我从源代码中完全删除数据注释,我会错过什么呢?提供了数据注释的全方位功能,甚至更多功能。因此,如果您使用FV而不是数据注释,您绝对不会遗漏任何内容。

我想知道这是因为我希望我的POCO类与EF完全隔离(我的存储库和UoW模式使kt可以移动到NHibernate)

Fluent API>数据注释,即Fluent API比数据注释具有更多的功能,可用于映射表和创建关系但是,Fluent API没有很好的标签和验证
@Html.LabelFor
@Html.EditorFor
,使用
[Display(Name:=…)]
[DisplayFormat(DataFormatString=…)]
[Required(ErrorMessage=…)]
。这就是让我头痛的原因

现在我们发现了这样一个想法:

  • 在数据层使用Fluent API,因此我的模型实际上是POCO类(POCO项目)和dll可以在WCF和其他将订阅此服务的项目中使用

  • 对ViewModel使用数据注释。因为这只在UI层中,并且ViewModel除了MVC视图之外从未与其他项目共享,所以我不介意使用数据注释属性

  • 将(1)中创建的约束重做到(2)中,如
    [Required]
    [MaxLength]
    。我发现有些人说值得重复和使用DRY原则,因为ViewModel和domain模型应该分开,并且彼此不相关,尽管我认为
    MaxLength
    是如何相关的(只是一个小的重复,对于n层体系结构来说应该没问题,我可以使用static class和const使两边的长度相同)


  • “我想使用Fluent API,因为SoC和对流会影响配置和层验证,所以Poco命名空间永远不会依赖于EF”--嗯…我的解析器失败了。对不起,我当时很忙,我只是更新了问题。找到了答案:Fluent API>数据注释谢谢你的建议。它已经存在了几年,但不知道为什么下载数量仍然较少。如果我使用它,像
    [Display(Name=“Username”)]这样的简单注释怎么样
    和对
    @Html.LabelFor()
    的支持?FV用于验证目的。它不用于自定义标签和显示名称。您可以通过使用
    .WithName
    方法来实现,但通常我会将此信息与视图模型一起保留,并使用FV仅定义验证规则。除了
    [DefaultValue()]
    无法使用Fluent API完成:(@webnoob,FluentValidation是一个为验证目的而设计的库,不是为定义默认值而设计的。在执行代码首次迁移时,Fluent API不是用于定义表结构等吗!?