第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

模擬對同一實體的 2 個或多個 DBContext 調(diào)用失敗

模擬對同一實體的 2 個或多個 DBContext 調(diào)用失敗

C#
胡說叔叔 2022-11-13 14:21:47
我有一個使用 Entity Framework v6.0 和員工表的 MVC ASP.Net 應(yīng)用程序。我們使用 Code First 方法和標(biāo)準(zhǔn) Create (CRUD) 方法,該方法具有對現(xiàn)有員工的 EF 查找以及對員工 CreatedBy/ModifiedBy 字段的 EF 查找。嘗試為兩者(EF 對象存根)創(chuàng)建模擬失敗。[HttpPost][ValidateAntiForgeryToken]public ActionResult Create([Bind(Include = "EmployeeID,TeamID,EmployeeADID,FirstName,MiddleName,LastName,EmailAddress,IsAdministrator,IsDeleted")] Employee employee){    if (ModelState.IsValid)    {        //Only unique employee IDs        var existingEmployee = db.Employees.FirstOrDefault(o => o.EmployeeADID == employee.EmployeeADID);        if(existingEmployee != null)        {            ViewBag.Error = "Employee ID must be unique, this employee (" + existingEmployee.FullName + ") already exists in the system.";            ViewBag.TeamID = new SelectList(db.Teams, "TeamID", "Name", employee.TeamID);            return View(existingEmployee);        }        SetAuditFields(employee);        db.Employees.Add(employee);        db.SaveChanges();        return RedirectToAction("Index");    }        ViewBag.TeamID = new SelectList(db.Teams, "TeamID", "Name", employee.TeamID);    return View(employee);}問題是SetAuditFields調(diào)用,我需要為編輯操作模擬db.Employees.AsNoTracking AsNoTracking。private void SetAuditFields(Employee employee, bool onlyModified = false){    char sep = '\\';    string pID = User.Identity.Name.Split(sep)[1].ToUpper();    var users = db.Employees.AsNoTracking().Where(c => c.EmployeeADID == pID || c.EmployeeID == employee.EmployeeID).ToList();    var currentUser = users.FirstOrDefault(u => u.EmployeeADID == pID);那么我如何db.Employees.AsNoTracking在最初模擬之后模擬db.Employees呢?下面代碼中注釋掉的這兩行不起作用并失?。骸俺蓡T 'IQueryable.Provider' 尚未在類型 'DbSet 1Proxy' which inherits from 'DbSet1'上實現(xiàn)我也嘗試過,mockContext.SetupSequence但我需要在打開和關(guān)閉 AsNoTracking 之間進(jìn)行交換。當(dāng)然一定有我遺漏的東西嗎?
查看完整描述

1 回答

?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗 獲得超4個贊

我最終根據(jù)https://stackoverflow.com/a/14368486/495455使用計數(shù)器創(chuàng)建了一系列模擬


int callCounter = 1;

mockContext.Setup(m => m.Employees)

    .Returns(() =>

    {

        if (callCounter == 1)

        {

            callCounter++;

            return employeeToEditMockCU;

        }

        else

        {

            return employeeMockCU;

        }

    });

在第一次模擬之后,使用 SetupSequence 進(jìn)行模擬對我不起作用。db.Employee 在第一次調(diào)用后變?yōu)榭铡K晕也皇褂肧etupSequence:


mockContext.SetupSequence(x => x.Employees)

.Returns(employeeToEditMockCU)

.Returns(employeeMockCU);

為了解決這個問題,AsNoTracking()我最終獲取了要更新的記錄并在不使用的情況下保存它EntityState.Modified:


EF Update using EntityState.Modified


查看完整回答
反對 回復(fù) 2022-11-13
  • 1 回答
  • 0 關(guān)注
  • 91 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號