实体框架模型中的数据库查询-变量等于零

本文关键字:查询 变量 等于零 数据库 框架 模型 实体 | 更新日期: 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中所说的)。

第二件事是实体框架将缓存值——在交付生产之前对其进行测试。