У меня возникла ситуация, когда я хотел бы использовать один класс бизнес-логики для выполнения аналогичных операций с различными классами инфраструктуры сущностей. Я определил интерфейс, который эти классы реализуют в частичном файле класса.
Однако, когда я пытаюсь написать запрос LINQ to entity к этим методам интерфейса, я получаю исключение NotSupportedException, поскольку запрос использует свойства класса не напрямую, а через интерфейс.
Я хотел бы сохранить тяжелую работу на уровне базы данных, поэтому есть ли способ добиться этого, не прибегая к LINQ для объектов?
Вот некоторый код, который демонстрирует мою проблему (он использует общий класс репозитория, созданный фабрикой).
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();
}
}