我目前正在使用来自 C#(一个 asp.net mvc4 应用程序)的 WCF 数据服务来使用来自 Sharepoint 2010 的信息。
使用常规 Sharepoint 列出项目时,将更改保存到上下文时,新项目的 id 会自动填充到原始对象上。意义:
SomeContext context = /* creation of the context*/;
var someEntity = new SomeEntity {...};
context.AddToSomeEntityItems(someEntity);
context.SaveChanges();
var newId = someEntity.Id; //this will have the new id
但是,如果您正在创建的是文档库的项目,则 id 似乎不会在已保存的实体上更新。例如:
SomeContext context = /* creation of the context*/;
var someOtherEntity = new SomeOtherEntity {...};
Stream data = /* some stream*/;
context.AddToSomeOtherEntityItems(someOtherEntity);
context.SetSaveStream(someOtherEntity, data, true, "SomeMIMEType", "SomeSlugPath");
context.SaveChanges();
var newId = someOtherEntity.Id; //this will instead always have 0
我最初认为这是 WCF 数据服务的第一个版本中的一个错误,所以我更新到最新版本5.4.0。但行为似乎是相同的。
我宁愿避免在重负载期间最终可能失败的奇怪查找,例如.OrderByDescending(x => x.Id).First()
用于获取最近创建的项目。
当使用 Fiddler 查看实际的网络流量时,我可以看到二进制数据的初始上传实际上确实返回了项目的信息及其 ID。如果我在保存更改之前使用SetLink配置与该项目的其他关系,它们会正确链接,因此上下文会相应地处理该值。
当项目用于文档库时,有什么方法可以让 WCF 数据服务更新实体上的 ID?