我正在尝试从WCF客户端更新实体,如下所示:
Ctxt.MergeOption = MergeOption.NoTracking;
var q = Ctxt.Customers.Where(p => p.MasterCustomerId == "JEFFERSON").Select(o => o);
//DataServiceCollection<Customer> oCustomers = new DataServiceCollection<Customer>(q, TrackingMode.None);
DataServiceCollection<Customer> oCustomers = new DataServiceCollection<Customer>(q);
oCustomers[0].FirstName = "KEFFERSON";
//Ctxt.SaveChanges(SaveChangesOptions.ReplaceOnUpdate);
//ctxt.SaveChangesDefaultOptions = SaveChangesOptions.ReplaceOnUpdate;
Ctxt.SaveChanges();
当我尝试保存修改后的实体时,它首先尝试使用select查询(到数据库)加载该实体,然后向数据库发出update语句。
在我的情况下,我只是希望在数据库中直接更新实体而不先获取它。我不介意它是否覆盖数据库中的数据
我在WCF服务上尝试了以下内容:
protected override EF.Model.DataModel.PersonifyEntities CreateDataSource()
{
var ctxt = new EF.Model.DataModel.PersonifyEntities();
ctxt.Customers.MergeOption = System.Data.Objects.MergeOption.NoTracking;
ctxt.ContextOptions.ProxyCreationEnabled = false;
ctxt.ContextOptions.LazyLoadingEnabled = false;
return ctxt;
}
但是,没有运气。任何人都可以帮我吗?
答案 0 :(得分:0)
对于WCF DataServices,客户端只能更新它跟踪的实体。因此,必须先将实体下载到客户端,然后才能进行任何更改并将其保存回来。这就是为什么你在更新之前看到fetch(我假设这是你在特定实体中看到的第一次获取)的原因。希望这会有所帮助。