2016-11-28 21 views
1

我想知道是否有人可以幫我找出爲什麼我得到空值屬性值後獲得API。空API列表屬性當API得到

Usertraining模型

public class UserTraining 
{ 
    public int UserTrainingId { get; set; } 
    public string UserId { get; set; } 
    public virtual ApplicationUser User { get; set; } 
    public int TrainingId { get; set; } 
    public virtual Training Training { get; set; } 
    [DataType(DataType.Date)] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")] 
    public DateTime Date { get; set; } 
    //Value2 is time in min 
    public double Value2 { get; set; } 
    public int BurnedCalories { get; set; } 
    public int AvgHR { get { if (SessionTraining.Count > 0) { return Convert.ToInt32(SessionTraining.Average(s => s.HeartRate)); } else return 0; } } 
    public virtual ICollection<SessionTraining> SessionTraining { get; set; } 
    //public virtual ICollection<Activity> Activities { get; set; } 
    public List<Activity> Activities { get; set; } 
} 

活動模型

public class Activity 
{ 
    [Key, Column(Order = 0)] 
    public int UserTrainingId { get; set; } 
    public Movement Movement { get; set; } 
    [Key, Column(Order = 1)] 
    public DateTime StartTime { get; set; } 
    public DateTime StopTime { get; set; } 
    public int AvgHR { get; set; } 
    public int BurnedKcal { get; set; } 
    public virtual UserTraining UserTraining { get; set; } 


    public Activity(DateTime start, Movement movement, DateTime stop) 
    { 
     StartTime = start; 
     Movement = movement; 
     StopTime = stop; 
    } 

} 
public enum Movement 
{ 
    Layover, 
    Walk, 
    Run 
} 

PUT爲活動

[HttpPut] 
    [Route("api/usertraining2/addactivity/{id}")] 
    public IHttpActionResult AddActivity(int id) 
    { 

     var usertraining = db.UserTrainings.Where(u => u.UserTrainingId == id).SingleOrDefault(); 
     var sessionsTraining = db.SessionTrainings.Where(u => u.UserTrainingId == id).ToList(); 
     List<Activity> activities = ActivityManager.analizeActivity(sessionsTraining); 
     usertraining.Activities = activities; 

     db.SaveChanges(); 

     return Ok(usertraining); 
    } 

得到

// GET: api/UserTraining1 
    public IEnumerable<UserTraining> GetUserTrainings() 
    { 
     var userid = User.Identity.GetUserId(); 
     var usertrainings = db.Set<UserTraining>().Where(u => u.UserId == userid).ToArray(); 
     return usertrainings; 
    } 

起初,我把活動usertraining模型。把工作正常和數據庫添加記錄,但是當我打電話Api獲取用於使用它返回JSON與活動等於空。

+2

你可以發佈你的GET方法嗎? – Mats391

+0

GET方法是否有一個「包含(..)」的活動?例如:'var usertraining = db.UserTrainings.Include(ut => ut.Activities).SingleOrDefault(u => u.UserTrainingId == id);' – DavidG

+0

獲取在文章 –

回答

0

正如DavidG在評論中已經提到的那樣,您需要添加Include()來加載參考列表。改變你的GET方法是這樣的

// GET: api/UserTraining1 
    public IEnumerable<UserTraining> GetUserTrainings() 
    { 
     var userid = User.Identity.GetUserId(); 
     var usertrainings = db.Set<UserTraining>().Where(u => u.UserId == userid).Include(u=>u.Activities).ToArray(); 
     return usertrainings; 
    } 
+0

中添加感謝給我機會添加我的自己的答案... – DavidG

+1

@DavidG,但你仍然有我的讚賞 –

+0

@KrzysztofKozieł我只是想指出,Mats391,這是非常糟糕的形式來複制這樣的答案,至少不等一會兒,看看我是否自己添加它。 – DavidG