#c# #entity-framework
#c# #entity-framework
Вопрос:
У меня есть две таблицы Lesson
и Group
.
У меня есть 4 урока и 2 группы, все уроки находятся в первой группе ( grp_Id=1
).
Группа :
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; }
}
Урок:
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; }
}
Я использую это руководство для реализации n-уровневого уровня с помощью ссылки Entity Framework
Для сохранения и изменения я использую этот метод :
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();
}
}
Это мой пример кода для обновления внешнего ключа и обновления урока; когда найдете урок с помощью Id=3
, измените группу и обновите 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());
Проблема:
перед запуском grpbll.UpdateGroup(grps.toArray())
измените grp_id на 2
после запуска UpdateGroup
запустите Update
метод. В Update
методе после выполнения приведенного ниже кода измените grp_Id на 1 (старый grp_Id был равен 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);
}
}
Вопрос:
Как обновить внешний ключ в lesson
? Как изменить урок только в группе изменений grp_Id
?
Ответ №1:
Смотрите ссылку ниже http://www.entityframeworktutorial.net/EntityFramework4.3/add-one-to-many-entity-using-dbcontext.aspx
Вы должны внести некоторые изменения в свой код. Попробуйте
Комментарии:
1. это не решение. Я хочу использовать
Update
метод (написанный выше) для CRUD.