C# 我是否应该使用;使用;声明在这里还是保持原样?
我在几年前发现了这种创建DbContext实例的方法,只对其进行了轻微的更新。 我的代码可以工作,但我想知道它是否会在将来引起任何问题。 我的问题是,我应该在上下文调用中使用“using”语句还是保持原样 这是针对RAGEMP的,一种GTAV修改。服务器同步播放器,并在需要时调用MySQL数据库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
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);
//
}
说到这里,实际上你只需要遵守几个规则(这不是一个固执己见的回答)
DefaultDbContext
的时间,我的意思是,如果只打开几次查询,那么一年就可以了
上下文的设计是为了快速打开和关闭,而不是为了长时间保持打开和活动。这样做有时会给你带来更多的问题
经常保存到数据库中,虽然这很有意义,但这并不是真正的问题 谢谢你的回答!也许我误解了一些事情,但如果我经常保存对数据库的更改,那么我的方法是否糟糕?当某些东西发生变化时,小东西会得到更新,而不是到处都是大块数据。例如,游戏中的玩家金钱、玩家服装。。。每当游戏发生变化时,它都会在同一时刻将变化保存到数据库中。So TL;DR的变化很小,但经常发生。
using(var db = new MyContext())
{
var lotsOfStuff = db.SomeTable.Where(x => x.IsAwesome);
//
}