我要求我的DLL应该有一个只读数据库。我将我的数据库作为嵌入式资源,但我无法通过实体框架将其连接到数据库。
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提供给其他应用程序。
此致 的Vivek
答案 0 :(得分:0)
SQLite数据库基于文件。
SQLite库能够通过virtual file system访问文件,这样可以将文件访问重定向到其他地方。因此,可以实现访问资源的VFS。
但是,System.Data.SQLite似乎不允许注册您自己的VFS。
答案 1 :(得分:0)
作为CL。说SQLite必须是一个独立的.sqlite文件,它无法嵌入。看看SQL Server Compact。这就是您所需要的,您可以使用Entity Framework访问的嵌入式SQL数据库。
这是关于如何连接到EF的tutorial。