Sqlite 外键误匹配引用

Sqlite 外键误匹配引用,sqlite,flutter,flutter-moor,Sqlite,Flutter,Flutter Moor,我需要你的帮助, 我正在使用moor作为数据库创建一个带有Flatter的待办应用程序,我在数据库中创建了三个表,但只有两个表与我的问题有关,它们是任务和项目 发生异常。 SqliteException(SqliteException:外键不匹配-“任务”引用“项目”,SQL逻辑错误) 这是我的项目表 class Projects extends Table { IntColumn get id => integer().autoIncrement()(); IntCo

我需要你的帮助, 我正在使用moor作为数据库创建一个带有Flatter的待办应用程序,我在数据库中创建了三个表,但只有两个表与我的问题有关,它们是任务项目

发生异常。 SqliteException(SqliteException:外键不匹配-“任务”引用“项目”,SQL逻辑错误)

这是我的项目表

class Projects extends Table {
     IntColumn get id => integer().autoIncrement()();
     IntColumn get tasksNumber => integer()();
     TextColumn get projectName => text().withLength(min: 2, max: 32)();
     TextColumn get description => text().withLength(min: 2, max: 35)();
     DateTimeColumn get dateAndTime =>dateTime().withDefault(Constant(DateTime.now()))();
     BoolColumn get isCompleted => boolean().withDefault(Constant(false))();
     @override
     Set<Column> get primaryKey => {id, projectName};
}
类项目扩展表{
IntColumn get id=>integer().autoIncrement();
IntColumn get tasksNumber=>integer();
text column get projectName=>text().withLength(最小值:2,最大值:32)();
TextColumn get description=>text();
DateTimeColumn获取dateAndTime=>dateTime();
BoolColumn get isCompleted=>boolean();
@凌驾
设置get primaryKey=>{id,projectName};
}
第一项任务是

class Tasks extends Table {
     IntColumn get id => integer().autoIncrement()();
     TextColumn get project =>text().customConstraint('REFERENCES projects(projectName)')();
     TextColumn get taskName => text().withLength(min: 2, max: 32)();
     DateTimeColumn get dateAndTime =>dateTime().withDefault(Constant(DateTime.now()))();
     BoolColumn get isDone => boolean().withDefault(Constant(false))();
     @override
     Set<Column> get primaryKey => {id, taskName, project};
}
类任务扩展表{
IntColumn get id=>integer().autoIncrement();
TextColumn get project=>text().customConstraint('REFERENCES projects(projectName)')();
TextColumn get taskName=>text();
DateTimeColumn获取dateAndTime=>dateTime();
BoolColumn get isDone=>boolean().withDefault(常量(false))();
@凌驾
设置get primaryKey=>{id,taskName,project};
}

感谢您的帮助

我不确定,但原因似乎是子表fk引用了父表中的非pk列

在您的情况下,如果将
'REFERENCES projects(projectName)
更改为
'REFERENCES projects(id)
,则错误将消失。或使
projectName
成为主键