Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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# 实体框架数据注释对DDD和关注点分离有害吗?_C#_Asp.net Mvc_Entity Framework_Entity Framework 4_Domain Driven Design - Fatal编程技术网

C# 实体框架数据注释对DDD和关注点分离有害吗?

C# 实体框架数据注释对DDD和关注点分离有害吗?,c#,asp.net-mvc,entity-framework,entity-framework-4,domain-driven-design,C#,Asp.net Mvc,Entity Framework,Entity Framework 4,Domain Driven Design,我已经花了很长时间学习如何实现DDD、IoC和确保在我的应用程序中分离关注点。我还试图进入测试优先开发的方式 不知何故,实体框架给med带来了一些麻烦。我有一个域项目,它保存了我的域对象(现在很多是POCO类,但有一些行为)。这是遗留代码,我尝试重构它,但MVC在验证数据注释方面非常重要 datavalidation属性是在域对象上设置的,这将它们与实体框架联系起来。关于EF的大多数教学视频和文档也使用了许多域对象的属性 所以我想知道这是否真的是件好事? 我喜欢许多属性的想法,但将它们放在dom

我已经花了很长时间学习如何实现DDD、IoC和确保在我的应用程序中分离关注点。我还试图进入测试优先开发的方式

不知何故,实体框架给med带来了一些麻烦。我有一个域项目,它保存了我的域对象(现在很多是POCO类,但有一些行为)。这是遗留代码,我尝试重构它,但MVC在验证数据注释方面非常重要

datavalidation属性是在域对象上设置的,这将它们与实体框架联系起来。关于EF的大多数教学视频和文档也使用了许多域对象的属性

所以我想知道这是否真的是件好事?

我喜欢许多属性的想法,但将它们放在domian对象上的结果让我觉得实体框架是应用程序的核心,而不是域对象

你对解决这个问题有什么建议吗,还是应该这样

更新:

下面的建议答案让我找到了这篇由


对我来说,如果这能解决我的问题,那可能是最好的办法。他还指出了我在域层中的属性所面临的同样问题。

你觉得使用这些属性更好吗?

一些属性与EF和MVC相关,这些属性描述了你的类。所需字段、最小和最大长度等。。。如果您真的想分离所有内容,我会将这些属性保留在域对象上,将数据库内容(外键等)放在FluentAPI中,将MVC内容(显示名称等)放在视图模型中


如果MVC 4恰好支持FluentAPI(我使用的是MVC 3,它不知道,也不知道4),那么您肯定应该使用它。

是的,我会的。我不知道我可以将验证规则放在fluent API中。然而,仍有相当多的客户端验证无法识别这一点。也许我可以在视图模型上使用验证注释?我得查一下。这取决于你的申请。我所做的应用程序在大多数表单中都使用了ajax。我只是使用了服务器端验证,但感觉像是clienside验证。在客户端验证和本地化的结合上,我从来都不是很幸运。好吧,UI也是遗留的,有些是ajax,而som不是。然而,我有可能改变这一点。无论如何,服务器端验证是必须的,所以我会将验证放在Fluent APi for EF中,但我也会使用ViewModels并在那里放置注释。我现在正在迁移到mvc 4,但我自己还没有检查过。如果有,我就把它放在那里。我可以同意,只要属性描述类,而不是与DB相关的外键,就不是biggets问题。我只是觉得,如果我改变了EF或者那里发生了什么变化,我就不需要在我的域层中进行更改。这似乎是一个糟糕的设计……是的,Ladislav关于使用视图模型的回答是正确的。您不应该将域和表示逻辑混为一谈。