Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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#_Asp.net - Fatal编程技术网

C# 什么';以下实例化实体的方法有什么区别?

C# 什么';以下实例化实体的方法有什么区别?,c#,asp.net,C#,Asp.net,以下实例化实体的方法有什么区别?考虑到Student是数据库中的表 Student stud using (var ctx = new SchoolDBEntities()) { stud = ctx.Students.Where(s => s.StudentName == "New Student1").FirstOrDefault<Student>(); } using (var dbCtx = new SchoolDBEntities()

以下实例化实体的方法有什么区别?考虑到Student是数据库中的表

Student stud
using (var ctx = new SchoolDBEntities())
    {
        stud = ctx.Students.Where(s => s.StudentName == "New Student1").FirstOrDefault<Student>();
    }

using (var dbCtx = new SchoolDBEntities())
    {
        var student = new Student();
    }
学生螺柱
使用(var ctx=new SchoolDBEntities())
{
stud=ctx.Students.Where(s=>s.StudentName==“New Student1”).FirstOrDefault();
}
使用(var dbCtx=new SchoolDBEntities())
{
var student=新学生();
}

这只是风格上的差异还是我缺少的其他差异?

在第一种方式中,对象仍然附加到上下文。要更新一个实体,下一个实体,必须将对象添加到要保存的上下文中,通常是添加新记录

在第一种方法中,从数据库中提取
螺柱
,并且仍然附加到上下文。如果进行了更改,并调用了
db.SaveChanges()
,这些更改将反映在数据库中

Student stud
using (var ctx = new SchoolDBEntities())
    {
        stud = ctx.Students.Where(s => s.StudentName == "New Student1").FirstOrDefault<Student>();
    }

using (var dbCtx = new SchoolDBEntities())
    {
        var student = new Student();
    }
第二种方法是简单地创建
Student
的新实例。您必须调用
db.Students.Add(student)
将其添加到数据库中。这种方法不需要using语句,除非您想添加它

这仅仅是风格上的差异,还是我缺少了其他一些差异?


一个仍然链接到上下文,另一个只是数据库之外的一个对象,直到您添加它。

所以对于第二个,如果我进行了Student stud,然后编写了dbCtx。Student还会产生相同的结果吗?我的意思是说,我把它和上下文联系起来了,对吗?使用第一种方法,你可以抓住一个已经存在的学生。第二种方法将创建一个新学生,您可以通过
dbCtx.Students.add(student)