草庐IT

使用EF Core更新与修改生产数据库

使用EFCore的CodeFirst,在设计阶段,直接使用Database.EnsureCreated()和EnsureDeleted()可以快速删除、更新最新的数据结构。由于没有什么数据,删除的风险非常低。但是对于已经投入生产的数据库,这个方法就绝对不可行了。考虑以下场景:项目已经上线,一直使用本地测试数据库进行开发,本地已经增加和修改了较多数据库表结构,线上数据庞大且实时更新,现在测试完毕需要进行上线。如果需要更新生产数据库,我能想的有两种方法:从一开始就使用Migration从数据库开始设计的时候,就使用EFMigration,保证数据库能够与代码同步,不过操作的时候,需要极为小心,务必

使用EF Core更新与修改生产数据库

使用EFCore的CodeFirst,在设计阶段,直接使用Database.EnsureCreated()和EnsureDeleted()可以快速删除、更新最新的数据结构。由于没有什么数据,删除的风险非常低。但是对于已经投入生产的数据库,这个方法就绝对不可行了。考虑以下场景:项目已经上线,一直使用本地测试数据库进行开发,本地已经增加和修改了较多数据库表结构,线上数据庞大且实时更新,现在测试完毕需要进行上线。如果需要更新生产数据库,我能想的有两种方法:从一开始就使用Migration从数据库开始设计的时候,就使用EFMigration,保证数据库能够与代码同步,不过操作的时候,需要极为小心,务必

乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - .NET 7正式发布,看看ASP.NET Core 7.0和EF Core 7新增哪些功能

2022年11月8日.NET7正式发布.NET仍然是最快、最受欢迎、最值得信赖的平台之一,其庞大的.NET软件包生态系统包括33万多个软件包。.NET7为您的应用程序带来了更高的性能和C#11/F#7、.NETMAUI、ASP.NETCore/Blazor、WebAPIs、WinForms、WPF等的新功能。有了.NET7,你还可以轻松地将你的.NET7项目容器化,在GitHub行动中设置CI/CD工作流程,并实现云原生的可观察性。感谢开源的.NET社区为帮助塑造这个.NET7版本所作的大量贡献。在整个.NET7版本中,有超过8900名贡献者做出了28000项贡献!.NET7的发布是我们.NE

乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - .NET 7正式发布,看看ASP.NET Core 7.0和EF Core 7新增哪些功能

2022年11月8日.NET7正式发布.NET仍然是最快、最受欢迎、最值得信赖的平台之一,其庞大的.NET软件包生态系统包括33万多个软件包。.NET7为您的应用程序带来了更高的性能和C#11/F#7、.NETMAUI、ASP.NETCore/Blazor、WebAPIs、WinForms、WPF等的新功能。有了.NET7,你还可以轻松地将你的.NET7项目容器化,在GitHub行动中设置CI/CD工作流程,并实现云原生的可观察性。感谢开源的.NET社区为帮助塑造这个.NET7版本所作的大量贡献。在整个.NET7版本中,有超过8900名贡献者做出了28000项贡献!.NET7的发布是我们.NE

EF Core 使用Azure App Service中的In-App MySQL服务

AzureAppService提供了一个应用内的MySQL,可以供测试、开发使用。前提条件是需要使用Windows的操作系统。创建完AppServer之后,只需要在设置下开启MySQLInApp即可。在应用中可以从环境变量中获取连接字符串。varmysqlconnstr=Environment.GetEnvironmentVariable("MYSQLCONNSTR_localdb")但是Azure提供的连接字符串是一些格式:Database={database};DataSource={host}:{port};UserId={username};Password={password}看起来

EF Core 使用Azure App Service中的In-App MySQL服务

AzureAppService提供了一个应用内的MySQL,可以供测试、开发使用。前提条件是需要使用Windows的操作系统。创建完AppServer之后,只需要在设置下开启MySQLInApp即可。在应用中可以从环境变量中获取连接字符串。varmysqlconnstr=Environment.GetEnvironmentVariable("MYSQLCONNSTR_localdb")但是Azure提供的连接字符串是一些格式:Database={database};DataSource={host}:{port};UserId={username};Password={password}看起来

记一次EF+Mysql所遇到的事务不生效的的坑

业务场景:近期写的一个项目,整个项目采用的DDD(领域驱动)设计,所以刚开始设计的时候就将各个业务以聚合根的方式进行划分,以该业务场景为例,整体的业务简述为,当客户进行付款以后,创建一个付款单,然后由财务手动将付款单与发货单进行账务冲抵和关联,同时还需要针对付款的客户及企业的余额进行相应的变动,所以,当付款单和发货单进行冲抵业务的时候,客户及其企业的待付款金额将会根据冲抵的金额,进行变动,所以该业务的主要操作是首先针对发货单的待付款金额进行冲抵扣减,此时操作的聚合根为发货单的聚合根,而因为还需要同时针对用户的账户金额进行变动,所以在操作发货单的聚合根的时候,触发一个领域事件,而用户的聚合根订阅

记一次EF+Mysql所遇到的事务不生效的的坑

业务场景:近期写的一个项目,整个项目采用的DDD(领域驱动)设计,所以刚开始设计的时候就将各个业务以聚合根的方式进行划分,以该业务场景为例,整体的业务简述为,当客户进行付款以后,创建一个付款单,然后由财务手动将付款单与发货单进行账务冲抵和关联,同时还需要针对付款的客户及企业的余额进行相应的变动,所以,当付款单和发货单进行冲抵业务的时候,客户及其企业的待付款金额将会根据冲抵的金额,进行变动,所以该业务的主要操作是首先针对发货单的待付款金额进行冲抵扣减,此时操作的聚合根为发货单的聚合根,而因为还需要同时针对用户的账户金额进行变动,所以在操作发货单的聚合根的时候,触发一个领域事件,而用户的聚合根订阅

EF7上下文池

为什么使用DbContext池?DbContext是EntityFramework中最重要的类型之一,它提供了一种连接数据库并执行查询和更新的方式。在一个ASP.NETCore应用程序中,每次请求都可能需要对数据库进行一次或多次查询。在这种情况下,为每个请求创建新的DbContext实例并不是一个好的选择,因为这样做可能会导致内存和性能问题。DbContext池允许应用程序在需要时重用已经创建的DbContext实例,从而提高性能并减少内存消耗。性能基准DbContext池的工作原理DbContext池是一个对象池,它维护一组可用的DbContext实例,这些实例是预先创建好的,缓存在池子中。

EF7上下文池

为什么使用DbContext池?DbContext是EntityFramework中最重要的类型之一,它提供了一种连接数据库并执行查询和更新的方式。在一个ASP.NETCore应用程序中,每次请求都可能需要对数据库进行一次或多次查询。在这种情况下,为每个请求创建新的DbContext实例并不是一个好的选择,因为这样做可能会导致内存和性能问题。DbContext池允许应用程序在需要时重用已经创建的DbContext实例,从而提高性能并减少内存消耗。性能基准DbContext池的工作原理DbContext池是一个对象池,它维护一组可用的DbContext实例,这些实例是预先创建好的,缓存在池子中。