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_id
和 user_id
的组合,每个组合最好只出现一次。
顺便说一下,请避免使用保留的 SQL 关键字命名您的 table 和列,例如 group
。我不知道这是否会给您带来错误,但我已将 "group"
放在双引号中以将其转义。
我有一个 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_id
和 user_id
的组合,每个组合最好只出现一次。
顺便说一下,请避免使用保留的 SQL 关键字命名您的 table 和列,例如 group
。我不知道这是否会给您带来错误,但我已将 "group"
放在双引号中以将其转义。