SQLite EF6在运行时以编程方式设置连接字符串

WebDucer

我尝试将表格EF 3.5迁移到6(以SQLite作为数据库)。我们无法在应用程序配置文件中设置连接字符串(这可以有效解决ef6问题)。我们必须在运行时以编程方式设置连接字符串(在用户选择SQLite文件之后)。

这是我们的app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="testContext" connectionString="data source=Data\testdb.sqlite;Foreign Keys=True"
      providerName="System.Data.SQLite" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite" />
      <remove invariant="System.Data.SQLite.EF6" />
      <add name="System.Data.SQLite" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
    </DbProviderFactories>
  </system.data>
</configuration>

在这里DbContext

public class FirmwareContext : DbContext
{
    public FirmwareContext()
        : this(DEFAULT_CONNECTION)
    {

    }

    public FirmwareContext(string connextionNameOrString)
        : base(connextionNameOrString)
    {

    }
}

如果我使用app.config中的连接名称进行连接,那么所有的连接都不会出现问题。如果我尝试通过第二个构造函数传递连接字符串,则会失败

这是一个小例子

SQLiteConnectionStringBuilder builder =
    factory.CreateConnectionStringBuilder() as SQLiteConnectionStringBuilder;
builder.DataSource = dataSource; // Path to file name of the user
builder.ForeignKeys = true;

var context = new FirmwareContext(builder.ToString());

var context = new FirmwareContext(builder.ToString());
var test = context.Firmware.FirstOrDefault();

我遇到了以下异常(“Schlüsselwortwiht nichtunterstützt:'外国钥匙'。”)=>不支持钥匙“外国钥匙”。如果删除外键集,则会收到以下异常(“提供程序未返回ProviderManifestToken字符串。”)和一些内部异常。

似乎bas(connectionString)构建了MSSQL连接字符串,并且用于SQLite。

如何使我的第二个构造函数与sqlite兼容?

凯巴特尔

我遇到了同样的问题。我通过使用与DbContext基类不同的构造函数找到了一种解决方法:

public DbContext(DbConnection existingConnection, bool contextOwnsConnection);

使用此替代,您可以传递一个SQLiteConnection,而您将其设置为连接字符串。因此,例如,您可以向您的FirmwareContext添加新的构造函数。

public FirmwareContext(string connectionString)
    : base(new SQLiteConnection() { ConnectionString = connectionString }, true)
{
}

甚至

public FirmwareContext(string filename)
    : base(new SQLiteConnection() { ConnectionString =
            new SQLiteConnectionStringBuilder()
                { DataSource = filename, ForeignKeys = true }
            .ConnectionString }, true)
{
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF6在运行时更改连接字符串

来自分类Dev

在EF 6中在运行时更改连接字符串

来自分类Dev

如何在运行时在EF7 Core中更改连接字符串?

来自分类Dev

在运行时使用连接字符串

来自分类Dev

Dapper 在运行时更改连接字符串

来自分类Dev

在运行时设置数据库连接字符串

来自分类Dev

实体框架在运行时设置连接字符串

来自分类Dev

实体框架6设置连接字符串运行时

来自分类Dev

在sqlite求和字符串中连接字符串

来自分类Dev

在sqlite求和字符串中连接字符串

来自分类Dev

如何以编程方式访问SQLite表(将字符串转换为表名)

来自分类Dev

Android中SQLite的运行时异常

来自分类Dev

SQLite连接或SQLite异步连接

来自分类Dev

使用EF6在运行时连接到SQL Server-部分类构造函数的问题

来自分类Dev

SQLite字符串过滤

来自分类Dev

自动将字符串解析为目标基本类型的方式(在运行时)

来自分类Dev

如何使用FieldDefs在运行时创建新的SQLite文件和表?

来自分类Dev

Android,在运行时查看SQLite数据库(与其他问题不同)

来自分类Dev

如何在运行时初始化Peewee SQLite数据库?

来自分类Dev

如何在运行时更改NLog目标的连接字符串?

来自分类Dev

Azure Web服务-在运行时更改数据库连接字符串

来自分类Dev

对于每个调用,在运行时将连接字符串传递给Entity Framework

来自分类Dev

实体框架-在运行时更改连接字符串(需要解释)

来自分类Dev

Castle和NLog在运行时更改连接字符串

来自分类Dev

在运行时更改连接字符串–这是正确的方法吗?

来自分类Dev

Castle和NLog在运行时更改连接字符串

来自分类Dev

C#在运行时更改自定义连接字符串

来自分类Dev

在运行时设置Android微调器字符串

来自分类Dev

PyQt:在运行时转换模块字符串

Related 相关文章

  1. 1

    EF6在运行时更改连接字符串

  2. 2

    在EF 6中在运行时更改连接字符串

  3. 3

    如何在运行时在EF7 Core中更改连接字符串?

  4. 4

    在运行时使用连接字符串

  5. 5

    Dapper 在运行时更改连接字符串

  6. 6

    在运行时设置数据库连接字符串

  7. 7

    实体框架在运行时设置连接字符串

  8. 8

    实体框架6设置连接字符串运行时

  9. 9

    在sqlite求和字符串中连接字符串

  10. 10

    在sqlite求和字符串中连接字符串

  11. 11

    如何以编程方式访问SQLite表(将字符串转换为表名)

  12. 12

    Android中SQLite的运行时异常

  13. 13

    SQLite连接或SQLite异步连接

  14. 14

    使用EF6在运行时连接到SQL Server-部分类构造函数的问题

  15. 15

    SQLite字符串过滤

  16. 16

    自动将字符串解析为目标基本类型的方式(在运行时)

  17. 17

    如何使用FieldDefs在运行时创建新的SQLite文件和表?

  18. 18

    Android,在运行时查看SQLite数据库(与其他问题不同)

  19. 19

    如何在运行时初始化Peewee SQLite数据库?

  20. 20

    如何在运行时更改NLog目标的连接字符串?

  21. 21

    Azure Web服务-在运行时更改数据库连接字符串

  22. 22

    对于每个调用,在运行时将连接字符串传递给Entity Framework

  23. 23

    实体框架-在运行时更改连接字符串(需要解释)

  24. 24

    Castle和NLog在运行时更改连接字符串

  25. 25

    在运行时更改连接字符串–这是正确的方法吗?

  26. 26

    Castle和NLog在运行时更改连接字符串

  27. 27

    C#在运行时更改自定义连接字符串

  28. 28

    在运行时设置Android微调器字符串

  29. 29

    PyQt:在运行时转换模块字符串

热门标签

归档