私のDLLには読み取り専用データベースが必要です。エンベデッドリソースとしてデータベースを作成しましたが、エンティティフレームワークを使用してデータベースに接続することはできません。DLLに読み取り専用SQLiteデータベースを組み込み、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だけを他のアプリケーションに与えたいと思っています。
よろしく、 のVivek
このDLLを消費するアプリケーションを実行すると、SQLiteをサポートするDLLが参照されます。私の唯一の問題はエンティティフレームワークを介して組み込みリソースDB.Sqliteと通信することです – user2058239