gpt4 book ai didi

entity-framework - Entity Framework 并调用 context.dispose()

转载 作者:行者123 更新时间:2023-12-03 05:40:07 25 4
gpt4 key购买 nike

什么时候应该使用 Entity Framework 调用DbContext.dispose()

  1. 这个想象的方法不好吗?

    public static string GetName(string userId)
    {
    var context = new DomainDbContext();
    var userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId);
    context.Dispose();
    return userName;
    }
  2. 这样更好吗?

    public static string GetName(string userId)
    {
    string userName;
    using(var context = new DomainDbContext()) {
    userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId);
    context.Dispose();
    }
    return userName;
    }
  3. 这是否更好,也就是说,在使用 using() 时不应该调用 context.Dispose() 吗?

    public static string GetName(string userId)
    {
    string userName;
    using(var context = new DomainDbContext()) {
    userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId);
    }
    return userName;
    }

最佳答案

事实上,这是两个问题合而为一:

  1. 什么时候应该Dispose() 上下文?
  2. 我的上下文的生命周期应该是多长?

答案:

  1. 从不1usingtry-finally block 中的隐式 Dispose()。当异常较早发生时,可能会错过单独的 Dispose 语句。此外,在大多数常见情况下,根本不调用 Dispose (无论是隐式还是显式)isn't harmful .

  2. 参见例如Entity Framework 4 - lifespan/scope of context in a winform application 。简而言之:生命周期应该“短”,静态上下文不好。

<小时/>

1 正如一些人评论的那样,此规则的一个异常(exception)是当上下文是实现 IDisposable 本身并共享其生命周期的组件的一部分时。在这种情况下,您需要在组件的 Dispose 方法中调用 context.Dispose()

关于entity-framework - Entity Framework 并调用 context.dispose(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15666824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com