LINQ to Entities поддерживает приведение только типов примитивов и перечислений EDM с интерфейсом IEntity.

У меня есть следующий общий метод расширения:

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 интерфейс?

Ответы на вопрос(4)

Ваш ответ на вопрос