实体框架模型中的数据库查询-变量等于零
本文关键字:查询 变量 等于零 数据库 框架 模型 实体 | 更新日期: 2023-09-27 18:20:03
我在模型中使用数据库时遇到了一些问题。我怀疑在Model中使用数据库查询不是一个好主意,但我不知道如何做得更好。
代码:
让我们假设我有一些分析足球比分的应用程序。我有一些EF模型,存储有关足球运动员的信息:
public class Player
{
[...]
public virtual ICollection<Goal> HisGoals { get; set; }
public float Efficiency
{
get
{
using(var db = new ScoresContext())
{
var allGoalsInSeason = db.Goals.Count();
return HisGoals.Count / allGoalsInSeason;
}
}
}
}
问题:
所以情况是:我想在我的模型中有一个变量,叫做"效率",它会返回两个变量的商。其中一个包含从数据库实时获取的数据。目前,此代码不起作用。"效率"等于0。我尝试使用调试器,所有数据都是正确的,它应该返回其他值。
怎么了?为什么它总是返回零?
我的怀疑:
也许我错了,我不擅长C#,但我认为效率总是为零的原因是因为我在其中使用了数据库,而且它在某种程度上是异步的。当我调用这个变量时,它首先返回零,然后调用数据库。
我认为您的问题在于整数/整数的除法。为了得到一个浮动,你必须铸造第一个浮动像这样:
public float Efficiency
{
get
{
using(var db = new ScoresContext())
{
var allGoalsInSeason = db.Goals.Count();
return (float)HisGoals.Count / allGoalsInSeason;
}
}
}
对int/int进行除法运算的结果总是int,在您的情况下为0(如果它是如您在注释4/11中所说的)。
第二件事是实体框架将缓存值——在交付生产之前对其进行测试。