2016-04-28 1 views
0

J'ai besoin que ma DLL ait une base de données en lecture seule. J'ai fait ma base de données comme une ressource incorporée mais je ne suis pas capable de la comprendre pour me connecter à la base de données via le framework d'entité.Incorporation d'une base de données SQLite en lecture seule dans une DLL et une connexion via 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(); 
     } 

Cela fonctionne uniquement lorsque nous copions la base de données dans l'application cliente. Je ne veux pas fournir la base de données en tant que fichier séparé. Je veux l'incorporer dans la DLL et ne donner que la DLL à d'autres applications.

Cordialement, Vivek

Répondre

0

Comme CL. SQLite doit être dans un fichier .sqlite indépendant, il ne peut pas être intégré. Jetez un oeil à SQL Server Compact. C'est tout ce dont vous avez besoin, une base de données SQL embarquée à laquelle vous pouvez accéder en utilisant Entity Framework.

Voici un tutorial comment se connecter à EF.

0

bases de données SQLite sont basées sur des fichiers.

La bibliothèque SQLite a la capacité d'accéder aux fichiers via un virtual file system, ce qui permet de rediriger l'accès aux fichiers vers un autre emplacement. Il serait donc possible d'implémenter un VFS qui accède à une ressource. Toutefois, System.Data.SQLite ne semble pas autoriser l'enregistrement de votre propre VFS.

+0

L'exécution de l'application qui consomme cette DLL aura une référence aux DLL supportant SQLite. Mon seul problème est de communiquer à la ressource embarquée DB.Sqlite via le framework d'entité – user2058239