EF Core多对多数据

时间:2018-08-23 13:16:48

标签: sqlite entity-framework-core ef-database-first

我有一个SQLite数据库,我想首先将其与EF Core数据库一起使用。 它有一个用户表和一个用户可以属于的组表,并且有一个映射表,因为用户可以属于多个组。

b

当我对此进行脚手架安装时,我从-- holds users CREATE TABLE IF NOT EXISTS user ( _id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, ); -- holds groups users can belong to CREATE TABLE IF NOT EXISTS group ( _id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, ); -- holds user group membership CREATE TABLE IF NOT EXISTS map_group_user ( group_id INTEGER, user_id INTEGER, UNIQUE (group_id,user_id) ON CONFLICT REPLACE, FOREIGN KEY(group_id) REFERENCES group(_id) ON DELETE CASCADE, FOREIGN KEY(user_id) REFERENCES user(_id) ON DELETE CASCADE ); 得到警告,它无法标识map_group_user的主键,并且它不会生成模型,并且User和Group模型都不包含对另一个的引用(预期)。

1 个答案:

答案 0 :(得分:1)

尝试向map_group_user桥接表中添加显式主键:

CREATE TABLE IF NOT EXISTS map_group_user (
    group_id INTEGER,
    user_id INTEGER,
    UNIQUE (group_id,user_id) ON CONFLICT REPLACE,
    FOREIGN KEY(group_id) REFERENCES "group"(_id) ON DELETE CASCADE,
    FOREIGN KEY(user_id) REFERENCES user(_id) ON DELETE CASCADE,
    PRIMARY KEY (group_id, user_id)
);

map_group_user表的逻辑主键是group_iduser_id的组合,理想情况下,每个组合应该只出现一次。

顺便说一句,请避免使用保留的SQL关键字(例如group)来命名表和列。我不知道这是否给您带来错误,但是我将"group"用双引号引起来。