2

私は、DataServicesを新しいLightSwitch2.0ODataデータソースと連携させるのに苦労してきました。OData 3.0がまだサポートされていないことに気づき、2.0バージョンにフォールバックする必要がありました。

私のデータコンテキストは、ODataアクセスを有効にするためのいくつかのxmlシリアル化オブジェクトのラッパーにすぎません。この「魔法」はReflectionProviderを使用して発生し、すべてのCRUD操作に関して正常に機能します。

LightSwitchでこのサービスを使用しようとすると問題が発生し、すべてのエンティティの関連付けが間違っていることに気付きます。

私の状況は、Microsoftのサンプルコードを見るのとまったく同じです。

したがって、このデータモデルを使用すると:

[DataServiceKeyAttribute("OrderId")]
public class Order
{
    public int OrderId { get; set; }
    public string Customer { get; set; }
    public IList<Item> Items { get; set; }
}
[DataServiceKeyAttribute("Product")]
public class Item
{
    public string Product { get; set; }
    public int Quantity { get; set; }
}

Order[1-*]アイテム間の「1対多」の関係は明らかです。しかし、このサービスのxmlメタデータを見ると、関連付けは「多対多」として宣言されています。

<Association Name="Order_Items">
    <End Type="WEBfactory.StreamInsight.Adapters.Carel.DataServices.Order" Multiplicity="*" Role="Order"/>
    <End Type="WEBfactory.StreamInsight.Adapters.Carel.DataServices.Item" Multiplicity="*" Role="Items"/>
</Association>

さて、これは「サービス参照」クライアントを使用する場合はそれほど気になりませんが、LightSwitchは「多対多」の関係をサポートしていないため、このサービスを利用しようとすると常に警告が表示され、関係はインポートされません。手動で定義することもできません。

リフレクションプロバイダーを使用してリレーションシップタイプを適用する方法を知っている人はいますか?

ありがとう!!

4

2 に答える 2

1

この場合の注文とアイテムの関係は実際には多くあります:多く-提案したとおりに1:多くの場合、アイテムは1つの注文にしか存在できません。

そうは言っても、対応するプロパティをItemクラスに追加することで、1:*の関係を作成できます。

[DataServiceKeyAttribute("Product")]
public class Item
{
    public string Product { get; set; }
    public int Quantity { get; set; }
    public Order Order { get; set; }
}

その結果、次の$ metadataが発生し、同じ問題が発生する場合と発生しない場合があります。

<Association Name="Order_Items">
  <End Type="Scratch.Web.Order" Multiplicity="*" Role="Order"/>
  <End Type="Scratch.Web.Item" Multiplicity="*" Role="Items"/>
</Association>
<Association Name="Item_Order">
  <End Type="Scratch.Web.Order" Multiplicity="0..1" Role="Order"/>
  <End Type="Scratch.Web.Item" Multiplicity="*" Role="Item"/>
</Association>

これはおそらくReflectionプロバイダーの制限であるため(そうでないことが判明した場合はこの回答を編集します)、今日の唯一の回避策はEFプロバイダーまたはカスタムプロバイダーのいずれかを使用することです。

于 2012-07-11T22:30:14.627 に答える
0

WCF RIAサービスを次のように機能させます:多対多の関係を作成する方法 http://blogs.msdn.com/b/lightswitch/archive/2010/12/16/how-to-create- a-多対多の関係-andy-kung.aspx

于 2012-07-11T16:16:18.480 に答える