TEntity
はGeneric BaseClassであり、BaseClass LocationEntity
およびZoneEntity
から派生した2つのクラスがあります。返されたドキュメントをDocumentDBから厳密な型チェックを使用してC#クラスに変換します
以下はLocationEntity
ですが、response.Resource
はZoneEntity
のオブジェクトを返しています。 TEntity
にDocuementDB Document
を変換しながら、厳密な型チェックを実行する方法
public async Task<TEntity> GetById(string id)
{
TEntity readObj = null;
try
{
var response = await client.ReadDocumentAsync(UriFactory.CreateDocumentUri(dbName, collectionName, id),
requestOptions);
readObj = (TEntity) (dynamic) response.Resource; // it's ignoring the properties which does not match with TEntity (LocationEntity)
}
catch (Exception ex)
{
throw ex;
}
return readObj;
}
?
response.Resource
のタイプがLocationEntity
でない場合、例外などを投げたいです。
'ReadDocumentAsync'は' ResourceResponse 'を返します。あなたのクラスは 'Document'から継承していると思いますか?もしそうなら、なぜあなたは 'TEntity'にジェネリック制約を使用していませんか?いずれにしても、その「動的な」キャストは外れて見える。代わりに 'is TEntity'や' as TEntity'を使うことはできませんか?また、 'throw ex;'は例外のスタックトレースを保持しないことに注意してください - 'throw;'は例外です。 –
私はDocumentから継承していません。 readObj = response.TEntityがnullを返すときのリソース。元情報をありがとう。 – JerryGoyal
次に、 'ReadDocumentAsync'がどのようなドキュメントを返すのか、そしてそれを通常' LocationEntity'にどのように変換しますか? 「動的」にキャストを追加してからターゲットタイプにキャストを追加するだけで、魔法のように動作することはありません。 –