实体框架6数据库第一和SQLite复合外键

时间:2017-04-27 13:48:16

标签: 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
  , 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 Database first映射这些表格,但我收到以下错误:

  • 错误6035:关系' FK_LocalParameter_0_0'有列 不是主要方面表格的关键部分 关系。这种关系被排除在外。

  • 错误6035:关系' FK_LocalParameter_0_1'有列 不是主要方面表格的关键部分 关系。这种关系被排除在外。

信息很清楚,但我不同意。我无法看到LocalQuotation的主键中没有列。

这是一个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>

0 个答案:

没有答案