0

SPMETAL を使用して C# ファイルを生成し、LINQ を使用して Sharepoint オブジェクトにアクセスできるようにしました。

ただし、非常に単純なクエリを使用すると、奇妙なエラーが発生します。

指定されたキャストは無効です。

スタック トレース:
Set__zleceniaTrigger(Object , Object ) で Microsoft.SharePoint.Linq.StaticPropertyMap.SetToEntity(Object entity, Object value) で Microsoft.SharePoint.Linq.SPItemMappingInfo.MaterializeEntity[TEntity](DataContext dc, SPDataList list, SPListItem item, System.Linq.Enumerable.WhereSelectEnumerableIterator 2.MoveNext() at System.Collections.Generic.List1..ctor(IEnumerableの lambda_method(ExecutionScope 、 SPListItem ) で SPItemMappingInfo itemMappingInfo、JoinPath joinPath)1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable1 ソース) C:\XXXXXXXXX\QuickModify\Program.cs: 42 行目の QuickModify.Program.Main(String[] args) at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at 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 製品で初めての本物のバグを見つけたのでしょうか、それとも (もっと可能性が高いのは) 何か間違ったことをしているのですか?

4

1 に答える 1

1

上記の方法がうまくいかなかった理由はまだわかりませんが、カスタム構成ファイルを SPmetal に追加して参照を生成することで問題を解決できました。

これは、デフォルトの SPmetal 構成が常に機能するとは限らないことを示唆しています。

于 2010-11-25T13:57:32.053 に答える