我通过基于.Net 4.0中的WCF DataServices的OData源从我的数据库中公开实体。到目前为止,一切都已完全开放,但我现在正在限制实体可能的操作。
我有一个Order
对象具有这些属性(以及其他):
ID
Name
Amount
CustomerID
我希望能够将所有值公开给服务的使用者,并允许他们更新它们。但是,我不希望他们能够更新实体的CustomerID
属性。
我怎样才能做到这一点?我查看了QueryInterceptors,但我还没有找到阻止更新调用或修改请求的正确方法。
答案 0 :(得分:1)
您可以使用ChangeInterceptor
执行此操作[ChangeInterceptor("Orders")]
public void OnChangeOrders(Order order, UpdateOperations operations)
{
if (operations == UpdateOperations.Change)
{
//Get the record as it exists before the change is made
var oldValue = CurrentDataSource.ChangeTracker.Entries<Order>().First();
//You can compare the various properties here to determine what, if anything,
//has changed, or just write over the property if you want
order.CustomerID = oldValue.Entity.CustomerID;
}
}