EF Core 的数据优先多对多

Data first many to many for EF Core

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

-- 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
);    

当我构建它时,我收到来自 dotnet ef scaffold 的警告,它无法识别 map_group_user 的主键并且它不会生成模型,并且用户和组模型都不包含对另一个(预期)的任何引用。

尝试将显式主键添加到 map_group_user 桥 table:

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 table 的逻辑主键是 group_iduser_id 的组合,每个组合最好只出现一次。

顺便说一下,请避免使用保留的 SQL 关键字命名您的 table 和列,例如 group。我不知道这是否会给您带来错误,但我已将 "group" 放在双引号中以将其转义。