为自动生成的数据模型指定ASP.NET MVC属性

时间:2010-12-26 18:51:10

标签: asp.net-mvc-3 linq-to-sql

我对ASP.NET MVC(以及一般的ASP.NET)都很陌生,并且会对这项技术有所了解,所以很抱歉我可以提出一些微不足道的问题。我已经安装了ASP.NET MVC 3 RC1,我正在尝试执行以下操作。

让我们考虑一下,我在VS2010中使用“LINQ to SQL Classes”模板从表中完全自动生成了一个模型。该模板生成3个文件(分别为两个.cs文件和一个.layout文件),生成的部分类应该用作MVC模型。我们还要考虑,映射到模型中的单个DB列可能如下所示:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Name", DbType = "VarChar(128)")]
public string Name {
    get {
        return this._Name;
    }
    set {
        if ( (this._Name != value) ) {
            // ... generated stuff goes here
        }
    }
}

ASP.NET MVC引擎还提供了一种漂亮的声明方式来指定一些额外的东西,比如RequiredAttributeDisplayNameAttribute和其他不错的属性。但由于映射模型是一个纯粹的自动生成模型,我意识到我不应该手动更改模型,并指定如下字段:

[Required]
[DisplayName("Project name")]
[StringLength(128)]
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Name", DbType = "VarChar(128)")]
public string Name {
    ...

尽管这种方法运行良好......直到我在DBML设计器中更改模型,自动删除ASP.NET MVC属性。那么,如何安全地为DBML模型及其字段指定ASP.NET MVC属性?

提前致谢,圣诞快乐。


更新#1:

在期待回复时,我发现了这样的东西:

2 个答案:

答案 0 :(得分:1)

更正确的方法是制作相应的DTO(ViewModel或任何你称之为),并使用AutoMapper等工具将这些DTO映射到数据模型对象(将胖数据模型对象转换为清洁对象,反之亦然)。

有一些工具可以为您完成这项任务(制作DTO)并生成这些DTO。

看看VS画廊,您可能会找到很多选择。

也许找到一个很好的样本,如MicrosoftNLayerApp,采用所有这些技术将指导您完成整个过程。

最后,您的答案是使用DisplayName属性注释DTO类属性。

答案 1 :(得分:0)

由于我不想创建任何帮助程序类,我发现这篇文章最符合我的要求。但是,这种方法由于某种原因不起作用,但我仍然认为这是因为我缺乏ASP.NET MVC经验(参见Step 4: Creating a Custom [Email] Validation Attribute):

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx