我正在尝试将我的项目 MVC 从带有 EF 的 c# asp.net 迁移到 asp.net core 和 EF core。我是自学成才,并且是唯一从事该项目的人,因此我一直致力于的项目架构和标准可能会略有偏差。
我的模型通常如下所示:
public class Quotation
{
public int ID { get; set; }
public int QuotationReference { get; set; }
[Display(Name = "Version")]
public int VersionNo { get; set; }
public string VersionDisplay
{
get
{
if (_context.Quotations.Where(s => s.QuotationReference == QuotationReference).OrderByDescending(s => s.VersionNo).Count() > 0)
{
return VersionNo.ToString() + "/" + _context.Quotations.Where(s => s.QuotationReference == QuotationReference).OrderByDescending(s => s.VersionNo).Select(s => s.VersionNo).First();
}
return "";
}
}
}
自从迁移到 EF core 后,尝试运行时
_context
为空。如何在我的模型中拥有查询数据库的计算字段?
如果我不应该在模型中计算属性,我应该在架构中的哪里进行这些计算?
当我查询数据库然后将结果加载到视图模型中时,我的大多数控制器看起来都类似于下面的内容。
public ActionResult Create()
{
EmployeeHolidaysController EHC = new EmployeeHolidaysController(_context,_userManager,_hostingEnvironment);
EHC.EmployeeHolidayMaintance();
EmployeeViewModel vm = new EmployeeViewModel();
vm.User = _context.Users.Find(_userManager.GetUserId(User));
vm.Employee = new Employee();
vm.ProductionDepartments = new SelectList(_context.Departments, "ID", "DepartmentName", vm.Employee.ProductionDepartmentID);
vm.Employee.DateOfBirth = DateTime.Now.AddYears(-20);
vm.Employee.EmployementStartDate = DateTime.Now;
return View(vm);
}
我应该把这些计算属性放在哪里?理想情况下,我希望它们在运行时进行计算,因为自保存单个记录以来可能添加了其他数据。
为了拥有一个计算字段,例如上例中的属性 getter,您可以使用依赖注入将实例化的 _context 实例传递给 Quotation 类,以便该类的方法可以使用它。
这通常作为类构造函数的参数来完成,尽管另一种选择是在实例化类后在类上设置属性。