C# 使用using和DBContext

C# 使用using和DBContext,c#,C#,我确保完全理解以下代码: static void Main(string[] args) { var person = new Person {FirstName = "Nadege", LastName = "Deroussen", BirthDate = DateTime.Now}; using (var context = new MyContext()) { context.Persons.Add(person); con

我确保完全理解以下代码:

static void Main(string[] args)
{
    var person = new Person {FirstName = "Nadege", 
    LastName = "Deroussen", BirthDate = DateTime.Now};
    using (var context = new MyContext())
    {
        context.Persons.Add(person);
        context.SaveChanges();
    }
    Console.Write("Person saved !");
    Console.ReadLine();
}
如您所见,使用is follow by{},如果我错了,请纠正我,这是否意味着上下文将在{}之后关闭?DBContext是否应该在每次这样的时候关闭


Cheers all

MyContext是从DBContext派生的,DBContext是从Dispossible派生的。当您不再使用对象时,需要对其进行处置。在这方面使用帮助。您不需要调用context.Dispose(),因为using将自己调用它


使用块后,如果上下文无效,则最好使用。若您不使用这个函数,并使用context.Dispose()然后调用context,那个么异常就会出现。因此,它有助于更好的代码管理。

MyContext是从DBContext派生的,而DBContext是从Dispossible派生的。当您不再使用对象时,需要对其进行处置。在这方面使用帮助。您不需要调用context.Dispose(),因为using将自己调用它


使用块后,如果上下文无效,则最好使用。若您不使用这个函数,并使用context.Dispose()然后调用context,那个么异常就会出现。因此,它有助于更好地管理代码。

是的,
DbContext
将关闭。有关更多详细信息,请参阅。

是,
DbContext
将关闭。有关更多详细信息,请参阅

如果我错了,请更正,这是否意味着上下文将在{}之后关闭

是的,它会被处理掉的。您的代码有效地:

var context = new MyContext();
try
{
    context.Persons.Add(person);
    context.SaveChanges();
}
finally
{
    context.Dispose();
}
DBContext是否应该在每次这样的时候关闭

假设这是LINQ to SQL。但是,一般来说,最好处理任何实现了
IDisposable
的东西,除非您确实知道不需要这样做。(基本上,在某些情况下,
IDisposable
的实现是其他东西带来的不方便的副作用。)即使在这种情况下,我也会继续这样做

如果我错了,请更正,这是否意味着上下文将在{}之后关闭

是的,它会被处理掉的。您的代码有效地:

var context = new MyContext();
try
{
    context.Persons.Add(person);
    context.SaveChanges();
}
finally
{
    context.Dispose();
}
DBContext是否应该在每次这样的时候关闭


假设这是LINQ to SQL。但是,一般来说,最好处理任何实现了
IDisposable
的东西,除非您确实知道不需要这样做。(基本上,在某些情况下,
IDisposable
的实现是其他东西带来的不方便的副作用。)即使在这种情况下,我也会继续这样做。

这不是范围界定,而是处置。没有第一句话,你的答案是可以的,但是第一部分是误导性的。我也写了关于处置的文章。是的,这就是为什么我说没有第一句话,它是可以的。我建议您删除第一句。
{}
定义范围,而不是使用指令本身定义
<代码>for
的工作原理是一样的。它不是范围界定,而是处置。没有第一句话,你的答案是可以的,但是第一部分是误导性的。我也写了关于处置的文章。是的,这就是为什么我说没有第一句话,它是可以的。我建议您删除第一句。
{}
定义范围,而不是使用指令本身定义
for
的工作原理与此相同。