【发布时间】:2017-12-03 23:38:17
【问题描述】:
我们正在尝试在基于 Web API 的应用程序中实现多租户架构。我们在 SQL Server 中使用 RLS,Subscription_Id 是分配给每个订阅者的内容。我们已经在 SQL Server 中为 Subscription_Id 设置了默认值,所以当我调用 db.SaveChanges() 时,我只想忽略从 API 到 SQL Server 的 Subscription_Id。
我尝试在SaveChanges() 覆盖方法中设置Subscription_Id 的值,但卡在这里。
public override int SaveChanges()
{
var objectType = selectedEntity.CurrentValues.ToObject();
Guid value = new Guid("54E720FC-616B-44C6-8485-5F2185FD7B4C");
PropertyInfo propertyInfo =
objectType.GetType().GetProperty("Subscription_Id");
ChangeTracker.Entries().FirstOrDefault()
.CurrentValues.ToObject().GetType()
.GetProperty("Subscription_Id")
.SetValue(objectType, Convert.ChangeType(value, propertyInfo.PropertyType), null);
return base.SaveChanges();
}
【问题讨论】:
-
为什么要更改或覆盖 Subscription_Id ?我认为这是一个主键/唯一键。
-
没有订阅 ID 用于订阅者,因此与订阅者相关的所有数据都与订阅者 ID 一起保存
-
为什么要在 savechanges() 中设置 subscriptionId 的值??
-
因为我在 sql 中使用行级安全性,并且我已设置订阅 ID 以检查那里并将订阅 ID 的默认值设置为当前上下文值,但实体框架将订阅 ID 发送为null ,我只想忽略订阅 id 或在 savechanges 上发送值,因为所有表都将具有该列
标签: entity-framework asp.net-web-api db-first