Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Entity Framework Database First regeneration make me lose manual changes

I'm making a website with MVC .NET.

Since I'm an old school programmer who learn to design database first, I opted for the Database first approach. I'm also using "code generation" which create files with the extension .tt . Everything is working so far except one things that botters me.

Classic scenario:

  • I realise that I am missing one field
  • I add the field in the database.
  • I go into the edmx and choose to update the model from the database.

Then I go back to my code and things that use to work like special DisplayName tag that I put on top of model field were removed.

For example if I have this:

public partial class Blog
    {
        public Blog()
        {
            this.BlogComments = new HashSet<BlogComment>();
        }

        public int IDBlog { get; set; }
        public string Title { get; set; }

        [AllowHtml]
        public string Content { get; set; }
        public System.DateTime DateCreated { get; set; }
        public string Author { get; set; }

        public virtual ICollection<BlogComment> BlogComments { get; set; }
    }

It will become

public partial class Blog
    {
        public Blog()
        {
            this.BlogComments = new HashSet<BlogComment>();
        }

        public int IDBlog { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        public System.DateTime DateCreated { get; set; }
        public string Author { get; set; }

        public virtual ICollection<BlogComment> BlogComments { get; set; }
    }

That is because the [AllowHtml] was added after a previous generation of the model. Is there a way to update the table and not remove all the tag that I add after the generation? How can I do that?

Right now, I manage this by doing some revert with SVN but it will soon be unmanagable.

Thanks

like image 657
Jean-François Côté Avatar asked Oct 14 '25 14:10

Jean-François Côté


1 Answers

Don't edit the generated files. Ever. Just. Don't. Do. It.

Instead, make your edits in partial files in a different directory. To add attributes, declare a Metadata class at the top of your partial class definition.

[MetadataType(typeof(BlogMetadata))]
public partial class Blog
{
    // it's possible to add logic and non-mapped properties here
}

Now in your Metadata class, you can define attributes or other logic:

public class BlahMetadata
{
    [AllowHtml] 
    public string Content{ get; set; } 
}
like image 98
Heather Avatar answered Oct 17 '25 03:10

Heather



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!