2016-10-24 4 views
0

Ich habe zwei Tabellen Lesson und Group.Entity Framework Update Fremdschlüssel context.set

enter image description here

Ich habe 4 Stunden und 2 Gruppen, sind alle Lehren in der ersten Gruppe (grp_Id=1).

Gruppen:

public partial class Group:IEntity 
{ 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public Group() 
     { 
      this.Lessons = new HashSet<Lesson>(); 
     } 

     public int Id { get; set; } 
     public Nullable<int> Ex_Id { get; set; } 
     public string Name { get; set; } 
     public Nullable<int> Factor { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<Lesson> Lessons { get; set; } 
     public EntityState EntityState { get; set; } 
} 

Lektion:

public partial class Lesson:IEntity 
{ 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public Lesson() 
     { 
     } 

     public int Id { get; set; } 
     public Nullable<int> Grp_Id { get; set; } 
     public string Name { get; set; } 
     public Nullable<int> FromNum { get; set; } 
     public Nullable<int> ToNum { get; set; } 
     public Nullable<int> CountQuestio { get; set; } 
     public Nullable<int> Factor { get; set; } 

     public virtual Group Group { get; set; } 

     public EntityState EntityState { get; set; } 
} 

ich dieses Handbuch verwenden n-Tier-Schicht mit Entity Framework Link

Zum Speichern und Modifizieren, ich benutze diese Methode zu implementieren:

public virtual void Update(params T[] items) 
{ 
    using (var context = new AzmaEntities()) 
    { 
     DbSet<T> dbSet = context.Set<T>(); 

     foreach (T item in items) 
     { 
      dbSet.Add(item); 

      foreach(DbEntityEntry<IEntity> entry in context.ChangeTracker.Entries<IEntity>()) 
      { 
       IEntity entity = entry.Entity; 
       entry.State = GetEntityState(entity.EntityState); 
      } 
     } 

     context.SaveChanges(); 
    } 
} 

Dies ist mein Beispielcode, um den Fremdschlüssel zu aktualisieren und die Lektion zu aktualisieren; wenn find Lektion mit Id=3, die Gruppe ändern und aktualisieren Grp_Id:

IGroupBLL grpbll = new GroupBLL(); 

IList<Group> grps = new List<Group>(); 
grps = grpbll.GetAllGroupWithLesson(); 

foreach (Group grp in grps) 
{ 
    foreach (Lesson lsn in grp.Lessons) 
    { 
     if(lsn.Id == 3) 
     { 
      lsn.EntityState = EntityState.Modified; 
      lsn.Grp_Id = 2; 
      break; 
     } 
    } 
} 

grpbll.UpdateGroup(grps.ToArray()); 

Problem:

vor grpbll.UpdateGroup(grps.toArray()) läuft grp_id bis 2

ändern enter image description here

nach Lauf UpdateGroup, laufen Update Methode. In Update Verfahren nach Lauf unter Codeänderung grp_Id bis 1 (alt grp_Id war 1)

DbSet<T> dbSet = context.Set<T>(); 

foreach (T item in items) 
{ 
    dbSet.Add(item); 

    foreach(DbEntityEntry<IEntity> entry in context.ChangeTracker.Entries<IEntity>()) 
    { 
     IEntity entity = entry.Entity; 
     entry.State = GetEntityState(entity.EntityState); 
    } 
} 

Frage:

Wie Fremdschlüssel in lesson aktualisieren? Wie ändert man den Unterricht nur in der Gruppe grp_Id?

Antwort

Verwandte Themen