MVC数据库优先修复显示名称

14

我正在使用基于数据库的MVC 4。

每次刷新model.edmx文件时,我添加的显示名称属性都会被删除。如何在刷新之间保留显示名称属性?

2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
20

你需要使用System.ComponentModel.DataAnnotations。这里是一个在EF中展示如何使用的“User”表格的简单例子:

namespace YourNamespace.BlaBlaBla
{
    [MetadataType(typeof(UserHelper))]
    public partial class User { }

    public class UserHelper
    {
        [Display(Name = "Your New Title For Name")]
        public string Name { get; set; }
    }
}

您还可以在类中包含验证。请确保它是一个具有相同名称的部分类 - 也不要忘记它必须与您的.edmx文件处于完全相同的命名空间中。


非常有帮助。有了这个,我想知道我应该把扩展的部分类放在哪里。这个答案对此非常有帮助:https://dev59.com/0Irda4cB1Zd3GeqPNop5 简短的回答是:在同一个项目中的任何地方。 我不确定是否还有进一步的指导,但最终我在我的项目中的 Models 文件夹下创建了一个 Extensions 文件夹。这样可以将它们从模型本身中分离出来,以免被覆盖,但在概念上仍然处于相同的区域。 - Brian Swift

7
你需要使用MetaDataTypes模型。
[MetadataType(typeof(ModelMD))]
public partial class Model
{
//This is for "extending" the EF generated model, saying what class is used for metadata, in your case DisplayName
}

public partial class ModelMD
{

    [Display(Name = "Model_Title", ResourceType = typeof(DataFieldLabels))]
    public string Titulo { get; set; }

    [Display(Name = "Model_Description", ResourceType = typeof(DataFieldLabels))]
    public string Descripcion { get; set; }
}
在上面的示例中,我使用资源文件来获取字段的显示名称...但你也可以以更硬编码的方式使用它 :) 你应该在另一个文件夹中创建一个新文件,比如说 "ModelMD"。这样,在模型重新生成时,此文件将保持不变。 重要提示:ModelMD 文件应使用与原始模型相同的命名空间。如果将文件放在不同的文件夹中,则默认为另一个命名空间。

不需要 ResourceType = typeof(DataFieldLabels)。 - mcfea
@mcfea,为什么不呢?这是资源名称,用于查找“Name”属性。如果您想硬编码显示名称,则显然不需要资源文件。 - Romias
嗯,也许你有充分的理由。我只是添加了我的评论,以表明在我的用户界面中不需要ResourceType的附加信息,因为显示名称已经显示了。 - mcfea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,