DbContext 中是否跟踪实体框架更改

问题描述 投票:0回答:0

我正在编写一个 Blazor(服务器端)应用程序,并得出结论,我希望为 CrUD 操作启用更改跟踪,并为 cRud 操作关闭更改跟踪。

我是否应该创建两个 DbContext 类,一个返回一个启用更改跟踪的 DbContext,另一个关闭它?这将指向同一个数据库。

或者拥有一个启用了更改跟踪的 DbContext 类是否更好。然后当我需要数据来显示它时,我使用 context.Books.AsNoTracking()... 为该查询关闭它。

为什么

我认为更改跟踪对 CrUD 操作有意义有两个原因。首先,因为这将避免由于我忘记在需要的地方调用

Add()
而导致的错误。其次,因为
Update()
重写所有内容而更改跟踪只写更改的内容。

我认为没有跟踪对于 cRud 操作是有意义的,因为它消除了在没有任何变化时跟踪变化的开销。这是安全的,因为我只会对本质上是只读信息视图的网页执行此操作。

因此,在为 cRud 案例获得性能的同时,保持它的安全和简单。

两个 DbContext

我还没有尝试过,但我假设我可以进行以下调用,然后以某种方式选择我想要的上下文。我不知道这是否可能,这是我在这里要问的一部分。

builder.Services.AddDbContextFactory<LouisHoweDbContext>( options =>
    options.UseSqlServer( builder
        .Configuration
        .GetConnectionString("LouisHoweDb")
    )
    .EnableSensitiveDataLogging()
);
    
builder.Services.AddDbContextFactory<LouisHoweDbContext>( options =>
    options.UseSqlServer( builder
        .Configuration
        .GetConnectionString("LouisHoweDb")
    )
    .UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking)
    .EnableSensitiveDataLogging()
);
entity-framework entity-framework-core
© www.soinside.com 2019 - 2024. All rights reserved.