C# 在已连接的场景实体框架中添加新项
是否可以在实体框架的连接场景中添加实体。我可以更新数据,但对于添加和删除,它在连接模式下不工作C# 在已连接的场景实体框架中添加新项,c#,entity-framework-6,C#,Entity Framework 6,是否可以在实体框架的连接场景中添加实体。我可以更新数据,但对于添加和删除,它在连接模式下不工作 md.Configuration.AutoDetectChangesEnabled = true; var studentList = md.MyStudent.ToList<Student>(); studentList.Add(new Student { Stdname = "nm" }); md.SaveChanges(); md.Configuration.A
md.Configuration.AutoDetectChangesEnabled = true;
var studentList = md.MyStudent.ToList<Student>();
studentList.Add(new Student { Stdname = "nm" });
md.SaveChanges();
md.Configuration.AutoDetectChangesEnabled=true;
var studentList=md.MyStudent.ToList();
添加(新学生{Stdname=“nm”});
md.SaveChanges();
新项目(“nm”)不会被添加
已编辑
为什么这个工作,更新操作和添加不工作,有什么区别
数据库将被更新
Student studentToUpdate = studentList.Where(s => s.Stdname == "stdname1").FirstOrDefault<Student>();
studentToUpdate.Stdname = "Edited stdname3";
Student studentToUpdate=studentList.Where(s=>s.Stdname==“stdname1”).FirstOrDefault();
studentToUpdate.Stdname=“已编辑stdname3”;
尝试使用md.MyStudent.Add()
方法
一点解释
EF具有更改跟踪机制,因此它可以自动保留您对实体所做的更改。但是,EF必须了解您的对象/实体,以便能够检测到更改。
在第二个示例中,EF知道学生实体,因为它是由框架创建的,所以您对属于EF上下文的DbSet
实例应用了Where()
扩展方法
在第一个示例中,您还从
DbSet
检索了实体,但是这次您应用了ToList()
扩展方法,它创建了一个新的列表
实例,其中包含存储在数据库中的所有学员,但EF没有对该列表的引用,只有它知道列表中的实体。因此,如果您从该列表中添加/删除项目,EF将不知道您的更改。您仍然可以对列表中的实体进行更改,并将修改保存到数据库。您的代码不起作用,因为您的ToList()
返回一个与上下文无关的新列表。这与以下代码类似:
IList<Student> studentList = new List<Student>();
studentList.Add(new Student { Stdname = "nm" });
IList studentList=new List();
添加(新学生{Stdname=“nm”});
实体框架中的上下文并不关心程序中是否有列表并向其中添加了对象
编辑列表中的现有对象是有效的,因为它们是从上下文加载的,因此它们在上下文中“注册”
如果你想添加一个新对象,你必须将它添加到
md.MyStudent
,这样上下文就会看到应该添加一个新对象。谢谢,我知道这个方法,但是这个方法和断开连接模式有什么区别,似乎add()与连接无关,它也可以在断开连接模式下工作!!我说的对吗?我对你的studentList
变量一无所知。无法通过将另一个Student
对象添加到该列表中来持久化该对象。