在 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。