2011-12-09 6 views
2

Linq2SharePointを使用して複数のコンテンツタイプのアイテムを含むことができるSharePointリストに新しいレコードを挿入する際に問題があります。LinqToSharepoint複数のコンテンツタイプを含むリストへの挿入

マイリストとそのコンテンツタイプは機能によって作成され、受信者のコンテンツタイプバインディングはいくつかのコンテンツタイプに対して作成されます。これらは、実際には、相互に継承する型のツリーであり、すべてが組み込みItemコンテンツ型から派生した1つのカスタムコンテンツ型から派生しています。

私のデータコンテキストはSPMetalによって生成され、これからカスタムT4テンプレートを使用してリポジトリレイヤが作成されます。私はLinq2SharePointを使って名前付きリストにアクセスするのではなく、コンテンツタイプのリポジトリを作成します。確かに問題のリストは、SPWebの機能を有効にすることで作成することができるため、コンパイル時には存在しないため、データコンテキストでは不明です。

MSDNでは、複数のコンテンツタイプのリストを処理するために、SPMetalは、この性質のリストに最も近い基本コンテンツタイプを使用するデータコンテキストを生成すると説明しています。コンテンツタイプのエンティティを生成するセクションを参照してください。http://msdn.microsoft.com/en-us/library/ff798478.aspx

これに基づいて、基本コンテンツタイプを使用してリストにアクセスします。そして、私のリストはXXXFooコンテンツタイプのいずれかの項目を含めることができますし、データコンテキストがEntityList<Foo>を使用してアクセスする

Item 
    Foo : Item 
    BlueFoo : Foo 
    RedFoo : Foo 
     BrightRedFoo : RedFoo 
     DarkRedFoo : RedFoo 
    GreenFoo : Foo 

:たとえば、次のコンテンツタイプの階層を想定しました。

これは、派生型ではなくすべてFoo型であるにもかかわらず、リストから項目を読み込むのには完全に機能します(実際の問​​題はありませんが、いくつかのjiggeryを使用するとItemへのICustomMapping拡張が含まれます)。生成されたリポジトリレイヤは、基になるSPListItemにアクセスし、必要に応じて派生型にダウンキャストすることもできます)。

問題は、リストに項目を書き込もうとしたときに発生します。まず、この目的のために特定のEntityListを作成しようとしました。 EntityList<RedFoo>しかし、これは例外を引き起こしました。だから私はFooタイプをListsコンテンツタイプにも追加し、EntityList<Foo>を使ってアイテムを追加しようとしましたが、これも同じ例外を引き起こします。

両方のインスタンスで例外は同じですが、エラーメッセージは「マッピングに関連付けられた列が削除/名前変更されました」です。 Googleの検索では、このメッセージ(omourad.blogspot.com/2010/06/columns-associated-with-mappings-have.html)に遭ったひとりの幸せな人物が見つかりましたが、彼の問題のリストに間違った名前が付けられていました。これは私の問題ではありません。

WWWをトロールすると、複数のコンテンツタイプを持つSPListsについての議論がほとんどなくなり、Linqとこの問題に関するものはほとんどありません。これはCodePlex http://sporm.codeplex.com/にありますが、ダウンロード数は0ですが、2009年以降は静かです...

私のコードに問題がないことを確認するために、リポジトリレイヤーを使用するのではなく、データコンテキストから直接アクセスしようとしました。私はその機能を有効にしてWebからデータコンテキストを再生成しました。そのため、同期が外れていないことを確認できます。

何か不足していますか?これは私が何とかして逃した累積的な更新によって修正されますか?確かに私はこれをやろうとした唯一の人ではないのですか?私はあなたが問題を抱えているときとほとんど同じくらい寂しいと感じています。あなたが見つけることができる唯一のオンラインリファレンスはStackOverflow tumbleweedの質問です。これを止めることができる誰かがそこにいるはずです。

+0

こんにちは、 Fooの問題をどのように解決したのでしょうか?私はあなたがL2SPでこれをモデル化するはずであることについて混乱しています、そして、あなたが "いくつかのジジを使って"それを解決したようです。 型の問題が解決する限り、基本型リストにサブタイプを追加できました。試してみるとどのような例外が投げられますか? –

+0

ここに私がそれについて掲示した質問のリンク http://stackoverflow.com/questions/9386437/linq-to-sharepoint-multiple-content-types-for-a-single-list –

+0

こんにちはジェイソン。私はICustomMappingを使用して、他の質問のL2SPベースエンティティから派生型に解決できるようにするために必要な "ジグザグ"を提供するための説明とコードサンプルを投稿しました。それが役に立てば幸い。私がL2SP経由で挿入する際の問題については、ContentTypesにいくつかの変更を加えたときに消えてしまったように、これらをあまり修正しませんでした。周囲を掘り下げた後は、2010年にInherits属性の実装に少し不一致がありますが、自分自身の不適法性の貢献を完全に排除することは公正ではありません。 – robwilliams

答えて

0

[ここタンブルウィードの挿入グラフィック]

一見それは本当に問題ではありませんように私はこの問題に明確な答えを持っていない、または私が持っていた少なくとも症状が唯一の症状でした。それとも、SharePointの世界では、「Do not do X」や「You should do Y」と言っても間違いないと思われる明確な答えがないので、明確な答えはありません。それ。この精神の中で、私は次の不適切に一般化されていない一般化をサポートしていません。

ContentTypesに 'Inherits'属性または 'Overwrite'属性を使用しないでください。

いいですね。ドキュメントはよく見えます。その機能は面倒な「タイトル」フィールドを取り除くなどの点で素晴​​らしいものですが、実際には機能していないようです。私はなぜそれが分からないのですか?また、私はSharePointチームが私に与えることができる最高のものはどちらもないと推測しています。「エラーが発生しました。もう一度やってみてください。私が知っていることは、これらの2つの属性がなく、非常に望ましい効果があることで、すべてがうまく機能するということです。

関連する問題