我有一个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模型都不包含对另一个的引用(预期)。
答案 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_id
和user_id
的组合,理想情况下,每个组合应该只出现一次。
顺便说一句,请避免使用保留的SQL关键字(例如group
)来命名表和列。我不知道这是否给您带来错误,但是我将"group"
用双引号引起来。