2016-07-18 8 views
4

RavenDBに動的プロパティを持つオブジェクトを保存しようとしたときに問題が発生しましたRavenDBに動的プロパティを持つC#オブジェクトを格納する方法は?

保存しようとしているオブジェクトがオーダーを表しています。注文は注文ラインのリストが含まれていますので、次のOrderクラスを想像:

public class Order { 
    public int Id { get; set; } 
    public List<Orderline> Orderlines { get; set; } 
} 

そしてオーダーラインクラスビーイング:

public class Orderline { 
    public Product Product { get; set; } 
    public int Quantity { get; set; } 
    public dynamic Attributes { get; set; } 
} 

私が保存しようとしているオブジェクト(私はJSONでそれを表示します);

{ 
    "Id": 0, 
    "Orderlines": [ 
     { 
      "Product": { 
       "Id": 0, 
       "Name": "Some product" 
      }, 
      "Quantity": 1, 
      "Attributes": { 
       "color": "Red" 
      } 
     } 
    ] 
} 

...それはOrder.Orderlines[0].Attributes.colorの値プロパティが設定されていないことを

{ 
    "Id": 0, 
    "Orderlines": [ 
     { 
      "Product": { 
       "Id": 0, 
       "Name": "Some product" 
      }, 
      "Quantity": 1, 
      "Attributes": { 
       "$type": "Newtonsoft.Json.Linq.JObject, Newtonsoft.Json", 
       "color": { 
        "$type": "Newtonsoft.Json.Linq.JValue, Newtonsoft.Json", 
        "$values": [] 
       } 
      } 
     } 
    ] 
} 

注意として何らかのエラーに
RavenDB店Orderオブジェクトをスローしません保存

私がしようオブジェクトを私のC#Orderオブジェクトにシリアル化します。次の例外があります。

タイプ のオブジェクトをキャストすることができません 'Raven.Imports.Newtonsoft.Json.Utilities.CollectionWrapper`1は[Newtonsoft.Json.Linq.JToken]' 'Newtonsoft.Json.Linq.JValue' と入力します。

私は間違っていますが、どうすればこのオブジェクトをRavenDBデータベースに保存して取得できますか?

+0

http://stackoverflow.com/questions/24208510/ravendb-dynamic-objects関連性があります – stuartd

+0

ダイナミックが必要なのはなぜですか?その解決策は、ダイナミクスを使用しないでください – Liam

+0

@Liam私はカスタムプロパティを含むことができる汎用のOrderlineオブジェクトを用意しようとしています。これは関連性があります。将来的には、複数の製品で、アプリケーション固有のカスタム属性をAttributesプロパティ(この場合は色)に保存できる同じAPIを使用するようにしたいので、 – Bryandh

答えて

2

「ダイナミック」タイプのダイナミックプロパティを明示的に格納するだけでは十分ではありませんでした。私がAttributesプロパティにExpandoObject型を与えたとき、RavenDBはAttributesプロパティを通常のJSONとして保存しました($ typeと$ valuesを使わずに、きれいになります)

RavenDBデータベースから戻すと、 。

Razorビューでプロパティを表示しようとすると、ExpandoObjectプロパティを動的(「ダイナミック」など)にキャストしてください。

2

実際に属性に保存するタイプは何ですか? 一般に、ExpandoObjectのような実際には動的なものを使用します。

関連する問題