2012-09-05 55 views
0

我在爲我的實體定義模型構建器時遇到問題,並在嘗試設置該實體的當前值時拋出錯誤。造成樓下問題的路線是:實體框架模型構建器映射問題

 context.Entry(tEntity.TaskSchedule.ScheduleDaysAndTimes).CurrentValues.SetValues(selectedTask.TaskSchedule.ScheduleDaysAndTimes); 

我拋出一個「實體類型EntityCollection`1是不是該機型爲當前上下文的一部分。」

我的繼承人設置:

public class TaskEntity 
{ 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public virtual int TaskId { get; set; } 

     public virtual TaskScheduleEntity TaskSchedule { get; set; } 
} 
public class TaskScheduleEntity 
{ 
    /*Foreign Key*/ 
    public virtual int TaskId { get; set; } 
    public virtual TaskEntity TaskEntity { get; set; } 


    public virtual ICollection<ScheduleDayTimeEntity> ScheduleDaysAndTimes { get; set; } 

public class ScheduleDayTimeEntity 
{ 
    public int TaskScheduleID { get; set; } 
    public virtual TaskScheduleEntity TaskScheduleEntity { get; set; } 


    public virtual ICollection<DateTime?> Times { get; set; } 
} 


modelBuilder.Entity<TaskEntity>() 
      .HasKey(k => k.TaskId) 
      .HasRequired(s => s.TaskSchedule) 
      .WithRequiredPrincipal(p => p.TaskEntity) 
      .WillCascadeOnDelete(true); 

     modelBuilder.Entity<TaskScheduleEntity>() 
      .HasKey(k => k.TaskId) 
      .HasMany(t => t.ScheduleDaysAndTimes) 
      .WithRequired(a => a.TaskScheduleEntity) 
      .WillCascadeOnDelete(false); 

     modelBuilder.Entity<ScheduleDayTimeEntity>() 
      .HasKey(k => k.TaskScheduleID); 


public void SaveTasks() 
    { 
     using (var context = new AppContext()) 
     { 
      var tEntity = context.Tasks.First(x => x.TaskId == selectedTask.TaskId); 

      context.Entry(tEntity).CurrentValues.SetValues(selectedTask); 
      context.Entry(tEntity.TaskSchedule).CurrentValues.SetValues(selectedTask.TaskSchedule); 

      context.Entry(tEntity.TaskSchedule.ScheduleDaysAndTimes).CurrentValues.SetValues(selectedTask.TaskSchedule.ScheduleDaysAndTimes); /* Error thrown here*/ 


      context.SaveChanges(); 

     } 

    } 

回答

2

DbContext.Entry()期待一個單一的實體,而你給它一個ICollection<ScheduleDayTimeEntity>

你需要更新你的代碼,以便您通過收集循環:

foreach (var scheduleDayTimeEntity in tEntity.TaskSchedule.ScheduleDaysAndTimes) 
{ 
    context.Entry(scheduleDayTimeEntity).CurrentValues.SetValues(/* Correct Value goes here */); 

}