我知道使用 'PRAGMA foreign_keys = ON' 或在我的 SQLite 连接字符串中包含一个属性,如下所示:
con = "Data source = myData.sdb; foreign keys = true";
我还制作了一个演示进行测试,它工作正常,但是演示非常简单,父表只有一个主键。现在我要处理一个更复杂的情况,级联根本不起作用。这是我的表格(父母和孩子):
-- Parent table
create table ChuyenCongTac(
MaNV varchar(12) references NhanVien(MaNV) on delete cascade on update cascade,
NgayChuyenCT datetime,
MaPhongTruoc int references PhongBan(MaPhong) on delete cascade on update cascade
MaPhongSau int references PhongBan(MaPhong) on delete cascade on update cascade,
NoiCongTacNgoai nvarchar(100),
primary key (MaNV,NgayChuyenCT)
);
-- Child table
create table ChucVuChuyenCongTac(
MaNV varchar(12) references ChuyenCongTac(MaNV) on delete cascade on update cascade,
NgayChuyenCT datetime references ChuyenCongTac(NgayChuyenCT) on delete cascade on update cascade,
CongTacTruoc bit,
primary key(MaNV,NgayChuyenCT,MaChucVu,CongTacTruoc)
)
我认为我的级联声明有一些问题,你觉得它们有什么问题吗?这里值得注意的一点是父表有一个 2 列的主键(一个双主键)。我不确定是否可以。我希望这是我在创建表查询时的错,而不是 SQLite。上次,在 SQLite 中成功进行级联后,我非常高兴,这让我非常愿意在我当前的项目中使用 SQLite。
更新
我现在知道更新和删除级联的问题,只是重新设计了表。但是,它仅在 VS 2010 的 SQLite 查询窗口中有效(首先使用 PRAGMA foreign_keys=on)。我的 C# 代码不起作用,而我在演示项目中已成功完成。真的卡在这了。