c# asp.net core MVC EF core存储/计算属性查询数据库

问题描述 投票:0回答:1

我正在尝试将我的项目 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);
}

我应该把这些计算属性放在哪里?理想情况下,我希望它们在运行时进行计算,因为自保存单个记录以来可能添加了其他数据。

c# entity-framework-core asp.net-core-mvc code-first
1个回答
0
投票

为了拥有一个计算字段,例如上例中的属性 getter,您可以使用依赖注入将实例化的 _context 实例传递给 Quotation 类,以便该类的方法可以使用它。

这通常作为类构造函数的参数来完成,尽管另一种选择是在实例化类后在类上设置属性。

© www.soinside.com 2019 - 2024. All rights reserved.