C# 我是否应该使用;使用;声明在这里还是保持原样?

C# 我是否应该使用;使用;声明在这里还是保持原样?,c#,ef-core-2.0,C#,Ef Core 2.0,我在几年前发现了这种创建DbContext实例的方法,只对其进行了轻微的更新。 我的代码可以工作,但我想知道它是否会在将来引起任何问题。 我的问题是,我应该在上下文调用中使用“using”语句还是保持原样 这是针对RAGEMP的,一种GTAV修改。服务器同步播放器,并在需要时调用MySQL数据库 public class DefaultDbContext : DbContext { public DefaultDbContext(DbContextOptions options) : b

我在几年前发现了这种创建DbContext实例的方法,只对其进行了轻微的更新。 我的代码可以工作,但我想知道它是否会在将来引起任何问题。 我的问题是,我应该在上下文调用中使用“using”语句还是保持原样

这是针对RAGEMP的,一种GTAV修改。服务器同步播放器,并在需要时调用MySQL数据库

public class DefaultDbContext : DbContext
{
    public DefaultDbContext(DbContextOptions options) : base(options)
    {

    }

    // Accounts table
    public DbSet<Account> Accounts { get; set; }

}

public class ContextFactory : IDesignTimeDbContextFactory<DefaultDbContext>
{
    private static DefaultDbContext _instance;

    public DefaultDbContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<DefaultDbContext>();

        builder.
            UseMySql(@"Server=localhost;
                    database=efcore;
                    uid=root;
                    pwd=;",
                optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(DefaultDbContext).GetTypeInfo().Assembly.GetName().Name));

        return new DefaultDbContext(builder.Options);
    }

    public static DefaultDbContext Instance
    {
        get
        {
            if (_instance != null) return _instance;

            return _instance = new ContextFactory().CreateDbContext(new string[] { });
        }
        private set { }
    }

如果您保持DbContext的短期性,并且不试图缓存它们或过度重用实例,那么这种方法没有什么错

然而,我个人觉得这有点冗长。对于内部应用程序,我倾向于将设置和连接字符串保存在app.config中,只使用
using
语句

using(var db = new MyContext())
{
    var lotsOfStuff = db.SomeTable.Where(x => x.IsAwesome);
    //
}
说到这里,实际上你只需要遵守几个规则(这不是一个固执己见的回答)

  • 不要试图过度使用DbContext。它们是内部缓存的,创建和关闭它们的开销很小
  • 不要试图不必要地将一切隐藏在抽象层后面
  • 除非您需要编写性能代码,否则始终首先编写可读性和可维护性代码 更新

    也许我误解了什么,但如果我将更改保存到 数据库往往比不上,我的方法那么糟糕吗?小 当某些内容发生更改时,会更新内容,而不是更新大量数据 到处

    这取决于你打开
    DefaultDbContext
    的时间,我的意思是,如果只打开几次查询,那么一年就可以了

    上下文的设计是为了快速打开和关闭,而不是为了长时间保持打开和活动。这样做有时会给你带来更多的问题


    经常保存到数据库中,虽然这很有意义,但这并不是真正的问题

    谢谢你的回答!也许我误解了一些事情,但如果我经常保存对数据库的更改,那么我的方法是否糟糕?当某些东西发生变化时,小东西会得到更新,而不是到处都是大块数据。例如,游戏中的玩家金钱、玩家服装。。。每当游戏发生变化时,它都会在同一时刻将变化保存到数据库中。So TL;DR的变化很小,但经常发生。
    using(var db = new MyContext())
    {
        var lotsOfStuff = db.SomeTable.Where(x => x.IsAwesome);
        //
    }