RavenDbのドキュメントには次のように記載されています。
数値またはGUIDIDプロパティがサポートされており、シームレスに機能します。この場合、RavenDBは、内部文字列IDを、エンティティに表示されている数値またはGUID値に自動的に変換します。
次のオブジェクトを保存しました。
class A
{
public Guid Id { get; set; }
public Guid BId { get; set; }
}
class B
{
public Guid Id { get; set; }
public string Name { get; set; }
}
次に、次のプロジェクションを作成しました。
class AB
{
public Guid Id { get; set; } // This should be the Id of A
public Guid BId { get; set; } // This should be the Id of B
public string BName { get; set; } // This should be the name of B
}
投影を作成するために、次のインデックスを作成しました。
class MyIndex : AbstractIndexCreationTask<AB>
{
public MyIndex()
{
Map = docs =>
from d in docs
select new
{
d.Id,
d.BId,
BName = string.Empty
};
TransformResults = (database, results) =>
from r in results
let b = database.Load<B>("bs/" + r.BId.ToString())
select new
{
r.Id,
r.BId,
BName = b.Name
};
}
}
次のクエリを使用する場合:
session.Query<AB, MyIndex>().FirstOrDefault(t => t.Id == guid);
この例外が発生します:
値「bs/cc0a65ae-dd36-4437-8a57-fa20b91eeef7」をタイプ「System.Guid」に変換中にエラーが発生しました。パス'Id'。
質問:
Id
これは、私のGuidではなく、そこにある文字列であるため、私の投影での変換が原因です。ただし、これを省略してもIDは返されません。私は何をしなければなりませんか?"bs/" + r.BId.ToString()
関連するドキュメントをロードするには、文字列の作成を使用する必要があります。これを行う必要がない方法はありますか?docタグを解決するような関数はありますか?ドキュメントタグを完全に取り除く一般的な方法はありますか?
私の制約。
Guidを生成しますが、RavenDbに生成させることはできません。実際のドキュメントIDは文字列であることは知っていますが、実際には自分で作成したGUIDを使用する必要があります。Id
私は自分のエンティティのプロパティを所有したいと思います。
Raven.Client1.0.972を使用しています