public Contract(Plan plan, string customerName, string type) { if (plan != null) { plans.Add(plan); plan.Contracts.Add(this); } this.customerName = customerName; this.type = type; variations = new List<ContractVariation>(); subcontracts = new IESI.HashedSet<Contract>(); parties = new IESI.HashedSet<Party>(); infos = new IESI.HashedSet<Info>(); }
public void UpdateProperty() { ClearCounts(); Plan p = new Plan("plan"); p.AddContract(new Contract(null, "gail", "phone")); ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); s.Persist(p); t.Commit(); s.Close(); AssertInsertCount(2); AssertUpdateCount(0); ClearCounts(); s = OpenSession(); t = s.BeginTransaction(); p = s.CreateCriteria<Plan>().UniqueResult<Plan>(); p.Description = "new plan"; Assert.That(p.Contracts.Count, Is.EqualTo(1)); Contract c = p.Contracts.First(); c.CustomerName = "yogi"; t.Commit(); s.Close(); AssertUpdateCount(0); ClearCounts(); s = OpenSession(); t = s.BeginTransaction(); p = s.CreateCriteria<Plan>().UniqueResult<Plan>(); Assert.That(p.Contracts.Count, Is.EqualTo(1)); c = p.Contracts.First(); Assert.That(c.CustomerName, Is.EqualTo("gail")); if (isPlanContractsBidirectional) { Assert.That(c.Plans.Count, Is.EqualTo(1)); Assert.That(c.Plans.First(), Is.SameAs(p)); } s.Delete(p); Assert.That(s.CreateCriteria<Contract>().SetProjection(Projections.RowCountInt64()).UniqueResult(), Is.EqualTo(0L)); Assert.That(s.CreateCriteria<Plan>().SetProjection(Projections.RowCountInt64()).UniqueResult(), Is.EqualTo(0L)); t.Commit(); s.Close(); AssertUpdateCount(0); AssertDeleteCount(2); }
public void MoveManyToManyElementToNewEntityCollection() { ClearCounts(); Plan p = new Plan("plan"); p.AddContract(new Contract(null, "gail", "phone")); ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); s.Persist(p); t.Commit(); s.Close(); AssertInsertCount(2); AssertUpdateCount(0); ClearCounts(); s = OpenSession(); t = s.BeginTransaction(); p = s.CreateCriteria<Plan>().UniqueResult<Plan>(); Assert.That(p.Contracts.Count, Is.EqualTo(1)); Contract c = p.Contracts.First(); Assert.That(c.CustomerName, Is.EqualTo("gail")); if (isPlanContractsBidirectional) { Assert.That(c.Plans.First(), Is.SameAs(p)); } p.RemoveContract(c); Plan p2 = new Plan("new plan"); p2.AddContract(c); s.Save(p2); t.Commit(); s.Close(); AssertInsertCount(1); AssertUpdateCount(isPlanVersioned && isContractVersioned ? 2 : 0); ClearCounts(); s = OpenSession(); t = s.BeginTransaction(); p = s.CreateCriteria<Plan>().Add(Restrictions.IdEq(p.Id)).UniqueResult<Plan>(); p2 = s.CreateCriteria<Plan>().Add(Restrictions.IdEq(p2.Id)).UniqueResult<Plan>(); /* if (isPlanContractsInverse) { Assert.That(p.Contracts.Count, Is.EqualTo(1)); c = p.Contracts.First(); Assert.That(c.CustomerName, Is.EqualTo("gail")); if (isPlanContractsBidirectional) { Assert.That(c.Plans.First(), Is.SameAs(p)); } assertEquals( 0, p2.getContracts().size() ); } else { */ Assert.That(p.Contracts.Count, Is.EqualTo(0)); Assert.That(p2.Contracts.Count, Is.EqualTo(1)); c = p2.Contracts.First(); Assert.That(c.CustomerName, Is.EqualTo("gail")); if (isPlanContractsBidirectional) { Assert.That(c.Plans.First(), Is.SameAs(p2)); } //} s.Delete(p); s.Delete(p2); Assert.That(s.CreateCriteria<Plan>().SetProjection(Projections.RowCountInt64()).UniqueResult(), Is.EqualTo(0L)); Assert.That(s.CreateCriteria<Contract>().SetProjection(Projections.RowCountInt64()).UniqueResult(), Is.EqualTo(0L)); t.Commit(); s.Close(); AssertUpdateCount(0); AssertDeleteCount(3); }
public void ManyToManyCollectionOptimisticLockingWithUpdate() { ClearCounts(); Plan pOrig = new Plan("plan"); Contract cOrig = new Contract(null, "gail", "phone"); pOrig.AddContract(cOrig); ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); s.Persist(pOrig); t.Commit(); s.Close(); AssertInsertCount(2); AssertUpdateCount(0); ClearCounts(); s = OpenSession(); t = s.BeginTransaction(); Plan p = s.Get<Plan>(pOrig.Id); Contract newC = new Contract(null, "yogi", "pawprint"); p.AddContract(newC); t.Commit(); s.Close(); AssertInsertCount(1); AssertUpdateCount(isContractVersioned ? 1 : 0); ClearCounts(); s = OpenSession(); t = s.BeginTransaction(); pOrig.RemoveContract(cOrig); s.Update(pOrig); try { t.Commit(); Assert.That(isContractVersioned, Is.False); } catch (StaleObjectStateException ex) { Assert.That(isContractVersioned, Is.True); t.Rollback(); } s.Close(); s = OpenSession(); t = s.BeginTransaction(); p = s.CreateCriteria<Plan>().UniqueResult<Plan>(); s.Delete(p); s.CreateQuery("delete from Contract").ExecuteUpdate(); Assert.That(s.CreateCriteria<Plan>().SetProjection(Projections.RowCountInt64()).UniqueResult<long>(), Is.EqualTo(0L)); Assert.That(s.CreateCriteria<Contract>().SetProjection(Projections.RowCountInt64()).UniqueResult<long>(), Is.EqualTo(0L)); t.Commit(); s.Close(); }
public void RemoveManyToManyElementByDelete() { ClearCounts(); Plan p = new Plan("plan"); Contract c = new Contract(null, "gail", "phone"); p.AddContract(c); ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); s.Persist(p); t.Commit(); s.Close(); AssertInsertCount(2); AssertUpdateCount(0); ClearCounts(); p.RemoveContract(c); Assert.That(p.Contracts.Count, Is.EqualTo(0)); if (isPlanContractsBidirectional) { Assert.That(c.Plans.Count, Is.EqualTo(0)); } s = OpenSession(); t = s.BeginTransaction(); s.Update(p); s.Delete(c); t.Commit(); s.Close(); AssertUpdateCount(isPlanVersioned ? 1 : 0); AssertDeleteCount(1); ClearCounts(); s = OpenSession(); t = s.BeginTransaction(); p = s.CreateCriteria<Plan>().UniqueResult<Plan>(); Assert.That(p.Contracts.Count, Is.EqualTo(0)); s.Delete(p); Assert.That(s.CreateCriteria<Plan>().SetProjection(Projections.RowCountInt64()).UniqueResult<long>(), Is.EqualTo(0L)); Assert.That(s.CreateCriteria<Contract>().SetProjection(Projections.RowCountInt64()).UniqueResult<long>(), Is.EqualTo(0L)); t.Commit(); s.Close(); AssertUpdateCount(0); AssertDeleteCount(1); }
public void CreateWithNonEmptyManyToManyCollectionMergeWithNewElement() { ClearCounts(); Plan p = new Plan("plan"); Contract c = new Contract(null, "gail", "phone"); p.AddContract(c); ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); s.Persist(p); t.Commit(); s.Close(); AssertInsertCount(2); AssertUpdateCount(0); ClearCounts(); Contract newC = new Contract(null, "yogi", "mail"); p.AddContract(newC); s = OpenSession(); t = s.BeginTransaction(); p = (Plan)s.Merge(p); t.Commit(); s.Close(); AssertInsertCount(1); AssertUpdateCount(isContractVersioned && isPlanVersioned ? 1 : 0); // NH-specific: Hibernate issues a seperate UPDATE for the version number ClearCounts(); s = OpenSession(); t = s.BeginTransaction(); p = s.CreateCriteria<Plan>().UniqueResult<Plan>(); Assert.That(p.Contracts.Count, Is.EqualTo(2)); foreach (Contract aContract in p.Contracts) { if (aContract.Id == c.Id) { Assert.That(aContract.CustomerName, Is.EqualTo("gail")); } else if (!aContract.CustomerName.Equals(newC.CustomerName)) { Assert.Fail("unknown contract:" + aContract.CustomerName); } if (isPlanContractsBidirectional) { Assert.That(aContract.Plans.First(), Is.SameAs(p)); } } s.Delete(p); Assert.That(s.CreateCriteria<Plan>().SetProjection(Projections.RowCountInt64()).UniqueResult(), Is.EqualTo(0L)); Assert.That(s.CreateCriteria<Contract>().SetProjection(Projections.RowCountInt64()).UniqueResult(), Is.EqualTo(0L)); t.Commit(); s.Close(); AssertUpdateCount(0); AssertDeleteCount(3); }
public void CreateWithEmptyManyToManyCollectionMergeWithExistingElement() { ClearCounts(); Plan p = new Plan("plan"); Contract c = new Contract(null, "gail", "phone"); ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); s.Persist(p); s.Persist(c); t.Commit(); s.Close(); AssertInsertCount(2); AssertUpdateCount(0); ClearCounts(); p.AddContract(c); s = OpenSession(); t = s.BeginTransaction(); p = (Plan)s.Merge(p); t.Commit(); s.Close(); AssertInsertCount(0); AssertUpdateCount(isContractVersioned && isPlanVersioned ? 2 : 0); ClearCounts(); s = OpenSession(); t = s.BeginTransaction(); p = s.CreateCriteria<Plan>().UniqueResult<Plan>(); Assert.That(p.Contracts.Count, Is.EqualTo(1)); c = p.Contracts.First(); Assert.That(c.CustomerName, Is.EqualTo("gail")); if (isPlanContractsBidirectional) { Assert.That(c.Plans.First(), Is.SameAs(p)); } s.Delete(p); Assert.That(s.CreateCriteria<Plan>().SetProjection(Projections.RowCountInt64()).UniqueResult<long>(), Is.EqualTo(0L)); Assert.That(s.CreateCriteria<Contract>().SetProjection(Projections.RowCountInt64()).UniqueResult<long>(), Is.EqualTo(0L)); t.Commit(); s.Close(); AssertUpdateCount(0); AssertDeleteCount(2); }
public void CreateWithNonEmptyManyToManyCollectionUpdateWithNewElement() { ClearCounts(); Plan p = new Plan("plan"); Contract c = new Contract(null, "gail", "phone"); p.AddContract(c); ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); s.Persist(p); t.Commit(); s.Close(); AssertInsertCount(2); AssertUpdateCount(0); ClearCounts(); Contract newC = new Contract(null, "sherman", "telepathy"); p.AddContract(newC); s = OpenSession(); t = s.BeginTransaction(); s.Update(p); t.Commit(); s.Close(); AssertInsertCount(1); AssertUpdateCount(isContractVersioned ? 1 : 0); ClearCounts(); s = OpenSession(); t = s.BeginTransaction(); p = s.CreateCriteria<Plan>().UniqueResult<Plan>(); Assert.That(p.Contracts.Count, Is.EqualTo(2)); foreach (Contract aContract in p.Contracts) { if (aContract.Id == c.Id) { Assert.That(aContract.CustomerName, Is.EqualTo("gail")); } else if (aContract.Id == newC.Id) { Assert.That(aContract.CustomerName, Is.EqualTo("sherman")); } else { Assert.Fail("unknown contract"); } if (isPlanContractsBidirectional) { Assert.That(aContract.Plans.First(), Is.SameAs(p)); } } s.Delete(p); Assert.That(s.CreateCriteria<Contract>().SetProjection(Projections.RowCountInt64()).UniqueResult<long>(), Is.EqualTo(0L)); Assert.That(s.CreateCriteria<Plan>().SetProjection(Projections.RowCountInt64()).UniqueResult<long>(), Is.EqualTo(0L)); t.Commit(); s.Close(); AssertUpdateCount(0); AssertDeleteCount(3); }
public void AddNewManyToManyElementToPersistentEntity() { ClearCounts(); Plan p = new Plan("plan"); ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); s.Persist(p); t.Commit(); s.Close(); AssertInsertCount(1); AssertUpdateCount(0); ClearCounts(); s = OpenSession(); t = s.BeginTransaction(); p = s.Get<Plan>(p.Id); Assert.That(p.Contracts.Count, Is.EqualTo(0)); p.AddContract(new Contract(null, "gail", "phone")); t.Commit(); s.Close(); AssertInsertCount(1); AssertUpdateCount(isContractVersioned ? 1 : 0); ClearCounts(); s = OpenSession(); t = s.BeginTransaction(); p = s.CreateCriteria<Plan>().UniqueResult<Plan>(); Assert.That(p.Contracts.Count, Is.EqualTo(1)); Contract c = p.Contracts.First(); Assert.That(c.CustomerName, Is.EqualTo("gail")); if (isPlanContractsBidirectional) { Assert.That(c.Plans.Count, Is.EqualTo(1)); Assert.That(c.Plans.First(), Is.SameAs(p)); } s.Delete(p); Assert.That(s.CreateCriteria<Contract>().SetProjection(Projections.RowCountInt64()).UniqueResult(), Is.EqualTo(0L)); Assert.That(s.CreateCriteria<Plan>().SetProjection(Projections.RowCountInt64()).UniqueResult(), Is.EqualTo(0L)); t.Commit(); s.Close(); AssertUpdateCount(0); AssertDeleteCount(2); }