【发布时间】:2010-08-24 01:14:09
【问题描述】:
我使用的是 SubSonic 3.0.0.3,我似乎无法让 ActiveRecord .tt 文件识别和生成 SQLite 数据库中的外键和关系的代码。
我认为它生成其他所有内容都很好,但是在查看其他在线 sn-ps 之后,看起来应该有更多生成的代码,而不仅仅是 ActiveRecord.cs 和 Structs.cs 中的每个表中的单个类。在Structs.cs 内部,IsForeignKey 对于每一列总是false,即使是我定义了外键的那些。此外,每个生成的 ActiveRecord 类中的每个Foreign Keys 区域都是空的。
我在项目中使用 VS2008 并引用了 SubSonic 3.0.0.3、System.Data.SQLite 1.0.66.0 和 System.Data.SQLite.Linq 2.0.38.0。我使用 SQLite Expert Personal 3.1.0.2076 创建了数据库。我制作了一些虚拟表来尝试测试 SubSonic 如何处理 one:many 和 many:many 关系。这是为我的小型数据库吐出的 DDL SQLite Expert:
CREATE TABLE [Person] (
[PersonID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[PersonName] TEXT NOT NULL,
[PersonAge] INT NOT NULL
);
CREATE TABLE [Group] (
[GroupID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[GroupName] TEXT NOT NULL,
[GroupDescription] TEXT NOT NULL
);
CREATE TABLE [Dog] (
[DogID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[PersonID] INT NOT NULL CONSTRAINT [DogPersonFK] REFERENCES [Person]([PersonID]) ON DELETE CASCADE ON UPDATE CASCADE,
[DogName] TEXT NOT NULL);
CREATE TABLE [GroupPersons] (
[GroupID] INTEGER NOT NULL CONSTRAINT [GroupPersonToGroupFK] REFERENCES [Group]([GroupID]) ON DELETE CASCADE ON UPDATE CASCADE,
[PersonID] INTEGER NOT NULL CONSTRAINT [GroupPersonToPersonFK] REFERENCES [Person]([PersonID]) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT [sqlite_autoindex_GroupPersons_1] PRIMARY KEY ([GroupID], [PersonID]));
我知道外键已启用并在数据库中工作 - SQLite 专家表示它们已启用,当我在一个地方更改数据时,例如 Person 的 PersonID,它确实会更改 Dog 和 GroupPersons 表中的 PersonID。我尝试将数据库重新添加到项目中,“运行自定义工具”以使 .tt 文件再次执行,甚至删除它们并将它们添加回来。我可以构建一个简单的项目来执行简单的查询和插入,但是我刚才尝试更改单个人、狗或组的主键和 x.Save() 但 System.Data.SQLite 抛出了异常所有三个,在 Save() 中说 SQLite error near "WHERE":syntax error.。
对我接下来应该尝试做什么有什么建议吗?
【问题讨论】:
-
x.Save()函数中使用的查询是什么?
标签: c# sqlite subsonic foreign-keys subsonic3