2

mongo c# ドライバーに問題があります。私はそのようなクラスを持っています:

class MongoEntity<T>
{
    public ObjectId Id {get; set;}
    public DateTime CreatedAt { get; set; }
    public DateTime UpdatedAt { get; set; }
    public int Version { get; set; }
    public T Entity { get; set; }
}

そして、エンティティをデータベースにシリアル化する際に、次のようなドキュメントがあります。

"_id" : "510654cf33d22e1774d5a2a9",
"CreatedAt" : {
    "DateTime" : ISODate("2013-01-28T10:37:02.932Z"),
    "Ticks" : NumberLong("634949662229321756")
 },
 "UpdatedAt" : {
    "DateTime" : ISODate("2013-01-28T10:37:02.932Z"),
    "Ticks" : NumberLong("634949662229321756")
 },
 "Version" : 1,
 "Entity" : {
    "EntityKey" : "tom@gmail.com",
    "Password" : "ICy5YqxZB1uWSwcVLSNLcA==",        
    "Email" : "tom@gmail.com",
    "Name" : "Tom Anderson"
 }

私が本当に欲しいのは、次のように、ドキュメント内のエンティティ オブジェクトのすべてのプロパティを MongoEntity オブジェクトのプロパティと同じレベルにすることです。

"_id" : "510654cf33d22e1774d5a2a9",
"CreatedAt" : {
    "DateTime" : ISODate("2013-01-28T10:37:02.932Z"),
    "Ticks" : NumberLong("634949662229321756")
 },
 "UpdatedAt" : {
    "DateTime" : ISODate("2013-01-28T10:37:02.932Z"),
    "Ticks" : NumberLong("634949662229321756")
 },
 "Version" : 1,
 "EntityKey" : "tom@gmail.com",
 "Password" : "ICy5YqxZB1uWSwcVLSNLcA==",        
 "Email" : "tom@gmail.com",
 "Name" : "Tom Anderson"

エンティティ埋め込みオブジェクトなし。これを最も簡単な方法で実装するにはどうすればよいですか?

PS私が本当に探しているのは、ドライバーの構成またはカスタムシリアライザーの作成、おそらく動的な回避策です。現在のクラス構造を変更したくありません Enteties <-> MongoEntity

助けてくれてありがとう。

4

2 に答える 2

4

組み込みのシリアライザーを構成して、必要なドキュメント形式を生成する方法はありません(エンティティフィールドが1レベル上に表示されます)。

カスタムシリアライザーを作成する必要がありますが、<T>ごとに新しいシリアライザーを作成するか、任意の<T>で機能する高度なシリアライザーを作成する必要があるため困難です。

WiredPrairieの提案(個人:MongoEntityBase)が推奨されるソリューションです。

于 2013-01-30T15:43:15.847 に答える
3

必要な DB フィールドをすべて含む基本型のサブクラスを使用するだけです。

public class abstract MongoEntityBase
{
    public ObjectId Id {get; set;}
    public DateTime CreatedAt { get; set; }
    public DateTime UpdatedAt { get; set; }
    public int Version { get; set; }
}

次に、それを使用します。

public class Person : MongoEntityBase
{
    public string Email { get; set; }
    public string Name { get; set; }
}

10gen が提供する MongoDB C# ドライバーは、そのパターンで正常に動作します。

于 2013-01-28T13:12:45.247 に答える