Ich habe zwei Tabellen Lesson
und Group
.Entity Framework Update Fremdschlüssel context.set
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
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
?
das ist keine Lösung. Ich möchte 'Update' Methode (schrieb oben) zu CRUD. –