TEntity — это Generic BaseClass, и есть два класса, производных от BaseClass LocationEntity и ZoneEntity.
Ниже GetById() имеет контекст LocationEntity, но response.Resource возвращает объект ZoneEntity.
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;
}
Как выполнить строгую проверку типов при преобразовании DocumentDB Document в TEntity?
Я хочу создать исключение или что-то в этом роде, когда response.Resource не относится к типу LocationEntity.
ReadDocumentAsyncвозвращаетResourceResponse<Document>. Я предполагаю, что ваши классы наследуются отDocument? Если да, то почему вы не используете общее ограничение дляTEntity? В любом случае, этот составdynamicвыглядит неуместно. Разве вы не можете вместо этого использовать конструкциюis TEntityилиas TEntity? Также обратите внимание, чтоthrow ex;не сохраняет трассировку стека исключения, аthrow;сохраняет. - person Pieter Witvoet   schedule 18.04.2017ReadDocumentAsyncи как вы обычно конвертируете его вLocationEntity? Простое добавление приведения кdynamic, а затем к вашему целевому типу волшебным образом не сработает... - person Pieter Witvoet   schedule 18.04.2017GetById<LocationEntity>(...), но я спрашиваю: как бы вы обычно (без дженериков) конвертировалиDocumentвLocationEntity? - person Pieter Witvoet   schedule 18.04.2017DocumentреализуетIDynamicMetaObjectProvider, и именно так приведение кdynamicпозволяет преобразовать его в любой тип, в который вы хотите. Я не могу найти много информации о том, как должно работать это преобразование, но, по-видимому, оно довольно снисходительно, когда речь идет об отсутствующих или несовпадающих полях. Если нет способа контролировать это поведение, вам, вероятно, придется написать собственный код, чтобы проверить, действительно ли документ содержит все поля, требуемые целевым типом. - person Pieter Witvoet   schedule 18.04.2017