1

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

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 跟随 {},如果我错了,请纠正我,这是否意味着上下文将在 {} 之后关闭?DBContext 是否应该像这样每次都关闭?

祝大家欢呼

4

3 回答 3

6

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

它会被处理掉,是的。您的代码实际上是:

var context = new MyContext();
try
{
    context.Persons.Add(person);
    context.SaveChanges();
}
finally
{
    context.Dispose();
}

DBContext 是否应该像这样每次都关闭?

假设这是 LINQ to SQL,您实际上不需要处理 context。然而,一般来说,处理任何实现的东西是个好主意IDisposable——除非你真的知道你不需要。(基本上,在某些情况下,实现 ofIDisposable是其他东西的不便副作用。)即使在这种情况下,我也会继续这样做。

于 2013-04-23T06:30:17.103 回答
1

是的,DbContext将被关闭。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.80).aspx

于 2013-04-23T06:29:04.737 回答
0

MyContext 派生自 DBContext,DBContext 派生自 Disposable。当您不再使用它时,您需要处理您的对象。在这方面使用帮助。您不需要调用 context.Dispose() ,因为 using 会调用它自己。

在使用块后使用 using as 上下文是无效的。如果你不使用它并去 context.Dispose() 然后你调用 context ,那么就会出现异常。所以它有助于更​​好的代码管理。

于 2013-04-23T06:26:34.380 回答