3

Using the code below without using simple.data's InMemoryAdapter works just fine, when I switch to using a mock, I get an error thrown "Operation not valid due to the current state of the object"

I am unfortunately able to rely on referential integrity in my database and am therefore forced to use the strategy below to do my joins.

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);

I opened a bug in simple.data for this issue as well: https://github.com/markrendle/Simple.Data/issues/330

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

I did some more research - forked the last master branch and found that my example above works with the last version of the code (does not throw an exception) but it doesn't seem like Master has been released to Nuget.

Hugo Forte
  • 5,718
  • 5
  • 35
  • 44

0 Answers0