Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Update Model From Database (Database First)

I'm using MVC3 VS2010 with EF4.1, I have created my DB using SQL Server and I import it to the MVC3 Web Application.

I have a challenge here, when I come to Update Model from Database I do lost all my models files modifications, for example if I'm using attributes in some models for validation or so all that is overwritten with the new model properties.

Is there anyway to Update Model from Database without losing models' information?

OR

where should I define validation on my models instead of using the models' files directly?

like image 803
Shadi Avatar asked Jul 20 '11 07:07

Shadi


People also ask

How do I update my EF core model after database change?

Updating the Model If you need to re-scaffold the model after database schema changes have been made, you can do so by specifying the -f or --force option e.g.: dotnet ef dbcontext scaffold "Server=. \;Database=AdventureWorksLT2012;Trusted_Connection=True;" Microsoft. EntityFrameworkCore.


2 Answers

Update: As this is still relatively popular, I have created a blog post on this.

http://jnye.co/Posts/19/adding-validation-to-models-created-by-entity-framework-database-first-c

If you want to validate your models, and not use viewModels, use partial classes to define validation attributes. For example:

Say you have a model like

public class User {
    public string Name { get; set; }
}

If you wanted to put a string length validator on it you would need to create a partial class and utilise the MetadataTypeAttribute (this lives in System.ComponentModel.DataAnnotations)

The following classes should be defined in their own separate file, NOT put in the same file as your auto generated models.

[MetadataTypeAttribute(typeof(UserMetadata))]
public partial class User {
}

You then define your validation in the UserMetadata class as follows

public class UserMetadata{
    [StringLength(50)]
    public string Name {get; set;}
}

EDIT

I just found this article which explains the solution in a little more detail http://themonitoringguy.com/tips-tricks/validating-microsoft-entity-framework-objects-c-mvc/

like image 71
NinjaNye Avatar answered Sep 20 '22 16:09

NinjaNye


No, the files will be regenerated every time.

All the classes are defined as partial so you can easily add DataAnnotations using the MetadataTypeAttribute.

Let's say you have a User class defined as follow:

public partial class User {
    public string Name {get;set;}
}

Create a IUser interface

public interface IUser {
   [Required]
   [DisplayName("User name")]
   string Name {get;set;}
}

And then extend the User class to specify that IUser will be used as metadata.

[MetadataType(typeof(IUser))]
public partial class User {} //Empty class body
like image 41
Bertrand Marron Avatar answered Sep 21 '22 16:09

Bertrand Marron