私は混乱している状況にあり、助けを求めていました。以下のコードでは、FindById メソッドはリターンをキャストしなくても機能しますが、UpdatedAuditedEntity 呼び出しは機能しません。ご了承ください:
- AuditedEntity は Entity から派生します
- auditedEntity のエンティティへのキャストは機能せず、T へのキャストのみが機能します。
ここで何が欠けているかについての洞察は大歓迎です。最初は分散が関係していると思っていましたが、前述のようにダウンキャストを試みましたが成功しませんでした。
public class NHibernateRepository<T> : NHibernateBase,
IRepository<T> where T : Entity
{
public IEnumerable<T> FindAll(Expression<Func<T, bool>> predicate)
{
var query = GetQuery(predicate);
return Transact(() => query.ToList());
}
public T FindById(int id)
{
// TODO: Why does this work when below doesn't
return FindAll(e => e.Id == id).FirstOrDefault();
}
private T UpdateAuditedEntity(T item)
{
var auditedEntity = item as AuditedEntity;
if (auditedEntity == null) return item;
auditedEntity.DateModified = DateTime.UtcNow;
// TODO: figure out why this cast is necessary
return auditedEntity as T;
}