当前位置: 首页 > 知识库问答 >
问题:

重用实体框架Sqlite DBContext安全吗?

况野
2023-03-14
  public class MyDbContext : DbContext {
    public MyDbContext(bool readOnlyFlag) {
      // Monitor.Enter(theLock); // needed ??
      this.readOnlyFlag = readOnlyFlag; 
      // Database.EnsureCreated(); // needed ??
    }

    public DbSet<MyData> MyData { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
      string connectionString = "Data Source=C:\\mydb.db;";
      if (readOnlyFlag) connectionString += "Mode=ReadOnly;";
      optionsBuilder.UseSqlite(connectionString);
    }

    public override void Dispose() {
      // Database.CloseConnection(); // needed ??
      base.Dispose();
      // Monitor.Exit(theLock); // needed ??
    }

    readonly bool readOnlyFlag;
    // readonly object theLock = new object(); // needed ??
  }

后来呢:

using (var dbc = new MyDbContext(true)) {
  dbc.MyData.Where( ... code
}

我从多个并发线程调用这样的代码来运行不同的查询…(在。NET Core3.0控制台应用程序中)

问题:

谢了!

共有1个答案

印高阳
2023-03-14

您确定您是数据的唯一用户吗?换句话说,您确定数据不会在DBContext的两种用法之间发生变化吗?

此外:您确定您的dbContext将始终以这种方式使用,或者将来这个dbContext可能会连接到一个真实的数据库?

如果您的线程现在和将来都是唯一的用户,那么重用dbcontext并没有太大的坏处。但是,请记住,不能保证在释放dbcontext之前确实写入了数据。此外:您的dbContext将把所有获取的数据保存在本地内存中,所以一段时间后,您将在本地内存中保存完整的数据库。

interface IRepositorySet<Tentity> : IEnumerable<Tentity>
     where Tentity : class, new()
{
     Tentity Add(Tentity entity);
     Tentity Update(Tentity entity);
     Tentity Delete(Tentity entity);
}
interface ISchoolsRepository
{
     // for simple queries / add / update / remove only
     IRepositorySet<School> Schools {get;}
     IRepositorySet<Teacher> Teachers {get;}
     IRepositorySet<Student> Students {get;}
}
 类似资料:
  • 我们正在启动一个新应用程序。我们想使用实体框架。我们几乎不怕意外删除sql行(尤其是意外设置相关数据等) 我想禁用每一次删除,因为我们只是用“validUntil”列标记每一行,而从不删除行。 我看到它可以通过sql中的角色来完成,但我希望所有逻辑和控制都只在代码中。 也许在实体框架核心中有新的特性来支持这一点?我知道它仍然可以用EF编写行sql,但我们并不害怕这种情况。 我还尝试删除实体关系的s

  • 我的迁移搞砸了,我在初始迁移时使用了,但现在我想删除所有的迁移,并从具有所有逻辑的初始迁移开始。 当我删除文件夹中的迁移并尝试时,它不会生成完整的文件(它是空的--因为自从上次(现在已删除)迁移以来,我没有做任何更改)。 是否有Disable-Migrations命令,以便我可以重新运行?

  • phpGrace 框架部署到非项目目录 将 phpGrace 框架部署到非项目目录可以使得系统更安全,也可以实现多个项目公用一套框架的目的。步骤如下: 1、将 phpGrace 文件夹放到非项目目录,如 : D:\phpGrace 2、改写入口文件,类似以下代码: <?php include 'D:\phpGrace\phpGrace.php'; 改变app目录名称 将 app 核心目录名改写也可

  • 问题内容: 我在TSQL中有以下查询 我在实体框架中有以下查询 当我尝试编译它时,我得到 错误3名称“ p”不在“等于”左侧的范围内。考虑在“等号”的任一侧交换表达式。 错误4名称“链接”不在“等于”右侧的范围内。考虑在“等号”的任一侧交换表达式。 问题答案: 错误究竟在说什么 应该 完整的代码

  • 实体框架5.0首先使用现有数据库编写代码。使用电动工具对类进行逆向工程。一切都很好。数据库有两个表。一个父母和一个孩子的外键返回到父母ID。ID都是带有自动增量的int。我添加了许多父母记录,现在想将孩子记录添加到特定的父母。我能看到的唯一方法是通过在父母表中搜索名称或其他属性并返回ID来找到适当的父母ID。然后在添加孩子时在外键属性中使用该ID。我不想设置新父母,所以这是将孩子添加到现有父母的唯

  • 问题内容: 我需要在每个用户已经有一个ID作为键的数据库中存储大量用户数据。但是,这些用户全部来自更大的用户池,因此,该ID不会增加并且无法自动生成。我需要能够手动设置ID。 是否有捷径可寻? 问题答案: 我进行了一些测试,这似乎对我在EF 7.0.0 rc1-final上有效: 我的测试代码: (完整的程序代码在这里:http : //pastebin.com/hSs9HZCP) 它可以正确插入