我试图在模型创建时自动进入数据库时设置模型内部属性的值,但是这需要依赖于基于它的其他两列的值。
基本上,我是在尝试根据模型的身高和体重自动计算个人的BMI。
var person = new PersonBmi
{
Height = 183,
Weight = 72
}
_context.PersonBmis.Add(person);
_context.SaveChanges();
现在我希望实现的是,当这个模型被创建并插入到数据库中时,我将能够使用我已经创建的方法计算模型内的bmi值,而不必到处调用它。
这是我的BMI计算方法:
public static double CalculateBmi(double height, double weight)
{
return weight / Math.Pow(height / 100.0, 2);
}
我试图使用getter和setter,但不幸的是,由于我没有在Bmi属性内放置任何东西,我无法让它设置。我不知道模型是否有一个生命周期挂钩,我可以这样做,或者我是否需要在db上下文中这样做,看看模型是否已被创建/修改。
目前,我正在做以下事情:
var height = 183;
var weight = 73;
var person = new PersonBmi
{
Height = height,
Weight = weight,
Bmi = PersonBmi.CalculateBmi(height, weight)
}
你可以看出,这不是最好的。
我建议使用[NotMapped]
上的get仅派生属性,以允许模型被保存到数据库中,而没有派生值
正如在评论中提到的,您可能不想冒这个派生值过期的风险。比如:
public class PersonBmi
{
public double Height { get; set; }
public double Weight { get; set; }
[NotMapped]
public double Bmi => weight / Math.Pow(height / 100.0, 2);
}