asp.net-mvc - 使用 EF POCO 类作为 MVC 2 模型(带有数据注释)

标签 asp.net-mvc validation poco data-annotations n-layer

我有一个用 C# 编写的 4 层 Web 应用程序... .Net 4.0:

  • 界面层
  • 业务层
  • 数据访问层
  • 实体层

我的数据层包含一个 edmx 我的实体层包含我的 POCO 对象(由 t4 脚本生成),并且该层在所有其他层中都被引用。

例如,当创建 MVC 表单以创建新客户时......我的实体层中已经有了包含名字、姓氏等字段的客户类,但自动生成的 POCO 类没有有用于验证的数据注释... I.E. [必填]等提交表单时

我现在的解决方案是创建与我的 poco 类几乎相同但也具有这些额外验证注释的新模型类。

我想知道的是,是否有一种简单的方法可以在 MVC 模型中(在 UI 层中)使用某些 POCO 对象,而无需几乎重写类......并且也无需修改生成这些 POCO 类的 t4 (因为我在 t4 上跟不上)。

我从另一个关于 stackoverflow 的帖子中看到了这个 http://automapper.codeplex.com/ ...不确定这是否会做到或者是最好的解决方案。

最佳答案

如果你的 POCO 类是这样声明的:

public class Person {
    public string FirstName { get; set; }
    public string LastName  { get; set; }
}

如果你只是改变 T4 使其成为一个部分类,你可以在一个单独的文件中定义:

[MetadataType(typeof(PersonMetadata))]
public partial class Person {

    internal class PersonMetadata {

        [Required]
        // insert other metadata here
        public string FirstName { get; set; }

        // and if you don't want metadata for lastname, you can leave it out
    }
}

两个额外的点 - 元数据类不必嵌套在您定义的部分中,但我认为它更整洁。此外,元数据类中的类型不必匹配,因此您可以根据需要将它们全部设为对象(您可能会在网络上看到一些这样的示例)

关于asp.net-mvc - 使用 EF POCO 类作为 MVC 2 模型(带有数据注释),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2977247/

相关文章:

javascript - 在对话框中 knockout ASP MVC 问题

asp.net-mvc - 处理未授权使用自定义属性

jquery - SignalR 1.0.1 使用 Chrome 的跨域请求 (CORS)

c# - 使用 ErrorProvider 组件在 WinForms 中进行数据验证

php - 如何验证 symfony 表达式语言表达式

c# - 我可以使用 POCO 做什么?

c# - 未被发现的 POCO 类要求

c++ - 带 POCO C++ 库的多线程 TCP 服务器

.net - 在 ASP.NET MVC 的母版页中使用脚本

ios - 检查域名的有效性