В ASP. NET Ядро, у меня есть свойства, которые рассчитываются на основе других свойств, например, у меня есть
public class Worker
{
public int Id {get;set;}
public double Rev {get;set;}
public double Cost {get;set;}
public double Profit {get;set;}
}
, а Profit
означает Rev - Cost
и Некоторое время я работал над проблемой, когда в основном либо вычисления не выполнялись, либо столбец не существовал. В моем действии Create
было бы что-то вроде этого
public async Task<IActionResult> Create([Bind("Id,Rev,Cost,Profit")] Worker worker)
{
if (ModelState.IsValid)
{
Worker employee = new Worker
{
Rev = worker.Rev,
Cost = worker.Cost,
Profit = worker.Rev - worker.Cost
};
_context.Add(employee);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
. При этом все будет отображаться в моей базе данных и будет выглядеть нормально, однако Profit
не будет рассчитываться и будет равно 0. Если Я меняю свой контроллер и не вычисляю Profit
в контроллере, а вместо этого вычисляю его в модели, все это работает так:
public class Worker{
public int Id {get;set;}
public double Rev {get;set;}
public double Cost {get;set;}
public double Profit{
get
{
return Rev - Cost;
}
}
}
Все это работает, и вычисления выполняются, но Profit
не является столбцом в моей Worker
таблице. Мой вопрос заключается в том, как мне выполнить вычисления в модели, но при этом сохранить Profit
как столбец в базе данных, мне нужно и get; set;
, но я не уверен, как реализовать set
при выполнении и сохранении расчеты?