Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架6数据库优先和SQLite复合外键_C#_Sqlite_Entity Framework 6_System.data.sqlite - Fatal编程技术网

C# 实体框架6数据库优先和SQLite复合外键

C# 实体框架6数据库优先和SQLite复合外键,c#,sqlite,entity-framework-6,system.data.sqlite,C#,Sqlite,Entity Framework 6,System.data.sqlite,我有一个包含两个表的sqlite数据库,定义如下: CREATE TABLE LocalQuotation ( Id TEXT , Name TEXT NOT NULL , Author TEXT NOT NULL , Customer TEXT , RUA TEXT , ProjectName TEXT , CreationDate TIMESTAMP NOT NULL , LastUpdateDate TIMESTAMP NOT NULL , LastEd

我有一个包含两个表的sqlite数据库,定义如下:

CREATE TABLE LocalQuotation (
  Id TEXT
  , Name TEXT NOT NULL
  , Author TEXT NOT NULL
  , Customer TEXT
  , RUA TEXT
  , ProjectName TEXT
  , CreationDate TIMESTAMP NOT NULL
  , LastUpdateDate TIMESTAMP NOT NULL
  , LastEditor TEXT NOT NULL
  , Reviewer TEXT
  , CacheData BLOB NOT NULL
  , Status INTEGER NOT NULL
  , Version INTEGER
  , PRIMARY KEY (Id, Version)
);

CREATE TABLE LocalParameter (
  Name TEXT
  , Data BLOB NOT NULL
  , RefQuotation TEXT
  , QuotationVersion INTEGER
  , PRIMARY KEY (Name, RefQuotation, QuotationVersion)
  , FOREIGN KEY (RefQuotation, QuotationVersion) REFERENCES LocalQuotation(Id, Version)
);
我试图首先将这些表映射到Entity Framework 6数据库,但出现以下错误:

  • 错误6035:关系“FK_LocalParameter_0_0”的列 不是表的主键侧的表键的一部分 关系这种关系被排除在外

  • 错误6035:关系“FK\u LocalParameter\u 0\u 1”中的列 不是表的主键侧的表键的一部分 关系这种关系被排除在外

这个信息很清楚,但我不同意。我看不到哪些列不在
localquote
的主键中

这是EF6的错误还是我看不出来的一个小错误

编辑

当我的外键位于单个列上时,一切都能正常工作,因此我认为这不是配置问题,但以下是我实际使用的软件包:

<package id="EntityFramework" version="6.1.3" targetFramework="net452" />
<package id="EntityFramework.fr" version="6.1.3" targetFramework="net452" />
<package id="System.Data.SQLite" version="1.0.103" targetFramework="net452" />
<package id="System.Data.SQLite.Core" version="1.0.103" targetFramework="net452" />
<package id="System.Data.SQLite.EF6" version="1.0.103" targetFramework="net452" />
<package id="System.Data.SQLite.Linq" version="1.0.103" targetFramework="net452" />

和配置文件:

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="v11.0" />
    </parameters>
  </defaultConnectionFactory>
  <providers>
  <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
     <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
  </providers>
</entityFramework>
<system.data>
  <DbProviderFactories>
    <remove invariant="System.Data.SQLite.EF6" />
    <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
    <remove invariant="System.Data.SQLite" />
    <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    <remove invariant="MySql.Data.MySqlClient" />
    <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  </DbProviderFactories>
</system.data>


我不确定这是否会导致您的问题,但对于主键来说,文本字段是不好的选择,因为它们的存储方式以及可能需要比较多少数据才能达到相等。在MicrosoftSQLServer(我知道它不是SQLite)中,甚至不允许使用文本类型PK。确保SQLite确实将Id设置为主键字段。即使是这样,如果您使用identity int或GUID列,也可能会让EF玩得更好。我知道文本不是PK的最佳选择,但在我的情况下,这不是问题^^。是的,SQLite确实将文本设置为PK,因为在我添加版本作为PK的一部分之前,它一直在工作。我遇到了完全相同的问题,你有没有找到解决方案?@KimBayAndersen不幸的是,我不在这个问题发生时我工作过的公司工作,我不记得我选择了哪种解决方案……我想我没有找到一个好的解决方案,否则我会在这里提交。我的猜测是,我保留一个FK,并对其他列使用唯一约束,以确保每个条目的唯一性。对不起,我帮不了你多少忙。