Ho una situazione in cui vorrei utilizzare una singola classe di business logic per eseguire operazioni simili su una varietà di classi di entità framework. Ho definito un'interfaccia che queste classi implementano in un file di classe parziale.LINQ alle entità tramite la proprietà di interfaccia
Tuttavia, quando provo a scrivere un LINQ su query di entità con questi metodi di interfaccia, ottengo un NotSupportedException poiché la query non utilizza direttamente le proprietà della classe ma tramite un'interfaccia.
Mi piacerebbe mantenere il sollevamento pesante del livello di database, quindi c'è un modo per raggiungere questo obiettivo senza ricorrere a LINQ per gli oggetti?
Ecco un codice che dimostra il mio problema (si sta utilizzando una classe di repository generica creata da una factory).
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();
}
}
Sì, sembra il problema. – gareththegeek