Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MVC DB first Fix display Name

I'm using mvc 4, with database first.

Everytime I refresh the model.edmx file, the display name attribute I added is removed. How can I the keep display name attribute between refreshes?

like image 233
Eng Boon Avatar asked Sep 26 '12 21:09

Eng Boon


2 Answers

You are going to want to use System.ComponentModel.DataAnnotations. Here is a simplistic Example for a 'User' table in EF to show you how:

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; }
    }
}

You can also include validation in your class as well. Be sure it is a partial class named the exact same - also do not forget that it must be in the exact same namespace as your .edmx.

like image 108
naspinski Avatar answered Sep 27 '22 21:09

naspinski


You need to use MetaDataTypes models..

[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; }
}

In the above example I'm using Resource Files to get the Fields display names... but you could use it in a more harcoded way :)

You should create a new file in another folder, let's say "ModelMD". That way, once the models are regenerated this file is kept unchanged.

Important: The ModelMD file should use the same Namespace that the original model. If you put the file in a different folder it defaults to another namespace.

like image 42
Romias Avatar answered Sep 27 '22 19:09

Romias