다음과 같은 일반 확장 방법이 있습니다.
public static T GetById<T>(this IQueryable<T> collection, Guid id)
where T : IEntity
{
Expression<Func<T, bool>> predicate = e => e.Id == id;
T entity;
// Allow reporting more descriptive error messages.
try
{
entity = collection.SingleOrDefault(predicate);
}
catch (Exception ex)
{
throw new InvalidOperationException(string.Format(
"There was an error retrieving an {0} with id {1}. {2}",
typeof(T).Name, id, ex.Message), ex);
}
if (entity == null)
{
throw new KeyNotFoundException(string.Format(
"{0} with id {1} was not found.",
typeof(T).Name, id));
}
return entity;
}
불행히도 Entity Framework는 predicate
C #이 조건자를 다음으로 변환했기 때문에 처리 방법을 모릅니다 .
e => ((IEntity)e).Id == id
Entity Framework에서 다음 예외가 발생합니다.
'IEntity'유형을 'SomeEntity'유형으로 캐스트 할 수 없습니다. LINQ to Entities는 EDM 기본 형식 또는 열거 형식 캐스팅 만 지원합니다.
Entity Framework가 IEntity
인터페이스 와 함께 작동하도록하려면 어떻게 해야합니까?