Simple.Data InMemoryAdapter抛出“由于对象的当前状态,操作无效”。

时间:2014-01-24 22:02:26

标签: c# simple.data

使用下面的代码而不使用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

----------------- EDIT ------------------

我做了一些更多的研究 - 分叉了最后一个主分支,发现我上面的例子适用于代码的最后一个版本(没有抛出异常)但是看起来Master似乎没有发布给Nuget。 / p>

0 个答案:

没有答案