使用下面的代码而不使用 simple.data 的 InMemoryAdapter 工作得很好,当我切换到使用模拟时,我得到一个错误抛出“由于对象的当前状态,操作无效”
不幸的是,我能够依靠我的数据库中的引用完整性,因此被迫使用下面的策略来进行我的联接。
var adapter = new InMemoryAdapter();
adapter.SetKeyColumn("TopLevel", "TopLevelId");
adapter.SetKeyColumn("TopLevel", "TopLevelId");
adapter.SetAutoIncrementColumn("TopLevel", "TopLevelId");
adapter.SetAutoIncrementColumn("MidLevel", "MidLevelId");
Database.UseMockAdapter(adapter);
var db = Database.Open();
var masterId = 1;
var topLevel = db.TopLevel
.Insert(new
{
MasterId = masterId,
});
var midLevel = db.MidLevel
.Insert(new
{
TopLevelId = topLevel.TopLevelId,
});
var bottomLevel = db.bottomLevel
.Insert(new
{
MidLevelId = midLevel.MidLevelId,
});
dynamic midLevelLocator;
dynamic bottomLevelLocator;
//This throws an error:
var topLevelRecord = db.TopLevel.FindAllByMasterId(masterId)
.OuterJoin(db.MidLevel, out midLevelLocator)
.On(db.TopLevel.TopLevelId == midLevelLocator.TopLevelId)
.OuterJoin(db.bottomLevel, out bottomLevelLocator)
.On(db.MidLevel.MidLevelId == bottomLevelLocator.MidLevelId)
.With(midLevelLocator)
.With(bottomLevelLocator);
我也在 simple.data 中为这个问题打开了一个错误: https ://github.com/markrendle/Simple.Data/issues/330
- - - - - - - - -编辑 - - - - - - - - -
我做了一些更多的研究 - 分叉了最后一个 master 分支,发现我上面的示例适用于最后一个版本的代码(不会引发异常),但 Master 似乎没有发布到 Nuget。