更新 ASP.NET Core Entity Framework 中的实体类

Posted

技术标签:

【中文标题】更新 ASP.NET Core Entity Framework 中的实体类【英文标题】:Update entity class in 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 和表名 另请注意,只要您在数据库中进行更改,例如添加或删除或更改列...当您强制更新脚手架时,您将丢失您所做的任何修改模型文件不是我能想到的为什么有人会这样做。 【参考方案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 也许您想将此添加到您的答案中?

以上是关于更新 ASP.NET Core Entity Framework 中的实体类的主要内容,如果未能解决你的问题,请参考以下文章

更新现有记录时出现 Entity Framework Core 错误

C# ASP.NET Core Entity Framework Core 异步 ToQueryable 比较

如何为 ASP.net Core 配置 Entity Framework 6

ASP.NET Core 和 Entity Framework Core:Linq 中的左(外)连接

在 ASP.NET Core 中使用 Entity Framework 6

根据 ASP.NET Core 和 Entity Framework Core 中的条件禁用 [必需] 属性