加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 实体框架:在WPF中创建和更新相关对象

发布时间:2020-12-15 21:59:07 所属栏目:百科 来源:网络整理
导读:我正在使用EF 6.0和代码优先方法. 我有通过Entity Framework在db中创建和更新数据的问题.我不确定在存储Student之前是否需要创建db.Groups.Attach(student.Group).保存学生后没有这个,我也有新的组,其名称与其他GroupId相同. 此外,我无法更新学生,因为我遇到
我正在使用EF 6.0和代码优先方法.
我有通过Entity Framework在db中创建和更新数据的问题.我不确定在存储Student之前是否需要创建db.Groups.Attach(student.Group).保存学生后没有这个,我也有新的组,其名称与其他GroupId相同.

此外,我无法更新学生,因为我遇到异常:无法定义两个对象之间的关系,因为它们附加到不同的ObjectContext对象.

public class Student {
    [Key]
    public int StudentId {get; set;}
    public string Name {get; set;}
    public Group Group {get; set;}
}
public class Group {
    [Key]
    public int GroupId{ get; set;}
    public string Name {get; set;}
    public virtual ICollection<Student> Students {get; set;}
}

.

public class StudentDao {
    public void createStudent(Student student) {
        using (var db = new StorageContext()) {
            // without this also creates new Group.
            db.Groups.Attach(student.Group);    
            db.Students.Add(student);
            db.SaveChanges();
        }
    }

    public void updateStudent(Student student) {
        using (var db = new StorageContext()) {
            var original = db.Students.Find(student.StudentId);
            if (original != null) {
                original.Name = student.Name;
                original.Group =  student.Group;
                db.SaveChanges();   //exception
            }
        }
    }
}

解决方法

Without this (db.Groups.Attach(student.Group)) after saving Student I also have new Group

这是因为将实体添加到DbSet会将所有尚未被上下文跟踪的粘附实体标记为已添加.这是一个EF功能,不管你喜不喜欢,所以你必须先附加你不想重新插入的实体.

Moreover I can’t update student because I’m getting exception

出于某种原因,在更新方法中,学生及其组仍然附加到上下文.显然,StudentDao课程中还有其他一些活动.当您更新学生时,您必须确保此上下文的生命周期结束,否则(第二好)将学生和小组从中分离.

一个偏离主题的建议:如果可以的话,放弃这个DAO模式.当您在处理一个工作单元的类似服务的方法中使用DbContext及其DbSets时,EF工作得更好.使用这些DAO,它不可能在事务上工作,并且它们会导致大量重复的代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读