protected override VersionControl createVersionControl(string fromVersion, string friendlyName, string explicitNewVersionId = null) { var guid = explicitNewVersionId ?? "v$" + Guid.NewGuid().ToString().Replace("-", "_").Substring(0, 8); Tuple <string, object[]>[] cmds = { new Tuple <string, object[]>("select clone_schema(@0, @1)", new object[] { fromVersion, guid }), new Tuple <string, object[]>("insert into public.versioncontrol (id, name) values (@0, @1) on conflict (id) DO UPDATE SET ts = now(), name = EXCLUDED.name", new object[] { guid, friendlyName }) }; foreach (var cmd in cmds) { var runner = new CommandRunner(dbConnection); DbCommand[] sqlcmd = { runner.BuildCommand(cmd.Item1, cmd.Item2) }; try { runner.Transact(sqlcmd); } catch (Exception e) { throw e; } } // Try getting the record that was just added. this.getVersionControls(); var rec = this.versioncontrols.FirstOrDefault(d => d.id == guid); if (rec == null) { throw new KeyNotFoundException("VersionControl id: " + guid + " not found."); } return(rec); }
static void Main(string[] args) { //CallOne(); //CallTwo(); var db = new CommandRunner("dvds"); var cmd1 = db.BuildCommand("insert into actor(first_name, last_name, last_update"); var result = db.Transcat(cmd1); Console.WriteLine(result.Sum()); Console.Read(); }
void describe_client_additional_tests() { describe["fetch will succeed even if version and store has not been created"] = () => { string someVersion = "v$12345678"; string sql = "drop schema v$12345678 cascade"; before = () => { var fac = new Factory <NpgsqlConnection>(); var dbConnection = fac.Get(dbContext); CommandRunner runner = new CommandRunner(dbConnection); try { runner.Transact(new DbCommand[] { runner.BuildCommand(sql, null) }); } catch (Exception err) { // Expect -> 3F000: schema "v$12345678" does not exist Console.WriteLine(err.Message); } }; act = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); droid = droidClient.one <Droid>(someVersion, "id", "R2-D2"); }; it["droid should be null and no errors were thrown and unhandled"] = () => droid.should_be_null(); }; describe["can create version and store on demand"] = () => { string someVersion = "v$12345678"; before = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); var droid = new Droid { id = "2-1B", name = "2-1B", ts = DateTime.Now }; droidClient.save(someVersion, droid); }; act = () => { var p = ServiceProvider.Instance.GetService <VersionControlManager>(); versions = p.getVersionControls(); newVc = versions.FirstOrDefault(d => d.id == someVersion); }; it["new version control should be created if not exist"] = () => newVc.should_not_be_null(); }; describe["can associate a participant to an affiliation"] = () => { string someVersion = "v$12345678"; before = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); var droid = new Droid { id = "2-1B", name = "2-1B", ts = DateTime.Now }; droidClient.save(someVersion, droid); var empireClient = ServiceProvider.Instance.GetService <EmpireClient <Empire> >(); var badRoster = new List <Participant> { new Participant { id = droid.id, party = droid } }; var empire = new Empire { id = "empire", roster = badRoster, ts = DateTime.Now }; empireClient.save(someVersion, empire); }; act = () => { empireClient = ServiceProvider.Instance.GetService <EmpireClient <Empire> >(); empire = empireClient.one <Empire>(someVersion, "id", "empire"); var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); droid = droidClient.one <Droid>(someVersion, "id", "2-1B"); empireClient.associate <Participant, Droid>(someVersion, empire.id, droid.id); empire = empireClient.one <Empire>(someVersion, "id", "empire"); }; it["the empire should not be null"] = () => empire.should_not_be_null(); it["the droid should be a participant of the empire"] = () => empire.roster.FirstOrDefault(d => d.party.id == "2-1B").should_not_be_null(); }; describe["can associate a derived participant to an derived affiliation"] = () => { string someVersion = "v$12345678"; int beforeAssociateCount = 0; int afterAssociateCount = 0; before = () => { var droidExtendedClient = ServiceProvider.Instance.GetService <Client <DroidExtended> >(); var droidExtended = new DroidExtended { id = "2-1B", name = "2-1B", ts = DateTime.Now }; droidExtendedClient.save(someVersion, droidExtended); var empireExtendedClient = ServiceProvider.Instance.GetService <Client <EmpireExtended> >(); var badRoster = new List <ParticipantExtended> { new ParticipantExtended { id = droidExtended.id, party = droidExtended } }; var empire = new EmpireExtended { id = "empire", roster = badRoster, ts = DateTime.Now }; empireExtendedClient.save(someVersion, empire); }; act = () => { var empireExtendedClient = ServiceProvider.Instance.GetService <Client <EmpireExtended> >(); empireExtended = empireExtendedClient.one <EmpireExtended>(someVersion, "id", "empire"); beforeAssociateCount = empireExtended.roster.Count(); var droidExtendedClient = ServiceProvider.Instance.GetService <Client <DroidExtended> >(); droidExtended = droidExtendedClient.one <DroidExtended>(someVersion, "id", "2-1B"); empireExtendedClient.associate <ParticipantExtended, DroidExtended>(someVersion, empireExtended.id, droidExtended.id); empireExtended = empireExtendedClient.one <EmpireExtended>(someVersion, "id", "empire"); afterAssociateCount = empireExtended.roster.Count(); }; it["the derived empire should not be null"] = () => empireExtended.should_not_be_null(); it["the derived droid should be a derived participant of the derived empire"] = () => empireExtended.roster.FirstOrDefault(d => d.party.id == "2-1B").should_not_be_null(); it["the count of the roster after associate should always be the same or 1 more than the count of the roster before associate and the difference should never more than 1"] = () => afterAssociateCount.should(n => n <= beforeAssociateCount + 1); }; describe["can disassociate a participant from an affiliation"] = () => { string someVersion = "v$12345678"; before = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); var droid = new Droid { id = "2-1B", name = "2-1B", ts = DateTime.Now }; droidClient.save(someVersion, droid); var empireClient = ServiceProvider.Instance.GetService <EmpireClient <Empire> >(); var badRoster = new List <Participant> { new Participant { id = droid.id, party = droid } }; var empire = new Empire { id = "empire", roster = badRoster, ts = DateTime.Now }; empireClient.save(someVersion, empire); }; act = () => { empireClient = ServiceProvider.Instance.GetService <EmpireClient <Empire> >(); empire = empireClient.one <Empire>(someVersion, "id", "empire"); var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); droid = droidClient.one <Droid>(someVersion, "id", "2-1B"); empireClient.disassociate <Participant>(someVersion, empire.id, droid.id); empire = empireClient.one <Empire>(someVersion, "id", "empire"); }; it["the droid should no longer be a participant of the empire"] = () => empire.roster.FirstOrDefault(d => d.party.id == "2-1B").should_be_null(); }; describe["can pass a party type to one function for Affiliation"] = () => { string someVersion = "v$12345678"; before = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); var droid = new Droid { id = "2-1B", name = "2-1B", ts = DateTime.Now }; droidClient.save(someVersion, droid); var empireClient = ServiceProvider.Instance.GetService <EmpireClient <Empire> >(); var badRoster = new List <Participant> { new Participant { id = droid.id, party = droid } }; var empire = new Empire { id = "empire", roster = badRoster, ts = DateTime.Now }; empireClient.save(someVersion, empire); }; act = () => { empireClient = ServiceProvider.Instance.GetService <EmpireClient <Empire> >(); empire = empireClient.one <Empire>(someVersion, "id", "empire", typeof(Droid)); droid = empire.roster.FirstOrDefault(d => d.party.id == "2-1B").party as Droid; }; it["the party type, droid, should be the same as the one passed into the one function"] = () => droid.id.should_be("2-1B"); }; describe["can assign a list Affiliation to a Model"] = () => { string someVersion = "v$12345678"; int beforeAllianceCount = 0; int afterAllianceCount = 0; before = () => { empireClient = ServiceProvider.Instance.GetService <EmpireClient <Empire> >(); droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); // Create an Empire var empire = new Empire { id = "empire", roster = { }, ts = DateTime.Now }; empireClient.save(someVersion, empire); // Create a Droid var droid = new Droid { id = "2-1B", name = "2-1B", ts = DateTime.Now }; // Assign an Affiliation to the droid droid.alliance.Add(empire); droidClient.save(someVersion, droid); // Check how many alliances the droid has droid = droidClient.one <Droid>(someVersion, "id", "2-1B"); beforeAllianceCount = droid.alliance.Count(); }; act = () => { empire = empireClient.one <Empire>(someVersion, "id", "empire"); // Assign the same Affiliation to the droid 3 more times and get count foreach (int i in Enumerable.Range(1, 3)) { droid = droidClient.one <Droid>(someVersion, "id", "2-1B"); // New list of Affiliation droid.alliance = new List <Affiliation <Participant> > { empire }; droidClient.save(someVersion, droid); } droid = droidClient.one <Droid>(someVersion, "id", "2-1B"); afterAllianceCount = droid.alliance.Count(); }; it["the counts for the list of affiliation of a droid before replacing it 3 times with the same affiliation and proves the save function is doing a replace and not a concat"] = () => afterAllianceCount.should(count => count == beforeAllianceCount); }; describe["the party object is strongly typed even if it is from a derived affiliation of a derived affiliation"] = () => { string someVersion = "v$12345678"; before = () => { //Create a Affiliation that is derived from the Empire called FirstOrder ServiceProvider.Instance.Singleton <Client <FirstOrder> >(() => new Client <FirstOrder>(dbContext)); ServiceProvider.Instance.Singleton <Client <DroidExtended> >(() => new Client <DroidExtended>(dbContext)); firstOrderClient = ServiceProvider.Instance.GetService <Client <FirstOrder> >(); var firstOrder = new FirstOrder { id = "first-order", name = "The First Order", ts = DateTime.Now, roster = { } }; firstOrderClient.save <FirstOrder>(someVersion, firstOrder); var droidExtendedClient = ServiceProvider.Instance.GetService <Client <DroidExtended> >(); var droidExtended = new DroidExtended { id = "2-1B", name = "2-1B", ts = DateTime.Now, language = "None" }; droidExtendedClient.save(someVersion, droidExtended); firstOrderClient.associate <ParticipantExtended, DroidExtended>(someVersion, "first-order", droidExtended.id); }; act = () => { // Passing a "party" Type to an derived Affiliation and check that the party is a DroidExtended and not a dynamic type var firstOrderObj = firstOrderClient.one <Record <FirstOrder> >(someVersion, "id", "first-order", typeof(DroidExtended)); dynamicObject = firstOrderObj.current.roster.FirstOrDefault(d => d.party.id == "2-1B").party; }; it["the party object should be a type of DroidExtended"] = () => dynamicObject.GetType().should(t => t == typeof(DroidExtended)); }; describe["can count a collection"] = () => { string someVersion = "v$12345678"; long count = 0; before = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); var droid = new Droid { id = "2-1B", name = "2-1B", ts = DateTime.Now }; droidClient.save(someVersion, droid); }; describe["can count without a search filter"] = () => { act = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); count = droidClient.count(someVersion); }; it["the collection count is not zero"] = () => count.should_be_greater_than(0); }; describe["can count with a search filter"] = () => { act = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); count = droidClient.count(someVersion, "id", "2-1B"); }; it["the collection count should be one"] = () => count.should_be(1); }; }; describe["can search with offset and limit"] = () => { string someVersion = "v$12345678"; before = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); var droid = new Droid { id = "2-1B", name = "2-1B", ts = DateTime.Now }; droidClient.save(someVersion, droid); }; describe["can search without limit and filter"] = () => { List <Record <Droid> > list = new List <Record <Droid> >(); act = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); list = droidClient.search(someVersion, "id", "2-"); }; it["the collection should contain 1 record"] = () => list.Count().should_be(1); }; describe["can search with a limit and filter"] = () => { List <Record <Droid> > list = new List <Record <Droid> >(); before = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); var droid = new Droid { id = "R2-D2", name = "R2-D2", ts = DateTime.Now }; droidClient.save(someVersion, droid); }; act = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); list = droidClient.search(someVersion, "id", "R2", 0, 1); }; it["the collection should contain 1 record because limit was set to 1"] = () => list.Count().should_be(1); }; }; describe["when creating a new collection"] = () => { before = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); var droid = new Droid { id = "R2-D2", name = "R2-D2", ts = DateTime.Now }; droidClient.save(someVersion, droid); }; act = () => { var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); droid = droidClient.one <Droid>(someVersion, "id", "R2-D2"); }; it["the name of the droid"] = () => droid.name.should_be("R2-D2"); }; describe["when updating a party after associating it to an affiliation"] = () => { ServiceProvider.Instance.Singleton <HumanClient <Human> >(() => new HumanClient <Human>(dbContext)); ServiceProvider.Instance.Singleton <Client <RebelAlliance> >(() => new Client <RebelAlliance>(dbContext)); var humanClient = ServiceProvider.Instance.GetService <HumanClient <Human> >(); var rebelAllianceClient = ServiceProvider.Instance.GetService <Client <RebelAlliance> >(); Record <RebelAlliance> currentRebelAlliance = null; Human currentLeia = null; before = () => { var generalLeia = new Human { id = "organa-leia", name = "Leia Organa" }; humanClient.save(someVersion, generalLeia); var rebelAlliance = new RebelAlliance { id = "rebel-alliance", name = "The Rebel Alliance", ts = DateTime.Now, roster = { } }; rebelAllianceClient.save(someVersion, rebelAlliance); }; describe["can associate a party to an affiliation"] = () => { before = () => { // Get saved Leia. currentLeia = humanClient.one <Human>(someVersion, "id", "organa-leia"); // Associate Leia to Rebel Alliance. rebelAllianceClient.associate <Participant, Human>(someVersion, "rebel-alliance", currentLeia.id); }; act = () => { // Get the latest participants to Rebel Alliance. currentRebelAlliance = rebelAllianceClient.one <Record <RebelAlliance> >(someVersion, "id", "rebel-alliance", typeof(Human)); currentLeia = currentRebelAlliance.current.roster.FirstOrDefault(d => d.id == "organa-leia").party; }; it["the name of the party in the current roster"] = () => currentLeia.name.should_be("Leia Organa"); describe["can get the latest changes to a party from a roster"] = () => { before = () => { // Get saved Leia. currentLeia = humanClient.one <Human>(someVersion, "id", "organa-leia"); // Leia married Han. Update Leia's name. currentLeia.name = "Leia Organa Solo"; humanClient.save(someVersion, currentLeia); }; act = () => { // Get the latest participants to Rebel Alliance. currentRebelAlliance = rebelAllianceClient.one <Record <RebelAlliance> >(someVersion, "id", "rebel-alliance", typeof(Human)); currentLeia = currentRebelAlliance.current.roster.FirstOrDefault(d => d.id == "organa-leia").party; }; it["the name of the party in the current roster"] = () => currentLeia.name.should_be("Leia Organa Solo"); }; }; }; }
static void Main(string[] args) { string foo_bar_1 = "foo bar 1"; string someVersion = "v$12345678"; var dbContext = new DBContext { server = "127.0.0.1", port = 5432, database = "pccrms", userId = "editor", password = "******" }; // ---------------------------------------------------------------------------------------------------------- // ServiceProvider.Instance.Singleton<Client<Personnel>>(() => new Client<Personnel>(dbContext)); // var pclient = ServiceProvider.Instance.GetService<Client<Personnel>>(); // pclient.save("v$12345678", new Personnel { id = "0", name = "abc123", ts = DateTime.Now }); // var p = pclient.one<Personnel>("v$0", "id", "taoh02"); // var l = pclient.list("v$0", 0, 10); // ---------------------------------------------------------------------------------------------------------- ServiceProvider.Instance.Singleton <VersionControlManager>(() => new VersionControlManager(dbContext)); // var vc = ServiceProvider.Instance.GetService<VersionControlManager>(); // var vcs = vc.getVersionControls(); // var vcs1 = vc.getVersionControls().Where(d => d.name == foo_bar_1).ToList(); // vc.createNewVersionControl(foo_bar_1); // ---------------------------------------------------------------------------------------------------------- // Create an Affiliation // ServiceProvider.Instance.Singleton<EmpireClient<Empire>>(() => new EmpireClient<Empire>(dbContext)); // var empireClient = ServiceProvider.Instance.GetService<EmpireClient<Empire>>(); // var badRoster = new List<Participant>(); // var empire = new Empire { id = "empire", roster = badRoster, ts = DateTime.Now }; // empireClient.save(someVersion, empire); // Associate something to that affiliation // ServiceProvider.Instance.Singleton<DroidClient<Droid>>(() => new DroidClient<Droid>(dbContext)); // var droidClient = ServiceProvider.Instance.GetService<DroidClient<Droid>>(); // var droid = new Droid { id = "2-1B", name = "2-1B", ts = DateTime.Now }; // droidClient.save(someVersion, droid); // var empireObj = empireClient.one<Record<Empire>>(someVersion, "id", "empire"); // empireClient.associate<Participant, Droid>(someVersion, empireObj.id, droid.id); // ---------------------------------------------------------------------------------------------------------- // Create an extended Affiliation // ServiceProvider.Instance.Singleton<Client<EmpireExtended>>(() => new Client<EmpireExtended>(dbContext)); // var empireExtendedClient = ServiceProvider.Instance.GetService<Client<EmpireExtended>>(); // var badRosterExtended = new List<ParticipantExtended>(); // var empireExtended = new EmpireExtended { id = "empire", roster = badRosterExtended, ts = DateTime.Now }; // empireExtendedClient.save(someVersion, empireExtended); // Associate something that was also extended to that extended affiliation // ServiceProvider.Instance.Singleton<DroidClient<DroidExtended>>(() => new DroidClient<DroidExtended>(dbContext)); // var droidExtendedClient = ServiceProvider.Instance.GetService<DroidClient<DroidExtended>>(); // var droidExtended = new DroidExtended { id = "2-1B", name = "2-1B", ts = DateTime.Now, language = "None" }; // droidExtendedClient.save(someVersion, droidExtended); // var empireExtendedObj = empireExtendedClient.one<Record<EmpireExtended>>(someVersion, "id", "empire"); // empireExtendedClient.associate<ParticipantExtended, DroidExtended>(someVersion, empireExtendedObj.id, droidExtended.id); // Passing a "party" Type to an Affiliation and check that the party is a DroidExtended and not a dynamic type // empireExtendedObj = empireExtendedClient.one<Record<EmpireExtended>>(someVersion, "id", "empire", typeof(DroidExtended)); // Associate again 3 times and check for dupes // foreach(int i in Enumerable.Range(1, 3)) { // empireExtendedClient.associate<ParticipantExtended, DroidExtended>(someVersion, empireExtendedObj.id, droidExtended.id); // } // empireExtendedClient.associate<ParticipantExtended, DroidExtended>(someVersion, empireExtendedObj.id, droidExtended.id); // Disassociate from an Affiliation // empireExtendedClient.disassociate<ParticipantExtended>(someVersion, empireExtendedObj.id, droidExtended.id); // ---------------------------------------------------------------------------------------------------------- // Affiliation should fetch the latest party record. ServiceProvider.Instance.Singleton <HumanClient <Human> >(() => new HumanClient <Human>(dbContext)); ServiceProvider.Instance.Singleton <Client <RebelAlliance> >(() => new Client <RebelAlliance>(dbContext)); Record <RebelAlliance> currentRebelAlliance = null; Human currentLeia = null; var humanClient = ServiceProvider.Instance.GetService <HumanClient <Human> >(); var generalLeia = new Human { id = "organa-leia", name = "Leia Organa" }; humanClient.save(someVersion, generalLeia); var rebelAllianceClient = ServiceProvider.Instance.GetService <Client <RebelAlliance> >(); var rebelAlliance = new RebelAlliance { id = "rebel-alliance", name = "The Rebel Alliance", ts = DateTime.Now, roster = { } }; rebelAllianceClient.save(someVersion, rebelAlliance); // Associate Leia to Rebel Alliance. rebelAllianceClient.associate <Participant, Human>(someVersion, "rebel-alliance", generalLeia.id); // Get the latest participants to Rebel Alliance. currentRebelAlliance = rebelAllianceClient.one <Record <RebelAlliance> >(someVersion, "id", "rebel-alliance", typeof(Human)); currentLeia = currentRebelAlliance.current.roster.FirstOrDefault(d => d.id == "organa-leia").party; Console.WriteLine(currentLeia.name); // Leia married Han. Update Leia's name. generalLeia.name = "Leia Organa Solo"; humanClient.save(someVersion, generalLeia); // Get the latest participants to Rebel Alliance. currentRebelAlliance = rebelAllianceClient.one <Record <RebelAlliance> >(someVersion, "id", "rebel-alliance", typeof(Human)); currentLeia = currentRebelAlliance.current.roster.FirstOrDefault(d => d.id == "organa-leia").party; // Name should now be Leia Organa Solo. Console.WriteLine(currentLeia.name); // ---------------------------------------------------------------------------------------------------------- // Calling one when version and schema does not exist will not throw var fac = new Factory <NpgsqlConnection>(); var dbConnection = fac.Get(dbContext); CommandRunner runner = new CommandRunner(dbConnection); try { runner.Transact(new DbCommand[] { runner.BuildCommand("drop schema v$12345678 cascade", null) }); } catch (Exception err) { // Expect -> 3F000: schema "v$12345678" does not exist Console.WriteLine(err.Message); } ServiceProvider.Instance.Singleton <DroidClient <Droid> >(() => new DroidClient <Droid>(dbContext)); var someDroidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); var someDroid = someDroidClient.one <Droid>(someVersion, "id", "R2-D2"); Console.WriteLine(someDroid == null); // ---------------------------------------------------------------------------------------------------------- // Calling save when version and schema does not exist will not throw var newDroid = new Droid { id = "2-1B", name = "2-1B", ts = DateTime.Now }; someDroidClient.save("v$12345678", newDroid); var fetchNewDroid = someDroidClient.one <Droid>(someVersion, "id", "2-1B"); Console.WriteLine(fetchNewDroid != null); // ---------------------------------------------------------------------------------------------------------- //Create a Affiliation that is derived from the Empire called FirstOrder ServiceProvider.Instance.Singleton <Client <FirstOrder> >(() => new Client <FirstOrder>(dbContext)); ServiceProvider.Instance.Singleton <Client <DroidExtended> >(() => new Client <DroidExtended>(dbContext)); var firstOrderClient = ServiceProvider.Instance.GetService <Client <FirstOrder> >(); var firstOrder = new FirstOrder { id = "first-order", name = "The First Order", ts = DateTime.Now, roster = { } }; firstOrderClient.save <FirstOrder>(someVersion, firstOrder); var droidExtendedClient = ServiceProvider.Instance.GetService <Client <DroidExtended> >(); var droidExtended = new DroidExtended { id = "2-1B", name = "2-1B", ts = DateTime.Now, language = "None" }; droidExtendedClient.save(someVersion, droidExtended); firstOrderClient.associate <ParticipantExtended, DroidExtended>(someVersion, "first-order", droidExtended.id); // Passing a "party" Type to an derived Affiliation and check that the party is a DroidExtended and not a dynamic type var firstOrderObj = firstOrderClient.one <Record <FirstOrder> >(someVersion, "id", "first-order", typeof(DroidExtended)); // ---------------------------------------------------------------------------------------------------------- // Create List<IModel> as attribute of Model and associate it with Affiliation ServiceProvider.Instance.Singleton <EmpireClient <Empire> >(() => new EmpireClient <Empire>(dbContext)); var empireClient = ServiceProvider.Instance.GetService <EmpireClient <Empire> >(); ServiceProvider.Instance.Singleton <DroidClient <Droid> >(() => new DroidClient <Droid>(dbContext)); var droidClient = ServiceProvider.Instance.GetService <DroidClient <Droid> >(); // Create an Empire var empire = new Empire { id = "empire", roster = { }, ts = DateTime.Now }; empireClient.save(someVersion, empire); // Get a count var count = empireClient.count(someVersion, "id", "empire"); // Create a Droid var droid = new Droid { id = "2-1B", name = "2-1B", ts = DateTime.Now }; // Assign an Affiliation to the droid droid.alliance.Add(empire); droidClient.save(someVersion, droid); // Check how many alliances the droid has droid = droidClient.one <Droid>(someVersion, "id", "2-1B"); int allianceCount = 0; allianceCount = droid.alliance.Count(); // Assign the same Affiliation to the droid 3 times and get count foreach (int i in Enumerable.Range(1, 3)) { droid = droidClient.one <Droid>(someVersion, "id", "2-1B"); droid.alliance = new List <Affiliation <Participant> > { empire }; droidClient.save(someVersion, droid); } allianceCount = droid.alliance.Count(); // ---------------------------------------------------------------------------------------------------------- /** * packages\nspec.1.0.13\tools\NSpecRunner.exe C:\cygwin64\home\htao\Store\Store.Storage.Pgsql.Test\bin\Debug\Store.Storage.Pgsql.Test.dll */ }
public string runSql(string sql) { return(tryCatch(() => { var runner = new CommandRunner(dbConnection); runner.Transact(new DbCommand[] { runner.BuildCommand(sql, null) }); })); }