草庐IT

Ef Core花里胡哨系列(9) 阴影属性,有用还是没用?

EfCore花里胡哨系列(9)阴影属性,有用还是没用?EfCore中提供了一些有趣的实现,例如阴影属性!虽然大部分时候我还没有遇到应用场景,但是不妨碍我们了解一下。阴影属性是EFCore中的一个特性,它允许你在模型中定义一个属性,但是这个属性并不在对应的CLR类中。阴影属性只存在于EFCore的模型中,你可以在查询和保存数据时使用它,但是你不能直接在你的实体类中访问它。阴影属性通常用于模型和数据库中存在但在实体类中不存在的字段。例如,你可能有一个"LastUpdated"的字段在数据库中,但你并不想在你的实体类中添加这个字段。在这种情况下,你可以使用阴影属性。通常Json列我可能会用一下第二种

Ef Core花里胡哨系列(10) 动态起来的 DbContext

EfCore花里胡哨系列(10)动态起来的DbContext我们知道,DbContext有两种托管方式,一种是AddDbContext和AddDbContextFactory,但是呢他们各有优劣,例如工厂模式下性能更好呀等等。那么,我们能否自己托管DbContext呢?GithubDemo:动态起来的DbContext场景:结合我们之前的文章[EfCore花里胡哨系列(5)动态修改追踪的实体、动态查询]假设一个应用内有很多的子应用,且都需要更新追踪的动态实体,那么很多表在重置OnModelCreating的时候将会非常的慢。主要体现在modelBuilder.Model.AddEntityTy

Ef Core花里胡哨系列(5) 动态修改追踪的实体、动态查询

EfCore花里胡哨系列(5)动态修改追踪的实体、动态查询同样还是IModelCacheKeyFactory,不过这次要采用主动刷新的方式。实现DbContext动态实体,根据配置等生成动态类型来当作数据库实体使用,当配置修改时,可以调用DynamicModelCacheKeyFactory.Refresh()刷新DbContext。动态构建部分不提供,我们将在其它的地方进行讨论。publicclassSampleDbContext(DbContextOptionsoptions):DbContext(options){protectedoverridevoidOnModelCreating(

Ef Core花里胡哨系列(4) 多租户

EfCore花里胡哨系列(4)多租户当然,我们要考虑设计问题,例如,切换Schema或者改变数据库时,EfCore同样也会刷新改实体的缓存,所以,首次查询将会很慢,不适合大表。基于Schema实现多租户在我的上一篇博客中[EfCore花里胡哨系列(3)动态修改实体对应的表(分表)、多租户]中我们实现了如何分表,同理,我们可以用近似的方法来切换表的Schema,只需要一点很小的改动。publicclassSampleDbContext(DbContextOptionsoptions):DbContext(options){protectedoverridevoidOnModelCreating(

Ef Core花里胡哨系列(1) SafeDelete、ReadOnly、Audit 安全删除、只读、审计等

EfCore花里胡哨系列(1)SafeDelete、ReadOnly、Audit安全删除、只读、审计等在软件设计中,软删除是一种常见的数据管理技术,用于标记和隐藏被删除的数据,而不是永久地从数据库中删除它们。软删除通常通过在数据表中添加一个额外的标志列(例如"IsDeleted")来实现。当数据被删除时,该标志列被设置为指示删除状态的值(通常是true或1),而不是直接从数据库中删除数据记录。使用软删除的主要原因是保留数据的完整性和可追溯性。通过软删除,我们可以避免永久删除数据,从而避免意外或不可逆的数据丢失。软删除还可以帮助我们满足法律、合规性或审计要求,因为我们可以跟踪和记录数据的删除历史

如何在 EF Core 中使用乐观并发控制

什么是乐观并发控制?乐观并发控制是一种处理并发访问的数据的方法,它基于一种乐观的假设,即认为并发访问的数据冲突的概率很低。在乐观并发控制中,系统不会立即对并发访问的数据进行加锁,而是在数据被修改时,再检查是否有其他并发操作已经修改了数据。如果检测到冲突,系统再采取相应的措施来解决冲突。EFCore内置了使用并发令牌列实现的乐观并发控制,所谓的并发令牌列通常就是被并发操作影响的列。请看本文是如何在EFCore中使用乐观并发控制的……使用步骤创建一个Asp.netconsole项目,并从Nuget引用EF相关的包Microsoft.EntityFrameworkCore.SqlServerMicr

Ef Core花里胡哨系列(9) 阴影属性,有用还是没用?

EfCore花里胡哨系列(9)阴影属性,有用还是没用?EfCore中提供了一些有趣的实现,例如阴影属性!虽然大部分时候我还没有遇到应用场景,但是不妨碍我们了解一下。阴影属性是EFCore中的一个特性,它允许你在模型中定义一个属性,但是这个属性并不在对应的CLR类中。阴影属性只存在于EFCore的模型中,你可以在查询和保存数据时使用它,但是你不能直接在你的实体类中访问它。阴影属性通常用于模型和数据库中存在但在实体类中不存在的字段。例如,你可能有一个"LastUpdated"的字段在数据库中,但你并不想在你的实体类中添加这个字段。在这种情况下,你可以使用阴影属性。通常Json列我可能会用一下第二种

试试这 6 个小技巧,提升 EF Core 性能

EntityFrameWork(简称EF)以面向对象的方式操作数据库给开发人员带来了很大的便利性,但其性能问题从面世以来就一直就被广大的.NET生态开发技术人员所吐槽,然而,它真的那么不堪使用吗?试试下面这6个小技巧,瞬间极大提升EFCore性能:AsNoTracking在项目开发的时候,如果查询出来的对象不会被修改、删除等,那么在查询的时候,可以启用AsNoTracking,这样就能降低EFCore的资源占用Book[]books=ctx.Books.AsNoTracking().Take(3).ToArray();Bookb1=books[0];b1.Title="abc";EntityE

不会使用 EF Core 的 Code First 模式?来看看这篇文章,手把手地教你

EFCoreCodeFirst是什么CodeFirst是EntityFrameworkCore(简称EFCore)的一种开发模式,它允许开发人员使用纯粹的代码来定义数据模型,通过它,可以极大地提高开发效率:使用CodeFirst开发模式,你可以专注于定义领域模型和业务逻辑,而无需关注数据库的细节,能够更快地构建应用程序CodeFirst是真正地面向对象的方式来定义数据模型,包括实体类、关系、继承等,这些都让数据模型的设计更加直观和易于理解CodeFirst支持多种数据库,包括SQLServer、MySQL、PostgreSQL等,你可以在不同的数据库之间进行切换而无需修改代码CodeFirst

不会使用 EF Core 的 Code First 模式?来看看这篇文章,手把手地教你

EFCoreCodeFirst是什么CodeFirst是EntityFrameworkCore(简称EFCore)的一种开发模式,它允许开发人员使用纯粹的代码来定义数据模型,通过它,可以极大地提高开发效率:使用CodeFirst开发模式,你可以专注于定义领域模型和业务逻辑,而无需关注数据库的细节,能够更快地构建应用程序CodeFirst是真正地面向对象的方式来定义数据模型,包括实体类、关系、继承等,这些都让数据模型的设计更加直观和易于理解CodeFirst支持多种数据库,包括SQLServer、MySQL、PostgreSQL等,你可以在不同的数据库之间进行切换而无需修改代码CodeFirst