gpt4 book ai didi

c# - 保存前设置值

转载 作者:行者123 更新时间:2023-11-30 15:15:13 25 4
gpt4 key购买 nike

我想知道是否有任何方法可以为实体 onsave 设置一个值?
因为我正在开发一个 Multi-Tenancy Web 应用程序,所以我想设置当前租户 ID(通过简单的 DI 服务)。

我尝试在 Fluent API 中使用 HasDefaultValue(),但这会尝试转换为 SQL 函数。所以这对我不起作用。

builder.Entity<Order>( )
.HasQueryFilter(p => p.TenantId == _tenantProvider.GetTenantId())
.Property(p => p.TenantId)
.HasDefaultValue(_tenantProvider.GetTenantId());

非常感谢任何建议。

最佳答案

您可以覆盖 DbContext.SaveChanges()方法并迭代 ChangeTracker 条目:

public override int SaveChanges()
{
foreach (var entityEntry in ChangeTracker.Entries()) // Iterate all made changes
{
if (entityEntry.Entity is Order order)
{
if (entityEntry.State == EntityState.Added) // If you want to update TenantId when Order is added
{
order.TenantId = _tenantProvider.GetTenantId();
}
else if (entityEntry.State == EntityState.Modified) // If you want to update TenantId when Order is modified
{
order.TenantId = _tenantProvider.GetTenantId();
}
}
}
return base.SaveChanges();
}

当然,这需要将租户提供者注入(inject)到您的上下文中。

关于c# - 保存前设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52954659/

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