Search code examples
servicestackormlite-servicestacktooling

How can I get a list of entities from existing data with ServiceStack.OrmLite?


I am using test data to run integration tests. So I am using the following method

public static IEnumerable<ProductPhase> GetProductPhases()
{
    return new List<ProductPhase>
    {
        new ProductPhase { Id = "FirstPhase", Order = 1 },
        new ProductPhase { Id = "SecondPhase", Order = 2 },
        new ProductPhase { Id = "ThirdPhase", Order = 3 }, // ...
    }
}

[Test]
public void MyTest()
{
    using (var db = HostContext.TryResolve<IDbConnectionFactory>.OpenDbConnection())
    {
        db.DeleteAll<ProductPhase>();
        db.InsertAll(GetProductPhases());
    }

    // Do test stuff ...
}

To validate completely my integration tests I need to be synchronized with data which is inserted in production. This data can contain dozens of lines and each time I need to refactor GetProductPhases() method manually, so I am near the reality.

What I am looking for is a method to select existing SQL data to something that I can copy paste to ProductPhase object initializer.

So, the ability to call something like:

db.Select<ProductPhase>().DumpList() // where db is connected to production server, so I can get actual values and it returns a string with new List<ProductPhase> { new ProductPhase { Id = "FirstPhase", Order = 1 }, new ProductPhase { Id = "SecondPhase", Order = 2 }, new ProductPhase { Id = "ThirdPhase", Order = 3 }, // ... }

Maybe there is a better method to do that, I don't know, I am open to alternatives.

Thank you.


Solution

  • I would save the results to CSV with .ToCsv() extension method than deserialize it before the test starts. Typically I'd save the CSV in an external .csv file (that's set to copy to output folder) so its easy to update.