Piotrek
Piotrek

Reputation: 11221

Database queries in Entity Framework model - variable equals zero

I have some problems with using database in my Model. I suspect that its not good idea to use database queries in Model, but I don't know how to do it better.

Code:

Let's assume that I have some application to analize football scores. I have some EF model that stores info about footballer:

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;
            }
        }
    }
}

Problem:

So the case is: I want to have a variable in my model called "Efficiency" that will return quotient of two variables. One of them contains data got in real-time from database. For now this code doesn't work. "Efficiency" equals 0. I tried to use debugger and all data is correct and it should return other value.

What's wrong? Why it returns always zero?

My suspicions:

Maybe I'm wrong, I'm not good at C#, but I think the reason that Efficiency is always zero, is because I use database in it and it is somehow asynchronous. When I call this variable, it returns zero first and then calls the database.

Upvotes: 0

Views: 93

Answers (1)

pg0xC
pg0xC

Reputation: 1266

I think that your problem lies in dividing integer / integer. In order to get a float you have to cast first one to float like this:

public float Efficiency
{
   get
   {
       using(var db = new ScoresContext())
       {
           var allGoalsInSeason = db.Goals.Count();
           return (float)HisGoals.Count / allGoalsInSeason;
        }
    }
}

Dividing int/int results always in int that is in your case 0 (if it is as you said in comment 4/11).

Second thing is that Entity Framework will cache values - test it before shipping to production.

Upvotes: 1

Related Questions