c# - 实现存储库模式的删除方法

标签 c# entity-framework repository

我找到了一个存储库模式实现。 通用存储库的 Delete() 方法的实现是否正确?

public virtual void Delete(T entity)
{
    DBEntityEntry entry = this.DbContext.Entry(entity);

    if (entry != EntityState.Deleted)
    {
        entry.State = EntityState.Deleted;
    }
    else
    {
        this.DbSet.Attach(entity);
        this.DbSet.Remove(entity);
    }
}

如果条目的状态为Detached,将条目附加到DbSet时会抛出错误吗?

最佳答案

如果您的所有实体都有 Id(例如从 IEntity 继承的所有实体)属性,请尝试以下代码:

public interface IEntity
{
   public int Id { get; set; }    
}
// T is IEntity
public virtual void Delete(T entity)
{    
   var ent = this.DbContext.Set<T>().Find(entity.Id);

   if (ent != null)
   {
       this.DbContext.Set<T>().Remove(entity)
   }
}

如果没有,请尝试以下代码:

public virtual void Delete(T entity) {

    DbEntityEntry dbEntityEntry = this.DbContext.Entry<T>(entity);
    if (dbEntityEntry.State != EntityState.Detached) {

        dbEntityEntry.State = EntityState.Deleted;
    }
    else {

        DbSet dbSet = this.DbContext.Set<T>();
        dbSet.Attach(entity);
        dbSet.Remove(entity);
    }
}

关于c# - 实现存储库模式的删除方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26083206/

相关文章:

entity-framework - EF Core 中的一对一关系(无法确定一对一关系的子/依赖方)

c# - ObjectStateManager 无法使用相同的键跟踪多个对象

git - 同时在多个仓库中创建 git 分支

svn - 将 mercurial 存储库转换为 svn 存储库

c# - 什么是矩形宽高单位?是像素吗?

c# - 为用户分配角色 DSharpPlus

asp.net - EF缓存: How to detach objects *completely* before inserting them into HttpRuntime cache?

java - 整洁的架构交互器实现

c# - 使用 XNA 和 .NET 的屏幕保护程序?

c# - Automapper 继承的源和目标