如何在ASP.NET MVC中使用生成的DBContext验证EF 4.0模型?
-
22-10-2019 - |
题
好,所以 我仍然想使用EF 4.0中的架构模型, 但是我也想要EF 4.1的API和灵活性。
因此,在我的应用程序中,我从当前的EF 4.0型号中添加了DBContext生成代码。
现在,我的问题是,我可以选择验证我的DBSET(EF 4.1)模型而没有被淘汰的选择?
DataNandotation似乎并没有削减它,因为每次我更新视觉模型时,都会完成所有修改。
- 我听说过部分课程,但这似乎真的很混乱。
- 我真的不想在控制器上进行验证。
- 我想制作可扩展的,以便我可以轻松地将我的类从ASP.NET MVC转移到WPF等。
有没有办法做到这一点?验证存储库?分开验证层?存储库中的验证?例子也将不胜感激。
请帮我。谢谢 :)
解决方案
使用模板生成器,似乎可以执行以下操作之一:
- 为您的每个实体创建一个好友类,并通过模板中的命名约定来定义伙伴类。
- 通过将它们存储在单独的源或其他内容中,可以查找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创建的验证模式有关:
因此,在更新模型时,数据注释不会完全擦除,您需要使用元数据属性。
有一个例子
我不知道为什么女士会教程序员这样的错误做法。尤其是使用数据注释在EF 4.1中映射确实是愚蠢的设计决策(例如,LINQ-TO-SQL使用单独的属性设置来在映射和验证之间进行清晰的分离)。
数据注释用于验证从用户输入的数据,用户输入是视图 /控制器相关的内容,其中每个视图都可以使用不同的验证规则=>如果要使用数据注释,这些规则属于视图模型,而不是实体。
在最简单的情况下,视图和实体为1:1,您可以直接使用数据注释,但这确实适用于最简单的应用程序,一旦执行了这样一个简单的应用程序,您很可能很可能直接使用ASP.NET动态数据,并让Framework创建所有页面根据您的实体模型为您。
ASP.NET动态数据还显示了如何应用数据注释 好友课.