好,所以 我仍然想使用EF 4.0中的架构模型, 但是我也想要EF 4.1的API和灵活性。

因此,在我的应用程序中,我从当前的EF 4.0型号中添加了DBContext生成代码。

现在,我的问题是,我可以选择验证我的DBSET(EF 4.1)模型而没有被淘汰的选择?

DataNandotation似乎并没有削减它,因为每次我更新视觉模型时,都会完成所有修改。

  • 我听说过部分课程,但这似乎真的很混乱。
  • 我真的不想在控制器上进行验证。
  • 我想制作可扩展的,以便我可以轻松地将我的类从ASP.NET MVC转移到WPF等。

有没有办法做到这一点?验证存储库?分开验证层?存储库中的验证?例子也将不胜感激。

请帮我。谢谢 :)

有帮助吗?

解决方案

使用模板生成器,似乎可以执行以下操作之一:

  1. 为您的每个实体创建一个好友类,并通过模板中的命名约定来定义伙伴类。
  2. 通过将它们存储在单独的源或其他内容中,可以查找GEN数据注释的方法。

或者,使用单独的层。如果您使用的是存储库,则可以在此处嵌入验证。我选择拥有一个ORM验证工厂,该工厂拉动与实体相匹配的规则(无论是静态还是动态),并且该工厂完成了工作(因为这更符合单数责任原则的界限)。

Hth。

其他提示

在我的项目中,我将4.1和4.0上下文混合在一起。可以缓慢迁移。还有一个实体框架4.1反向工程师扩展,可以添加到Visual Studio中。 (让您通过代码生成POCO对象 +从现有数据库中使用4.1)。

我不建议创建一个DBContext,该DBContext揭示了4.0中EDMX生成的型号。您还失去了继承objectContext/dbContext,继承属性(行版本,ECT)和控制POCO对象的好处(非代码生成,因此您不必担心partials + gertials + metadatype属性,如4.0中)

您的问题与用EF4.0创建的验证模式有关:

因此,在更新模型时,数据注释不会完全擦除,您需要使用元数据属性。

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatatypeattribute.aspx

有一个例子

我不知道为什么女士会教程序员这样的错误做法。尤其是使用数据注释在EF 4.1中映射确实是愚蠢的设计决策(例如,LINQ-TO-SQL使用单独的属性设置来在映射和验证之间进行清晰的分离)。

数据注释用于验证从用户输入的数据,用户输入是视图 /控制器相关的内容,其中每个视图都可以使用不同的验证规则=>如果要使用数据注释,这些规则属于视图模型,而不是实体。

在最简单的情况下,视图和实体为1:1,您可以直接使用数据注释,但这确实适用于最简单的应用程序,一旦执行了这样一个简单的应用程序,您很可能很可能直接使用ASP.NET动态数据,并让Framework创建所有页面根据您的实体模型为您。

ASP.NET动态数据还显示了如何应用数据注释 好友课.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top