Nota: Sto usando la versione di Entity Framework 5modo più efficiente la gestione Create, Update, Delete con il codice Entity Framework Prima
Dentro il mio repository generico, ho Add
, Edit
e Delete
metodi, come di seguito :
public class EntityRepository<T> : IEntityRepository<T>
where T : class, IEntity, new() {
readonly DbContext _entitiesContext;
public EntityRepository(DbContext entitiesContext) {
if (entitiesContext == null) {
throw new ArgumentNullException("entitiesContext");
}
_entitiesContext = entitiesContext;
}
//...
public virtual void Add(T entity) {
DbEntityEntry dbEntityEntry = _entitiesContext.Entry<T>(entity);
if (dbEntityEntry.State != EntityState.Detached) {
dbEntityEntry.State = EntityState.Added;
}
else {
_entitiesContext.Set<T>().Add(entity);
}
}
public virtual void Edit(T entity) {
DbEntityEntry dbEntityEntry = _entitiesContext.Entry<T>(entity);
if (dbEntityEntry.State == EntityState.Detached) {
_entitiesContext.Set<T>().Attach(entity);
}
dbEntityEntry.State = EntityState.Modified;
}
public virtual void Delete(T entity) {
DbEntityEntry dbEntityEntry = _entitiesContext.Entry<T>(entity);
if (dbEntityEntry.State != EntityState.Detached) {
dbEntityEntry.State = EntityState.Deleted;
}
else {
DbSet dbSet = _entitiesContext.Set<T>();
dbSet.Attach(entity);
dbSet.Remove(entity);
}
}
}
Pensi che questi metodi siano ben implementati? Soprattutto il metodo Add
. Sarebbe meglio implementare il metodo Add
come di seguito?
public virtual void Add(T entity) {
DbEntityEntry dbEntityEntry = _entitiesContext.Entry<T>(entity);
if (dbEntityEntry.State == EntityState.Detached) {
_entitiesContext.Set<T>().Attach(entity);
}
dbEntityEntry.State = EntityState.Added;
}
utilizza questo codice per primo? – PositiveGuy
@CoffeeAddict È EF 5.0.0. DB prima o codice prima, non importa qui, immagino dato che si tratta di un codice di deposito generico. – tugberk
È possibile utilizzare la libreria appena rilasciata che *** verrà automaticamente impostato lo stato di tutte le entità nel grafico delle entità ***. Puoi leggere [la mia risposta alla domanda simile] (http://stackoverflow.com/questions/5557829/update-row-if-it-exists-else-insert-logic-with-entity-framework/39609020#39609020) . –