35

I have created the model from existing database using Entity Framework in ASP.NET Core.

Here is the model of the Market table

public partial class Market
{
        public Guid MarketId { get; set; }
        public string City { get; set; }
        public string CityF { get; set; }
        public string Name { get; set; }
        public string NameF { get; set; }
        public int SortOrder { get; set; }
        public bool IsActive { get; set; }
}

However, I have change the MarketId datatype to int in the database. Now I want to update the model.

Found some link but this link create the entire model again https://learn.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db

How can I update the model without the creating new model and using the connection string in appsettings.json?

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
San Jaisy
  • 15,327
  • 34
  • 171
  • 290

2 Answers2

43

One option is-

You can use Scaffold-DbContext command with -force flag. This way you can force scaffolding to overwrite existing model files.

sample command -

Scaffold-DbContext "<ConnectionString>" Microsoft.EntityFrameworkCore.SqlServer -t <tablename> -f

Replace ConnectionString & TableName as per your requirements.

Sanket
  • 19,295
  • 10
  • 71
  • 82
  • This really helped Thanks – Adrita Sharma Jul 14 '17 at 06:28
  • This also works in ASP.NET Core 2.0. It will automatically generate a context file within the project root, if the context file is elsewhere. However, generated code for the new table can easily be moved from `OnModelCreating` and the extra context removed. – Alexei - check Codidact Jan 08 '18 at 10:33
  • How to do the same programmatically? – Sagar Patil Apr 02 '19 at 10:34
  • @SagarPatil You can auto generate a context with: Scaffold-DbContext "Server=tcp:"SomeAzureConnectionString";Initial Catalog=(YoutDataBaseName);User ID=(YourUser);Password=(YourPassword);Trusted_Connection=False;Encrypt=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -f – Diego Venâncio Aug 12 '19 at 13:08
27

To Update entire dbcontext use the below command. link for more details

"Build failed" on Database First Scaffold-DbContext

Scaffold-DbContext -Connection "Server=(local);Database=DefenderRRCart;Integrated Security=True;Trusted_Connection=True;" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir RRStoreContext.Models -context RRStoreContext -Project RR.DataAccess -force

To update from Azure Connection and local Connection

Scaffold-DbContext "Server=<Server Name>,1433;Initial Catalog=<Database Name>;Persist Security Info=False;User ID=<user id>;Password=<password>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entity -context <Context Name> -Project <project Name> -force

To create the new Context

Scaffold-DbContext "Server=<Server Name>,1433;Initial Catalog=<Database Name>;Persist Security Info=False;
        User ID=<User Id>;Password=<Password>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection
        Timeout=30;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir <Dir Name>
San Jaisy
  • 15,327
  • 34
  • 171
  • 290
  • How is this the correct answer? The questions is about updating a single Entity, the answer updates the entire dbContext. – phifi Apr 29 '19 at 07:26
  • @phifi - Yes, you are correct it doesn't update the single entity It just replaces the single entity along with other entities. – San Jaisy Apr 29 '19 at 07:43
  • Looks like your initial question is tracked as a feature request for EF here https://github.com/aspnet/EntityFrameworkCore/issues/831 Maybe you want to add this to your answer? – phifi Apr 29 '19 at 13:31