gpt4 book ai didi

c# - 在转到 SQL Server 之前,如何在 EF Core 2.0 中修改查询?

转载 作者:太空狗 更新时间:2023-10-29 17:51:32 25 4
gpt4 key购买 nike

我对波斯语有这种需求,首先应该从字符的角度对查询进行清理/规范化。

应该使用波斯语“”而不是阿拉伯语“ي”。

在 EF 6 中,我有一个拦截器可以实现 IDbCommandInterceptor 并使用下面这行简单的代码更改原始 SQL 查询:

        command.CommandText = command.CommandText.SafePersianEncode();

这非常有益,可以降低成本、提高一致性、提高质量并避免数据清理要求。

当我们迁移到 EF Core 2.0 时,我们意识到 interceptors are not there , 而且似乎它们也不会在未来的版本中实现。

因为这是一个非常合理的要求,并且拦截流的能力是一个众所周知的模式(就像 Angular 拦截器在一个地方修改所有 HTTP 请求/响应),从架构的角度来看,它有助于管理交叉- 以一种整洁的方式切割关注点,我们现在应该做什么?

在 EF Core 2.0 中进入 SQL Server 之前,是否有一种全局方式(或任何方式)可以修改 RAW SQL 查询?

最佳答案

看看这个

https://blogs.msdn.microsoft.com/dotnet/2016/09/29/implementing-seeding-custom-conventions-and-interceptors-in-ef-core-1-0/

您可以覆盖save changes以在保存到数据库之前检测、修改更改

例子:

 public override int SaveChanges(bool acceptAllChangesOnSuccess)
{
ChangeTracker.DetectChanges();

foreach (var entry in ChangeTracker.Entries().Where(e => e.State == EntityState.Added))
{
//modify entry.Entity here
}

ChangeTracker.AutoDetectChangesEnabled = false;
var result = base.SaveChanges(acceptAllChangesOnSuccess);
ChangeTracker.AutoDetectChangesEnabled = true;

return result;
}

编辑:更改所有已修改字符串属性的简单示例

public override int SaveChanges(bool acceptAllChangesOnSuccess)
{
ChangeTracker.DetectChanges();

foreach (var entry in ChangeTracker.Entries()
.Where(e => e.State == EntityState.Added ||
e.State == EntityState.Modified))
{
//modify entry.Entity here
foreach (var prop in entry.Properties)
{
if ((entry.State == EntityState.Added ||
prop.IsModified) && prop.OriginalValue is string)
prop.CurrentValue = prop.CurrentValue + "edited";
}
}

ChangeTracker.AutoDetectChangesEnabled = false;
var result = base.SaveChanges(acceptAllChangesOnSuccess);
ChangeTracker.AutoDetectChangesEnabled = true;

return result;
}

此示例将在添加或编辑到 xxedited 时更改任何 string 属性并保存到数据库,您可以在此处根据 旧值 轻松构建自定义规则code> ,property type 或访问实体本身。等等

关于c# - 在转到 SQL Server 之前,如何在 EF Core 2.0 中修改查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47473146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com