ObjectContext
consente l'accesso generico alle Entità generate. DbContext
sembra non avere tale supporto. L'accesso a EF5 con un repository generico è impegnativo. Diciamo che voglio un meccanismo generico per leggere un dato soggetto, lo chiamano TEntity:Accesso generico a DbContext
public class DataRepositoryEF5<T> where T: DbContext
{
private ObjectContext _context;
public DataRepositoryEF5(DbContext context)
{
_context = ((IObjectContextAdapter)context).ObjectContext;
}
public IEnumerable<TEntity> ReadAll<TEntity>() where TEntity : class,new()
{
return GetObjectSet<TEntity>().AsEnumerable();
}
protected ObjectSet<TEntity> GetObjectSet<TEntity>() where TEntity : class,new()
{
ObjectSet<TEntity> result;
result = _context.CreateObjectSet<TEntity>();
return result;
}
}
Uso
var context = new MyContext();
var repository = new DataRepositoryEF5<MyContext>(context);
IEnumerable<Document> results = repository.GetAll<Document>();
foreach (var item in results)
{
Console.WriteLine("{0} {1} {2} {3}", item.Description, item.Id, item.Property, item.Whatever);
}
EF usato per generare le classi con un tipo di base comune EntityObject
. Dal momento che non è più il caso il vincolo migliore che posso avere è class
...
In secondo luogo, perché non esiste un equivalente di ObjectContext.CreateObjectSet<>()
sono costretto a lanciare DbSet
-ObjectSet
.
Con questo modello sul posto non ho bisogno di DbContext
. Senza generici sono costretto a gestire il codice di tutte le operazioni CRUD. Ho dimenticato qualcosa? In caso contrario, è possibile indicare a EF5 di generare codice con ObjectContext
?
un'occhiata a questo suggerimento che ho postato su CodeProject qualche tempo fa http: //www.codeproject.com/Tips/309753/Repository-Pattern-with-Entity-Framework-4-1-and-C –
@MassimilianoPeluso - Sì, quell'articolo è esattamente ciò di cui ho bisogno! Per il tuo esempio context.Set <>() è il nuovo modo di farlo. Vedo che sei anche con un vincolo 'class' sulle Entities. Se vuoi postare il commento come risposta darò risposta a credito. - –