首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储问题中的实体EF6

存储问题中的实体EF6
EN

Stack Overflow用户
提问于 2018-03-27 08:01:58
回答 1查看 42关注 0票数 0

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

代码语言:javascript
复制
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的多个实例引用。我做错什么了?
EN

回答 1

Stack Overflow用户

发布于 2018-03-29 09:12:21

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49507422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档