使用SPMETAL我生成了一个C#文件,允许我使用LINQ来访问Sharepoint对象。
但是,使用非常简单的查询会产生一个奇怪的错误:
指定的演员表无效。
堆栈追踪:
at Set__zleceniaTrigger(Object,Object) 在Microsoft.SharePoint.Linq.StaticPropertyMap.SetToEntity(对象实体,对象值) 在Microsoft.SharePoint.Linq.SPItemMappingInfo.MaterializeEntity [TEntity](DataContext dc,SPDataList list,SPListItem item,SPItemMappingInfo itemMappingInfo,JoinPath joinPath) 在lambda_method(ExecutionScope,SPListItem) at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Collections.Generic.List
1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source) 在C:\ XXXXXXXXX \ QuickModify \ Program.cs中的QuickModify.Program.Main(String [] args):第42行 在System.AppDomain._nExecuteAssembly(Assembly assembly,String [] args) 在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态) 在System.Threading.ThreadHelper.ThreadStart()
查询本身如下所示:
SPEntitiesDataContext ctx = new SPEntitiesDataContext("http://localhost:1080");
var tasks = ctx.Zlecenia.ToList();
当然,这不是最优的查询,但是使用.Where只过滤所需记录也会返回相同的错误。
我发现我可以使用.Select(z => new ZlecenieItem(){ ColumnName = z.ColumnName, ... })
选择特定的列,但是我无法使用它来选择查找列,因为我得到以下错误(即使我这样只选择一个列):
查询使用不受支持的元素,例如对多个列表的引用,或使用EntityRef / EntitySet对完整实体的投影。
这是有问题的,因为有时我需要从其他列表中获取值,并且使用查找值会很好。
我是否只是在MS产品中找到了我的第一个真正的错误,或者(感觉更有可能)我做错了什么?
答案 0 :(得分:1)
虽然我仍然不确定为什么以上不起作用,但我设法通过向SPmetal添加自定义配置文件以生成引用来解决问题。
这表明默认的SPmetal配置可能并不总是有效。