我在使用实体框架和数据库环境方面遇到了困难,因为这对我来说都很新鲜。
我有一个名为GetEnrolleeName的方法,该方法应该接受作为参数,文件的id,并返回一个字符串,该字符串是与该文件关联的登记者的名称。在相同的上下文上运行的方法之间存在某种冲突,我不知道如何解决它。这是我的控制器的代码:
public async Task<IActionResult> TestIndex()
{
var reports = (from r in _context.DailyObservationReport
select new DailyObservationReport()
{
Id = r.Id,
EnrolleeName = Report.GetEnrolleeName(r.FileId, _context), //here is the call I am having trouble with
AuthorId = Report.GetAuthorName(r.Id, _context),
DayOfTraining = r.DayOfTraining,
DateOfTraining = r.DateOfTraining
}).ToList();
var vm = new IndexViewModel()
{
Reports = reports
};
return View(vm);
}
这是GetEnrolleName方法:
public class Report
{
public static string GetEnrolleeName(int FileId, ApplicationDbContext _context)
{
var x =
(from f in _context.File
where f.ID == FileId
join u in _context.Users
on f.EnrolleeId equals u.Id
into FileEnrollee
from e in FileEnrollee
select new
{
LastName = e.LastName,
FirstName = e.FirstName,
MiddleName = e.MiddleName
}).SingleOrDefault();
string n = x.LastName + ", " + x.FirstName + " " + x.MiddleName;
return n;
}
}
这会产生异常:
System.InvalidOperationException:'对此启动了第二个操作 上一次操作完成前的上下文。任何实例成员 不保证是线程安全的'
我确信将上下文作为参数从一个类发送到另一个类是一个问题,但这是我能想到的最简单的工作方式。我需要一些帮助来解决上面的错误并使其正常工作。