【问题标题】:Specifying ASP.NET MVC attributes for auto-generated data models为自动生成的数据模型指定 ASP.NET MVC 属性
【发布时间】:2013-08-22 03:25:12
【问题描述】:

我对 ASP.NET MVC(以及一般的 ASP.NET)非常陌生,并且将获得一些关于这项技术的知识,所以很抱歉我可以问一些琐碎的问题。我已经安装了 ASP.NET MVC 3 RC1,我正在尝试执行以下操作。

让我们考虑一下,我有一个模型,它完全是使用 VS2010 中的“LINQ to SQL 类”模板从表中自动生成的。模板生成3个文件(分别为2个.cs文件和1个.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:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    查看 VS 库,您可能会发现很多选项。

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

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

    【讨论】:

    • +1,关键是放弃使用一个数据对象来统治所有数据的想法。起初这是一场艰难的斗争,但值得。
    • 感谢您的回复,贾尼。但是,我找到了一个更接近我的例子。取自weblogs.asp.net/scottgu/archive/2010/01/15/…,使用MetadataTypeAttribute,但由于某种原因它不起作用。
    • @Lyubomyr 我认为它只是用于验证没有 DisplayName 的功能,我错了吗?
    • 不,不仅仅是为了验证。例如。 RequiredAttribute, DisplayName, StringLength... 但是,我无法使MetadataTypeAttribute 工作,甚至看不到原因。
    • 重读几次后,我喜欢这个答案,但我真的不喜欢这个术语。 DTO(特别是在 .NET 的上下文中)意味着在 Web 服务之类中使用的东西,更喜欢视图模型,因为它更合适。使用“DTO”一词意味着在前两次尝试中我完全没有得到你的建议,因为我被它(从我的背景)不适合上下文而分心。
    【解决方案2】:

    由于我不想创建任何辅助类,所以我找到了最符合我要求的文章。但是,由于某种原因,这种方法不起作用,但我仍然认为这是因为我缺乏 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多