Я использую SubSonic 3.0.0.3, и я не могу получить файлы ActiveRecord .tt для распознавания и генерации кода для внешних ключей и отношений в моей базе данных SQLite.
Я думаю, что он генерирует все остальное просто отлично, но после просмотра других фрагментов в Интернете, похоже, должно быть больше сгенерированного кода, чем просто отдельные классы в ActiveRecord.cs
и Structs.cs
для каждой из моих таблиц. Если заглянуть внутрь Structs.cs
, IsForeignKey
- это всегда false
для каждого столбца, даже для которого у меня есть внешний ключ. Кроме того, каждая Foreign Keys
область пуста в каждом сгенерированном классе ActiveRecord.
Я использую 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 справляется с одним: много и много: много отношений. Вот 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 говорит, что они включены, и когда я меняю данные в одном месте, например PersonID PersonID, он действительно изменяет этот PersonID в таблицах Dog и GroupPersons. Я попытался повторно добавить базу данных в проект, «запустить пользовательский инструмент», чтобы снова запустить файлы .tt, и даже удалить их и добавить их обратно. Я могу получить простой проект для сборки, который выполняет простые запросы и вставки, однако я только что попытался изменить первичный ключ одного Person, Dog или Group и x.Save (), но System.Data.SQLite вызвал исключение для все три, говоря SQLite error near "WHERE":syntax error.
в Save ().
Любые предложения о том, что я должен попытаться сделать дальше?