我有一个带有两个表的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>