【问题标题】:Entity EF6 in Repository Issues存储库问题中的实体 EF6
【发布时间】:2018-09-05 12:57:40
【问题描述】:

我将所有 DBContext 调用移到了存储库中。

public class PayAllowanceRepository
{
    private static DBEntities _dbContext = new DBEntities();


    public static void AddAllowance(Allowance payAllowance)
    {
        _dbContext.Allowances.Add(payAllowance);
        _dbContext.SaveChanges();
    }

    public static void AddAllowanceAccumulators(List<Allowance> allowanceList)
    {
        _dbContext = new DBEntities();
        _dbContext.Allowances.AddRange(allowanceList);
        allowanceList.ForEach(p => _dbContext.Entry(p).State = System.Data.Entity.EntityState.Modified);
        _dbContext.SaveChanges();


    }

    // Here
    public static void AddAllowanceAccumulatorsHours(List<Allowance> allowanceListHours)
    {
        _dbContext = new DBEntities();
        _dbContext.Allowances.AddRange(allowanceListHours);
        allowanceListHours.ForEach(x => _dbContext.Entry(x).State = System.Data.Entity.EntityState.Modified);
        _dbContext.SaveChanges();
    }


    public static void UpdateAllowance(Allowance payAllowance)
    {
        _dbContext=new DBEntities();
        _dbContext.Entry(payAllowance).State = System.Data.Entity.EntityState.Modified;
        _dbContext.SaveChanges();
    }


    public static void DeleteAllowance(Guid id)
    {
        var allowance = _dbContext.Allowances.FirstOrDefault(x => x.Id == id);
        _dbContext.Allowances.Remove(allowance);
        _dbContext.SaveChanges();

    }


    public static void UpdateAllowanceRate(Allowance allowanceRate)
    {

        //dbContext.Allowances.Add(allowanceRate);
        _dbContext.Entry(allowanceRate).State = System.Data.Entity.EntityState.Modified;
        _dbContext.SaveChanges();
    }

    public static List<Allowance> GetAllowances(Guid payrollCompanyId)
    {
        var allowance = new List<Allowance>(_dbContext.Allowances.AsNoTracking().Where(x => x.PayrollCompanyId == payrollCompanyId));
        return allowance;
    }

}
  1. 这是处理存储库中 DBContext 的最佳方式吗?
  2. 执行 AddAllowanceAccumulatorsHours 时失败。我收到错误消息:IEntityChangeTracker 的多个实例无法引用实体对象。我做错了什么?

【问题讨论】:

标签: c# entity-framework-6 3-tier


【解决方案1】:

如果我不重新初始化 dbContext,例如 _dbContext=new DBEntities(); 我收到错误消息: 附加类型实体失败,因为相同类型的另一个实体已经具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新实体,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图形,然后将非新实体的状态设置为“未更改”或“已修改”。

现在我几乎所有的存储库中都出现了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多