保存前设定值 [英] Set Value before save
问题描述
我想知道是否有任何方法可以为实体保存设置值?
因为我正在处理多租户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条目:
公共替代int SaveChanges()
{
foreach(ChangeTracker.Entries()中的varentityEntry)//迭代所有已进行的更改
{
if(entityEntry.Entity是Order order)
{
if(entityEntry.State == EntityState.Added)//如果要在添加订单时更新TenantId
{
order.TenantId = _tenantProvider.GetTenantId();
}
else if(entityEntry.State == EntityState.Modified)//如果要在修改Order后更新TenantId,则
{
order.TenantId = _tenantProvider.GetTenantId( );
}
}
}
返回base.SaveChanges();
}
当然,这需要将租户提供者注入您的上下文中。 / p>
I was wondering if there is any way to set a value to an entity onsave?
Because I'm working on a multi tenant web application and I would like to set the the current tenant ID (through simple DI service).
I tried using HasDefaultValue()
in Fluent API, however this will try to convert to a SQL function. So this doesn't work for me.
builder.Entity<Order>( )
.HasQueryFilter(p => p.TenantId == _tenantProvider.GetTenantId())
.Property(p => p.TenantId)
.HasDefaultValue(_tenantProvider.GetTenantId());
Any suggestions are greatly appreciated.
You could override the DbContext.SaveChanges() method and iterate the ChangeTracker entries:
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();
}
Of course, this needs the tenant provider to be injected into your context.
这篇关于保存前设定值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!