在 DLL 中嵌入只读 SQLite 数据库并通过 Entity Framework 连接
Embedding a readonly SQLite Database in a DLL and conenct via Entity Framework
我要求我的 DLL 应该有一个只读数据库。我将我的数据库作为嵌入式资源,但我无法通过 entity framework.
连接到数据库
try
{
var dataSet = ConfigurationManager.GetSection("system.data") as System.Data.DataSet;
dataSet.Tables[0].Rows.Add("SQLite Data Provider"
, ".Net Framework Data Provider for SQLite"
, "System.Data.SQLite"
, "System.Data.SQLite.SQLiteFactory, System.Data.SQLite");
}
catch (System.Data.ConstraintException) { }
string providerName = "System.Data.SQLite";
string serverName = "NameSpace.DB.sqlite";
// Initialize the connection string builder for the
// underlying provider.
SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
// Set the properties for the data source.
sqlBuilder.DataSource = serverName;
sqlBuilder.InitialCatalog = "DB.sqlite";
sqlBuilder.IntegratedSecurity = true;
// Build the SqlConnection connection string.
string providerString = sqlBuilder.ToString();
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder =
new EntityConnectionStringBuilder();
//Set the provider name.
entityBuilder.Provider = providerName;
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = providerString;
// Set the Metadata location.
entityBuilder.Metadata = @"res://*/DataModel.DB.csdl|
res://*/DataModel.DB.ssdl|
res://*/DataModel.DB.msl";
Console.WriteLine(entityBuilder.ToString());
using (EntityConnection conn =
new EntityConnection(entityBuilder.ToString()))
{
conn.Open();
Console.WriteLine("Just testing the connection.");
_container = new MyEntities(conn);
var usersList = _container.UserTable.ToList();
}
它仅在我们将数据库复制到客户端应用程序时起作用。我不想将数据库作为单独的文件提供。我想把它嵌入到dll中,只把dll给其他应用程序。
此致,
维维克
SQLite 数据库基于文件。
SQLite 库能够通过 virtual file system 访问文件,这将允许将文件访问重定向到其他地方。因此可以实现访问资源的 VFS。
但是,System.Data.SQLite 似乎不允许注册您自己的 VFS。
作为CL。说 SQLite 必须在一个独立的 .sqlite 文件中,不能嵌入。看看SQL Server Compact。这就是您所需要的,一个可以使用 Entity Framework 访问的嵌入式 SQL 数据库。
这里是 tutorial 如何连接到 EF。
我要求我的 DLL 应该有一个只读数据库。我将我的数据库作为嵌入式资源,但我无法通过 entity framework.
连接到数据库try
{
var dataSet = ConfigurationManager.GetSection("system.data") as System.Data.DataSet;
dataSet.Tables[0].Rows.Add("SQLite Data Provider"
, ".Net Framework Data Provider for SQLite"
, "System.Data.SQLite"
, "System.Data.SQLite.SQLiteFactory, System.Data.SQLite");
}
catch (System.Data.ConstraintException) { }
string providerName = "System.Data.SQLite";
string serverName = "NameSpace.DB.sqlite";
// Initialize the connection string builder for the
// underlying provider.
SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
// Set the properties for the data source.
sqlBuilder.DataSource = serverName;
sqlBuilder.InitialCatalog = "DB.sqlite";
sqlBuilder.IntegratedSecurity = true;
// Build the SqlConnection connection string.
string providerString = sqlBuilder.ToString();
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder =
new EntityConnectionStringBuilder();
//Set the provider name.
entityBuilder.Provider = providerName;
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = providerString;
// Set the Metadata location.
entityBuilder.Metadata = @"res://*/DataModel.DB.csdl|
res://*/DataModel.DB.ssdl|
res://*/DataModel.DB.msl";
Console.WriteLine(entityBuilder.ToString());
using (EntityConnection conn =
new EntityConnection(entityBuilder.ToString()))
{
conn.Open();
Console.WriteLine("Just testing the connection.");
_container = new MyEntities(conn);
var usersList = _container.UserTable.ToList();
}
它仅在我们将数据库复制到客户端应用程序时起作用。我不想将数据库作为单独的文件提供。我想把它嵌入到dll中,只把dll给其他应用程序。
此致, 维维克
SQLite 数据库基于文件。
SQLite 库能够通过 virtual file system 访问文件,这将允许将文件访问重定向到其他地方。因此可以实现访问资源的 VFS。
但是,System.Data.SQLite 似乎不允许注册您自己的 VFS。
作为CL。说 SQLite 必须在一个独立的 .sqlite 文件中,不能嵌入。看看SQL Server Compact。这就是您所需要的,一个可以使用 Entity Framework 访问的嵌入式 SQL 数据库。
这里是 tutorial 如何连接到 EF。