I've this database from EF code first, and now i have a difficult time getting my data.
I have the following entities:
Program : is a workout program that contains Workouts.
Workout : is a day routine that contains a list of Sets.
Set : is an Exercises repeated x times with y load.
Exercise: is an gym exercise which contains a Region.
Region : is a region on the human body and contains Muscles.
Muscle : is a muscle on the human body.
Here are 3 model examples
public class Workout
{
[Key]
public int WorkoutId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<Set> Sets { get; set; }
}
public class Set
{
[Key]
public int SetId { get; set; }
//Foreign key for Exercise
public int ExerciseId { get; set; }
[ForeignKey("ExerciseId")]
public Exercise Exercise { get; set; }
public decimal Load { get; set; }
public decimal Order { get; set; }
}
public class Exercise
{
[Key]
public int ExerciseId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
//Foreign key for Region
public int RegionId { get; set; }
public Region Region { get; set; }
}
And the scaffolded controller
// GET: api/Workouts
public IQueryable<Workout> GetWorkouts()
{
return db.Workouts;
}
So that only gives me a Workout object with its iCollection Sets is null.
// GET: api/Workouts
public IQueryable<Workout> GetWorkouts()
{
return db.Workouts.Include(w => w.Sets);
}
By including Sets i can get the corresponding Sets.
But what if i would like to get a Workout, including the Sets, and those Sets would include Exercises, and those Exercises would include Regions which in the end had a list of Muscles?
And what if i want a workout from id, like this:
[ResponseType(typeof(Workout))]
public IHttpActionResult GetWorkout(int id)
{
Workout workout = db.Workouts.Find(id);
if (workout == null)
{
return NotFound();
}
return Ok(workout);
}
How will i then include Sets?
EDIT And from the Visual Studio Template /Help page, i can see the following:
GET api/Workouts/{id}
Should provide med with:
{
"workoutId": 1,
"name": "sample string 2",
"description": "sample string 3",
"sets": [
{
"setId": 1,
"exercise": {
"exerciseId": 1,
"name": "sample string 2",
"description": "sample string 3",
"regionId": 4,
"region": {
"regionId": 1,
"regionName": "sample string 2",
"muscles": [
{
"muscleId": 1,
"latinName": "sample string 2",
"dkName": "sample string 3",
"enName": "sample string 4",
"description": "sample string 5"
},
{
"muscleId": 1,
"latinName": "sample string 2",
"dkName": "sample string 3",
"enName": "sample string 4",
"description": "sample string 5"
}
]
}
},
But it just wont happen, im open for anything that returns me a full Program in JSON. skype, teamwievr, stack, another solution, anyhting.
And finally i got it:
public class Exercise
{
[Key]
public int ExerciseId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
//Foreign key for Region
//public int RegionId { get; set; }
public virtual Region Region { get; set; } //had to be virtual -.-
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With