好的,所以我仍然想使用EF 4.0的模式模型,但我也想要EF 4.1的API和灵活性。
因此,在我的应用程序中,我添加了当前EF 4.0模型中的DbContext生成代码。
现在,我的问题是我可以选择验证我的DbSet(EF 4.1)模型而不会让它们消失吗?
DataAnnotation似乎没有削减它,因为每次我更新我的视觉模型时,它都会完成所有修改。
有办法做到这一点吗? 验证库?单独的验证层?存储库层内的验证?例子也将受到赞赏。
请帮帮我。谢谢:))
答案 0 :(得分:1)
使用模板生成器,似乎可以执行以下操作之一:
或者,使用单独的图层。如果您使用的是存储库,则可以在那里嵌入验证。我选择了一个Orm Validation工厂,该工厂引入与实体匹配的规则(静态或动态),工厂完成工作(因为这更符合单一责任原则)。
HTH。
答案 1 :(得分:1)
在我的项目中,我混合使用4.1和4.0上下文。可以进行缓慢的迁移。 还有一个实体框架4.1逆向工程师扩展,可以添加到visual studio。 (允许您通过代码生成poco对象+来自现有数据库的映射来使用4.1。)
我不建议创建一个从4.0公开edmx生成的模型的DbContext。您还失去了继承objectcontext / dbcontext,继承属性(行版本控制,等等)和控制poco对象的好处(生成非代码,因此您不必担心4.0中的partials + metadatatype属性)
您的问题与验证使用ef4.0创建的架构有关:
为了在更新模型时不会完全擦除数据注释,您需要使用MetadataType属性。
有一个例子
答案 2 :(得分:0)
我不知道为什么MS教程序员这样的坏习惯。特别是在EF 4.1中使用数据注释进行映射是非常愚蠢的设计决策(例如,Linq-to-SQL使用单独的属性设置,以便在映射和验证之间进行明确分离)。
数据注释用于验证来自用户输入的数据,用户输入是视图/控制器相关的东西,其中每个视图可能需要不同的验证规则=>如果要使用数据注释,则这些规则属于视图模型而不属于实体。
在视图和实体是1:1的最简单的情况下,您可以直接使用数据注释,但这对于最简单的应用程序而言,一旦您执行这样一个简单的应用程序,您很可能直接使用ASP.NET动态数据并让框架根据您的实体模型为您创建所有页面。
ASP.NET动态数据还显示了如何在buddy classes中为生成的实体应用数据注释。