0
我有以下代碼:我該如何執行這個簡單的相等比較?
public abstract class RepositoryBase<T, TId> : IRepository<T, TId>
where T : class, IEntityWithTypedId<TId>
where TId : IEquatable<TId>, IComparable<TId>
{
public T FindById(TId id)
{
T entity;
using (this.Context) // This simply returns the NHibernate Session
{
var entities = from e in this.Context.Get()
// where e.Id.Equals(id)
where e.Id == id
select e;
entity = entities.FirstOrDefault();
}
return entity;
}
}
如果我使用where e.Id == id
條款,我得到的錯誤:
error CS0019: Operator '==' cannot be applied to operands of type 'TId' and 'TId'
錯誤即使我已經告訴TId
必須實現編譯IEquatable
和IComparable
如果我使用where e.Id.Equals(id)
子句,代碼將會編譯,但是當它執行查詢時,NHibernate會收到一個NotSupported Exception FirstOrDefault
一行。
我知道我必須在設計中遺漏一些東西,但是這個解決方案已經讓我失望了好幾天。
爲什麼你不完全避免這個問題,並使用session.Get(id)? –
Iain
2012-02-15 04:28:57
你應該比較他們的密鑰,而不是實體本身... – 2012-02-15 04:37:20
使用獲取(id)將是這個問題的最簡單的解決方案...;) –
2012-02-15 14:43:20