我首先从EF代码中获取此数据库,现在我很难获取数据。
我有以下实体:
计划:是一个包含锻炼的锻炼计划。
锻炼:是一个包含集合列表的日常规。
设置:是y加载重复x次练习。
锻炼:是一项包含区域的健身运动。
区域:是人体上的一个区域,包含肌肉。
肌肉:是人体的肌肉。
以下是3个模型示例
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; }
}
和脚手架控制器
// GET: api/Workouts
public IQueryable<Workout> GetWorkouts()
{
return db.Workouts;
}
因此,只给我一个带有iCollection Sets的Workout对象为null。
// GET: api/Workouts
public IQueryable<Workout> GetWorkouts()
{
return db.Workouts.Include(w => w.Sets);
}
通过包含集合,我可以获得相应的集合。
但是如果我想得到一个锻炼,包括套装,那些套装会包含练习,那些练习会包括最终有肌肉列表的区域?
如果我想从id锻炼,如下:
[ResponseType(typeof(Workout))]
public IHttpActionResult GetWorkout(int id)
{
Workout workout = db.Workouts.Find(id);
if (workout == null)
{
return NotFound();
}
return Ok(workout);
}
我将如何包含集?
修改 从Visual Studio模板/帮助页面,我可以看到以下内容:
GET api/Workouts/{id}
应提供med:
{
"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"
}
]
}
},
但它不会发生,我会打开任何让我在JSON中返回完整程序的东西。 skype,teamwievr,堆栈,另一种解决方案,无论如何。
答案 0 :(得分:3)
最后我明白了:
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 -.-
}
答案 1 :(得分:2)
如果您正确设置了模型,那么链接Include()
方法应该可行。
public IQueryable<Workout> GetWorkouts()
{
return db.Workouts.Include(w => w.Sets.AsQueryable().Include(s => s.Excercises.AsQueryable().Include(e => e.Regions.AsQueryable().Include(r => r.Muscles))));
}