1

私は次のクラス構造を持っています:

public class Parent {
    public List<Child> Children { get; set; }
}

public class Child {

}

public class MyParent : Parent {

}

public class MyChild : Child {

}

MyParent のインスタンスを作成し、MyChild のインスタンスを Children に追加します。

MyParent を Mongo に保存するとき、タイプを「Parent」にして、各子のタイプを「Child」にします。代わりに、型を MyParent に設定し、各子を MyChild に設定すると、MyParent と MyChild を認識しない別のプログラムはそれを処理できません。

[BsonDiscriminator("Parent")] を 'MyParent' の上に追加しようとしましたが、'_t' 値を正しく設定した MyChild でも同じでしたが、デシリアライズ時に自分のアプリケーションであいまいなクラス エラーが発生しました。

何か案は?ありがとう、

4

1 に答える 1

1

2 つのクラスに同じ識別子を使用することはできません (そのため、あいまいな識別子に関するエラー メッセージが表示されていました)。

これは非常に奇妙な状況です。クラス構造を他の言語で行っているものと一致させた方がよいのではないでしょうか?

いずれにせよ、基本クラスに別の識別子を使用することであいまいさを解決できます (おそらくデータベースには表示されません...)。

[BsonDiscriminator("BaseParent")]
public class Parent
{
    public ObjectId Id { get; set; }
    public List<Child> Children { get; set; }
}

[BsonDiscriminator("BaseChild")]
public class Child
{

}

[BsonDiscriminator("Parent")]
public class MyParent : Parent
{

}

[BsonDiscriminator("Child")]
public class MyChild : Child
{

}
于 2012-08-31T02:40:00.643 に答える