LINQ to Entities through Interface Property

У меня возникла ситуация, когда я хотел бы использовать один класс бизнес-логики для выполнения аналогичных операций с различными классами сущностей. Я определил интерфейс, который эти классы реализуют в файле частичного класса.

Однако когда я пытаюсь написать запрос LINQ to entities к методам этого интерфейса, я получаю NotSupportedException, поскольку запрос использует свойства класса не напрямую, а через интерфейс.

Я хотел бы оставить тяжелую работу на уровне базы данных, поэтому есть ли способ достичь этого, не прибегая к LINQ to objects?

Вот код, который демонстрирует мою проблему (он использует общий класс хранилища, созданный фабрикой).

public interface INamedEntity
{
    int ID { get; set; }
    string Name { get; set; }
}

// This is an Entity Framework class which has CustomerID and CustomerName properties.
public partial class Customer: INamedEntity
{
    int INamedEntity.ID
    {
        get { return this.CustomerID; }
        set { this.CustomerID = value; }
    }
    string INamedEntity.Name
    {
        get { return this.CustomerName; }
        set { this.CustomerName = value; }
    }
}

...

public string GetName<T>(int entityID) where T: EntityObject, INamedEntity
{
    using(var repository = RepositoryFactory.CreateRepository<T>())
    {
        return repository
            .Where(e => e.ID == entityID)
            .Select(e.Name)
            .Single();
    }
}
7
задан gareththegeek 17 February 2012 в 10:20
поделиться