我想用Simple.Data做一個簡單的連接,但我無法使它工作。我敢肯定,我失去了一些東西,但我不明白這一點...Simple.Data框架:連接不起作用
SQL:
CREATE TABLE TestA
(
ID INTEGER PRIMARY KEY,
Txt TEXT
);
CREATE TABLE TestB
(
ID INTEGER PRIMARY KEY,
Aref INTEGER,
Txt TEXT,
FOREIGN KEY(Aref) REFERENCES TestA(ID)
);
INSERT INTO TestA
VALUES (1, 'This is Test A!');
INSERT INTO TestB
VALUES (1, 1, 'This is TestB!');
C#:
db.TestB.Find(db.TestB.Aref = db.TestA.ID);
如果我運行代碼,我會得到一個RuntimeBinderException:'Simple.Data.ObjectReference'不包含'Aref'的定義。
我使用Simple.Data.Core /阿土v0.12.2.2和Simple.Data.Sqlite v0.12.2.4
我已經檢查了Docs,但我看不到我的錯誤。我做錯了什麼?
編輯: 我也試過指數風格:
db["TestB"].Find(db["TestB"]["TestA"]["ID"] == db["TestB"]["Aref"]);
生成的SQL是這樣的:
select [TestB].* from [TestB] JOIN [TestA] ON ([TestA].[Aref] = [TestB].[ID]) where [TestA].[ID] = [TestB].[Aref]
好像是在ON部分的表被反轉,實際上它應該像WHERE部分...
我認爲你的操作員是錯誤的。根據文檔,它應該是'==' – MilkyWayJoe 2012-03-12 20:57:56
@MilkyWayJoe是的,你是對的。如果我使用==運算符,則會得到不同的異常,AdoAdapterException:「SQLite錯誤 no such column:TestA.ID」。 生成的SQL代碼:。選擇[TESTB] *從[TESTB],其中[TESTB] [阿里夫] = [特斯塔] [ID] – MBulli 2012-03-12 21:09:25
你有一個DB客戶端,可以在其中運行生成的選擇?如果你不這樣做,請下載並嘗試在那裏執行它。如果它有效,那麼也許它是一個錯誤。也許你可以嘗試更新你的項目模型(有時,在極端的情況下,我刪除我的對象,並再次創建它們) – MilkyWayJoe 2012-03-13 05:09:51