在DLL中嵌入只读SQLite数据库并通过实体框架进行连接

时间:2016-04-28 06:39:52

标签: sqlite c#-4.0 entity-framework-4

我要求我的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

2 个答案:

答案 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