Note: I am using Entity Framework version 5
在我的通用存储库中,我有
Add
, Edit
和 Delete
方法如下: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);
}
}
}
您认为这些方法是否实现得很好?尤其是
Add
方法。执行 Add
会更好吗?方法如下?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;
}
最佳答案
添加:
public bool Add<E>(E entity) where E : class
{
DataContext.Entry(entity).State = System.Data.EntityState.Added;
Save();
}
更新:
public bool Update<E>(E entity) where E : class
{
DataContext.Entry(entity).State = System.Data.EntityState.Modified;
Save();
}
删除:
public bool Delete<E>(E entity) where E : class
{
DataContext.Entry(entity).State = System.Data.EntityState.Deleted;
Save();
}
和私有(private)
Save()
返回 true 或 false 的方法,因此您可以根据结果在 Controller 中轻松回退private bool Save()
{
return DataContext.SaveChanges() > 0;
}
这只是我的通用存储库的一部分。它在企业应用程序中效果很好。
更新:
Detach only affects the specific object passed to the method. If the object being detached has related objects in the object context, those objects are not detached.
当设置实体状态或
SaveChanges()
时,EF 将自动在图中附加分离的对象。叫做。我真的不知道为什么需要从上下文中分离对象。您也可以使用
AsNoTracking()
从数据库中加载实体而不首先将它们附加到上下文中。
关于entity-framework - 使用 Entity Framework 代码最有效地处理创建、更新、删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12742473/