public void Populate(params Assembly[] dataFixtureAssemblies) { var fixtureContainer = new FixtureContainer(); foreach (var dataFixtureType in dataFixtureAssemblies.SelectMany(dataFixtureAssembly => dataFixtureAssembly.GetTypes().Where(t => typeof(DataFixture).IsAssignableFrom(t)))) { fixtureContainer.AddDataFixture((DataFixture)Activator.CreateInstance(dataFixtureType)); } var fixtureVertices = fixtureContainer.All.ToDictionary(fixture => fixture.GetType(), fixture => new Vertex(() => { using (var session = new Session(_sessionFactory.OpenSession())) using (var transaction = session.BeginTransaction()) { foreach (var entity in fixture.GetEntities(fixtureContainer)) { session.Save(entity); } transaction.Commit(); } })); foreach (var dataFixtureType in fixtureVertices.Keys) { var dataFixture = fixtureContainer.Get(dataFixtureType); var vertex = fixtureVertices[dataFixtureType]; vertex.AddDependencies(dataFixture.Dependencies.Select(d => fixtureVertices[d]).ToArray()); } var graph = new DirectedAcyclicGraph(fixtureVertices.Values); var graphExecutive = new ConcurrentGraphExecutive(graph); graphExecutive.ExecuteAndWait(); if (graphExecutive.VerticesFailed.Any()) { throw new AggregateException(graphExecutive.VerticesFailed.Select(e => e.Value)); } }
public void Populate(params Assembly[] dataFixtureAssemblies) { var fixtureContainer = new FixtureContainer(); foreach (var dataFixtureType in dataFixtureAssemblies.SelectMany(dataFixtureAssembly => dataFixtureAssembly.GetTypes().Where(t => typeof (DataFixture).IsAssignableFrom(t)))) fixtureContainer.AddDataFixture((DataFixture) Activator.CreateInstance(dataFixtureType)); var fixtureVertices = fixtureContainer.All.ToDictionary(fixture => fixture.GetType(), fixture => new Vertex(() => { using (var session = new Session(_sessionFactory.OpenSession())) using (var transaction = session.BeginTransaction()) { foreach (var entity in fixture.GetEntities(fixtureContainer)) session.Save(entity); transaction.Commit(); } })); foreach (var dataFixtureType in fixtureVertices.Keys) { var dataFixture = fixtureContainer.Get(dataFixtureType); var vertex = fixtureVertices[dataFixtureType]; vertex.AddDependencies(dataFixture.Dependencies.Select(d => fixtureVertices[d]).ToArray()); } var graph = new DirectedAcyclicGraph(fixtureVertices.Values); var graphExecutive = new ConcurrentGraphExecutive(graph); graphExecutive.ExecuteAndWait(); if (graphExecutive.VerticesFailed.Any()) throw new AggregateException(graphExecutive.VerticesFailed.Select(e=>e.Value)); }