【问题标题】:Update entity class in ASP.NET Core Entity Framework更新 ASP.NET Core Entity Framework 中的实体类
【发布时间】:2017-05-05 03:17:18
【问题描述】:

我已使用 ASP.NET Core 中的实体框架从现有数据库创建模型。

这是Market表的模型

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

但是,我已将数据库中的 MarketId 数据类型更改为 int。现在我想更新模型。

找到了一些链接,但是这个链接再次创建了整个模型https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db

如何在不创建新模型和使用appsettings.json 中的连接字符串的情况下更新模型?

【问题讨论】:

  • 您可以使用带有-force 标志的Scaffold-DbContext 命令。这样你就可以强制脚手架覆盖现有的模型文件。
  • 手动更改不是最佳选择。
  • @sanket - 你能提供我的例子吗
  • @sanjaisy 这是示例命令 - Scaffold-DbContext "<ConnectionString>" Microsoft.EntityFrameworkCore.SqlServer -t <tablename> -f 替换 ConnectionString 和表名
  • 另请注意,只要您在数据库中进行更改,例如添加或删除或更改列...当您强制更新脚手架时,您将丢失您所做的任何修改模型文件不是我能想到的为什么有人会这样做。

标签: c# asp.net-core entity-framework-core


【解决方案1】:

一个选项是-

您可以使用带有-force 标志的Scaffold-DbContext 命令。这样你就可以强制脚手架覆盖现有的模型文件。

示例命令 -

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

根据您的要求替换 ConnectionString 和 TableName。

【讨论】:

  • 这真的很有帮助,谢谢
  • 这也适用于 ASP.NET Core 2.0。如果上下文文件在其他地方,它将自动在项目根目录中生成一个上下文文件。但是,为新表生成的代码可以轻松地从 OnModelCreating 中移出,并删除额外的上下文。
  • 如何以编程方式做同样的事情?
  • @SagarPatil 您可以使用以下命令自动生成上下文: Scaffold-DbContext "Server=tcp:"SomeAzureConnectionString";Initial Catalog=(YoutDataBaseName);User ID=(YourUser);Password=(YourPassword); Trusted_Connection=False;加密=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir 模型 -f
【解决方案2】:

要更新整个 dbcontext,请使用以下命令。链接了解更多详情

"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

从 Azure 连接和本地连接更新

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

创建新的上下文

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>

【讨论】:

  • 正确答案如何?问题是关于更新单个实体,答案是更新整个 dbContext。
  • @phifi - 是的,你是对的,它不会更新单个实体它只是将单个实体与其他实体一起替换。
  • 看起来您的初始问题在此处被跟踪为 EF 的功能请求github.com/aspnet/EntityFrameworkCore/issues/831 也许您想将此添加到您的答案中?
猜你喜欢
  • 2020-02-06
  • 1970-01-01
  • 2018-12-10
  • 2017-05-16
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多