C# 简单。MemoryAdapter中的数据抛出;由于对象的当前状态,操作无效。”;

C# 简单。MemoryAdapter中的数据抛出;由于对象的当前状态,操作无效。”;,c#,simple.data,C#,Simple.data,在不使用simple.data的InMemoryAdapter的情况下使用下面的代码效果很好,当我切换到使用模拟时,会抛出一个错误“由于对象的当前状态,操作无效” 不幸的是,我能够依赖数据库中的引用完整性,因此不得不使用下面的策略进行连接 var adapter = new InMemoryAdapter(); adapter.SetKeyColumn("TopLevel", "TopLevelId"); adapter.SetKeyColumn("TopLevel", "TopLevelId"

在不使用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中打开了此问题的一个bug:

-----------------编辑------------------

我做了更多的研究——分叉了最后一个master分支,发现上面的示例适用于最后一个版本的代码(不会引发异常),但看起来master并没有发布到Nuget