熱心な読み込み (メソッド) を実行しようとすると.WithXyz()
、間違ったデータが返されます。セカンダリ テーブルの ID に結合されたメイン テーブルの「プロパティ」ではなく、両方のテーブルのプライマリ ID を使用して結合を試みます。
これは私のコード、Simple.Data.MySql、または Simple.Data のバグですか?
NuGet の Simple.Data (0.18.3.1) と Simple.Data.MySql (0.18.3.0) のバージョンを使用しています。
私のコード:
var traceListener = new SimpleDataTraceListener(); // For logging SQL
Trace.Listeners.Add(traceListener);
var db = Database.Open();
OrderItem orderItem = db.OrderItems
.WithCustomer()
.Get(1)
;
Console.WriteLine(traceListener.Output);
Console.WriteLine(orderItem.Customer.FullName);
これが私が期待するSQLの例です:
SELECT orderitem.id,
orderitem.customer_Id,
orderitem.productname,
customer.id AS __with1__Customer__id,
customer.fullname AS __with1__Customer__fullname
FROM orderitem
LEFT JOIN customer ON (orderitem.customer_Id = customer.id)
WHERE orderitem.id = ?p1 LIMIT 0, 1
?p1 (UInt64) = 1
実際に作成しているSQLのログは次のとおりです。
select orderitem.id,
orderitem.customer_Id,
orderitem.productname,
customer.id AS __with1__Customer__id,
customer.fullname AS __with1__Customer__fullname
from orderitem
LEFT JOIN customer ON (orderitem.id = customer.id)
WHERE orderitem.id = ?p1 LIMIT 0, 1
?p1 (UInt64) = 1
私のデータ:
CREATE TABLE `customer` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`fullname` VARCHAR(130) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `fullname_UNIQUE` (`fullname` ASC)
);
CREATE TABLE `orderitem` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`customer_Id` BIGINT(20) NOT NULL,
`productname` VARCHAR(130) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`customer_Id`) REFERENCES `customer` (`id`)
);
INSERT INTO `customer` (fullname)
VALUES ('wall-E'), ('merlyn'), ('someone');
INSERT INTO `orderitem` (customer_Id, productName)
VALUES (3, 'test item 1'), (2, 'test item 2'), (1, 'test item 3');