Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在已连接的场景实体框架中添加新项_C#_Entity Framework 6 - Fatal编程技术网

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
对象添加到该列表中来持久化该对象。