我正在使用SubSonic 3.0.0.3,但似乎无法让ActiveRecord.tt文件识别和生成代码以处理我SQLite数据库中的外键和关联。我认为它可以很好地生成其他所有内容,但是在查看其他在线片段后,我发现除了每个表的单个类之外,应该有更多生成的代码。在查看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如何处理一对多和多对多的关系。以下是SQLite Expert针对我的小型数据库生成的DDL:
我知道外键在数据库中已启用并正常工作 - SQLite Expert显示它们已开启,当我在一个地方更改数据时,例如Person的PersonID,确实会在Dog和GroupPersons表中更改该PersonID。我尝试重新将数据库添加到项目中,“运行自定义工具”以再次执行.tt文件,甚至删除它们并重新添加它们。我可以构建一个简单的项目来执行简单的查询和插入,但是我刚刚尝试更改单个Person、Dog或Group的主键并x.Save(),但是System.Data.SQLite为所有三者抛出了异常,说
你有什么建议我接下来应该做些什么?
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 Expert显示它们已开启,当我在一个地方更改数据时,例如Person的PersonID,确实会在Dog和GroupPersons表中更改该PersonID。我尝试重新将数据库添加到项目中,“运行自定义工具”以再次执行.tt文件,甚至删除它们并重新添加它们。我可以构建一个简单的项目来执行简单的查询和插入,但是我刚刚尝试更改单个Person、Dog或Group的主键并x.Save(),但是System.Data.SQLite为所有三者抛出了异常,说
SQLite error near "WHERE":syntax error.
在Save()处。你有什么建议我接下来应该做些什么?
x.Save()
函数中使用了什么查询? - MPelletier