【问题标题】:SQLite in memory linked to .NET Entity Framework内存中的 SQLite 链接到 .NET Entity Framework
【发布时间】:2013-11-22 19:12:03
【问题描述】:

我有一个现有的(加密的)SQLite DB,我想动态解密并将其加载到内存中。有谁知道我如何告诉 c# .NET Entity Framework 使用我的“内存中”-DB?!

也许@App.Config 有一个选项?!我不希望我的数据库在 HDD 上被解密。

问候, 双空

编辑: 我想将整个 SQLite DB 加载到内存中(例如:变量、字节流......)并告诉 EF 与该对象/流进行通信。 我不想在我的 App.Config 中有这样的连接字符串:

  <connectionStrings>
  <add name="Chinook_Sqlite_AutoIncrementPKsEntities" connectionString="metadata=res://*/EF.Model1.csdl|res://*/EF.Model1.ssdl|res://*/EF.Model1.msl;provider=System.Data.SQLite;provider connection string=&quot;data source=EF\Chinook_Sqlite_AutoIncrementPKs.sqlite&quot;" providerName="System.Data.EntityClient" /></connectionStrings>
</configuration>

【问题讨论】:

  • 当你加载Entity Container它是In-Memory
  • 它会调用你的数据库。
  • 通常,我在连接字符串中告诉 EF 在哪里可以找到我的 SQLlite DB。但我首先想将它加载到内存(变量)中,然后将其“附加”到 EF ......所以 App.config 中没有 ConnectionsString
  • 当然,Entity Model 存在重载,您可以在其中提供带有 Entity Model 初始化的连接字符串。
  • @DonA:好的,但是连接字符串必须指向本地硬盘上的文件,对吧?!我想指向内存中的一个对象。

标签: c# .net sqlite frameworks entity


【解决方案1】:

在实体模型的初始化中提供连接字符串的实体模型存在重载。

var model = new yourModel(ModelConnStr());

辅助函数:

public static string ModelConnStr()
{
System.Data.SqlClient.SqlConnectionStringBuilder sqlcon = new System.Data.SqlClient.SqlConnectionStringBuilder();
sqlcon.DataSource = "your datasource";
sqlcon.InitialCatalog = "your db";
sqlcon.UserID = "id";
sqlcon.Password = "pswrd";
System.Data.EntityClient.EntityConnectionStringBuilder mdlcon = new System.Data.EntityClient.EntityConnectionStringBuilder();
mdlcon.Metadata = "res://*/BMModel.csdl|res://*/BMModel.ssdl|res://*/BMModel.msl";
mdlcon.Provider = "System.Data.SqlClient";
mdlcon.ProviderConnectionString = sqlcon.ConnectionString;
return mdlcon.ConnectionString;
}

现在使用 sqLite,您可以使用差异但相似的对象。

【讨论】:

  • 我在这里重复一遍:):好的,但是连接字符串必须指向本地硬盘上的文件,对吧?!我想指向内存中的一个对象。
  • 好吧,我不明白我会放什么@DataSource?!我用二进制流或其他东西将数据库读入内存,我现在将整个数据库放在内存中(已解密)......(SQLlite DB仍在硬盘上加密)......我如何告诉EF使用我的内存对象作为数据源?! ...我想在内存中进行所有数据库更改,并在程序关闭时将其写回硬盘(加密)
  • 您的服务器位置
  • 如果您将连接字符串写出,您会为datasource= 部分添加什么?
  • ATM 它将是 .: "databases\mydatabase.sqlite"。这指向我磁盘上的一个文件。我读到了一些关于放置这个的东西:“:memory:”......但我不知道我告诉EF在哪里从变量/内存加载数据库。
猜你喜欢
  • 2011-08-08
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2012-08-23
相关资源
最近更新 更多