我在模型中使用数据库时遇到一些问题。我怀疑在模型中使用数据库查询不是一个好主意,但我不知道如何做得更好。
代码:
让我们假设我有一些应用来分析足球比分。我有一些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#,但我认为效率始终为零的原因是因为我在其中使用数据库并且它在某种程度上是异步的。当我调用这个变量时,它首先返回零,然后调用数据库。
答案 0 :(得分:1)
我认为你的问题在于划分整数/整数。为了得到一个浮点数,你必须先抛出一个浮点数:
public float Efficiency
{
get
{
using(var db = new ScoresContext())
{
var allGoalsInSeason = db.Goals.Count();
return (float)HisGoals.Count / allGoalsInSeason;
}
}
}
将int / int结果总是以你的情况为0的int(如果你在评论4/11中所说的那样)。
第二件事是实体框架将缓存值 - 在运送到生产之前对其进行测试。