void AddMaster(Session session) { for (var i = 1; i <= MaxRecordCount; ++i) { var tmpTestMaster = new TestMaster(session); tmpTestMaster.Val = $"Master# {i}"; for (var j = 1; j <= MaxRecordCount; ++j) { var tmpTestDetail = new TestDetail(session); tmpTestDetail.Val = $"Detail# [{i}.{j}]"; tmpTestDetail.Master = tmpTestMaster; tmpTestDetail.Save(); } tmpTestMaster.Save(); } XPBaseCollection dataSource; if ((dataSource = gridControlMaster.DataSource as XPBaseCollection) != null) { dataSource.Reload(); } if ((dataSource = gridControlDetail.DataSource as XPBaseCollection) != null) { dataSource.Reload(); } }
static void Main(string[] args) { XpoDefault.ConnectionString = MSSqlConnectionProvider.GetConnectionString(".", "sa", "123", "testdb"); string ConnectionString = "Server=.;Database=testdb;User ID=sa;Password=123", tmpString; int tmpInt; Table4TestTransaction forTestTransaction = null; TestMaster testMaster1; TestDetail testDetail1; bool isNewObject, isObjectToSave; #if TEST_DISPOSE try { tmpString = GetMasterName(1); Console.WriteLine("MasterName = \"{0}\"", tmpString); } catch (Exception eException) { Console.WriteLine(eException.GetType().FullName + Environment.NewLine + "Message: " + eException.Message + Environment.NewLine + (eException.InnerException != null && !string.IsNullOrEmpty(eException.InnerException.Message) ? "InnerException.Message" + eException.InnerException.Message + Environment.NewLine : string.Empty) + "StackTrace:" + Environment.NewLine + eException.StackTrace); } #endif Session session = new Session(); #if TEST_PRE_FETCH XPCollection <TestMaster> masters = new XPCollection <TestMaster>(session, new InOperator(new OperandProperty(nameof(TestMaster.Id)), new ConstantValue(1), new ConstantValue(2))); session.PreFetch(session.GetClassInfo <TestMaster>(), masters, nameof(TestMaster.Details)); #endif #if TEST_DELETE_REFERENCE_OBJECT session.BeginTransaction(); testMaster1 = new TestMaster(session); testMaster1.Name = "Master (deleted)"; testDetail1 = new TestDetail(session); testDetail1.Name = "Detail"; testDetail1.Master = testMaster1; testMaster1.Save(); isNewObject = session.IsNewObject(testMaster1); isObjectToSave = session.IsObjectToSave(testMaster1); session.RemoveFromSaveList(testMaster1); isNewObject = session.IsNewObject(testMaster1); isObjectToSave = session.IsObjectToSave(testMaster1); isNewObject = session.IsNewObject(testDetail1.Master); isObjectToSave = session.IsObjectToSave(testDetail1.Master); session.RollbackTransaction(); #endif #if TEST_GET var testMaster = session.GetObjectByKey(typeof(TestMaster), 55L); testMaster = session.GetObjectByKey(session.GetClassInfo(typeof(TestMaster)), 55L); var details = session.GetObjects(session.GetClassInfo(typeof(TestDetail)), null, null, 0, true, false); #endif #if TEST_EXCEPTION_IN_ONSAVING session.FailedFlushChanges += SessionFailedFlushChanges; session.FailedCommitTransaction += SessionFailedCommitTransaction; try { #if TEST_EXCEPTION_IN_ONSAVING_IN_TRANSACTION session.BeginTransaction(); #endif if ((forTestTransaction = session.GetObjectByKey <Table4TestTransaction>(1L)) != null) { var tmpDateTime = DateTime.Now; forTestTransaction.Value = string.Format("update {0}:{1}:{2}.{3}", tmpDateTime.Hour, tmpDateTime.Minute, tmpDateTime.Second, tmpDateTime.Millisecond); forTestTransaction.Save(); } #if TEST_EXCEPTION_IN_ONSAVING_IN_TRANSACTION session.CommitTransaction(); #endif } catch (Exception eException) { if (session.InTransaction) { session.RollbackTransaction(); } } finally { session.FailedFlushChanges -= SessionFailedFlushChanges; session.FailedCommitTransaction -= SessionFailedCommitTransaction; } #endif #if TEST_TRANSACTION SqlConnection connection = null; try { if ((forTestTransaction = session.GetObjectByKey <Table4TestTransaction>(3L)) == null) { forTestTransaction = new Table4TestTransaction(session); } var tmpDateTime = DateTime.Now; forTestTransaction.Value = string.Format("update {0}:{1}:{2}.{3}", tmpDateTime.Hour, tmpDateTime.Minute, tmpDateTime.Second, tmpDateTime.Millisecond); forTestTransaction.Save(); session.BeginTransaction(); forTestTransaction = session.GetObjectByKey <Table4TestTransaction>(1L); tmpDateTime = DateTime.Now; forTestTransaction.Value = string.Format("update {0}:{1}:{2}.{3}", tmpDateTime.Hour, tmpDateTime.Minute, tmpDateTime.Second, tmpDateTime.Millisecond); forTestTransaction.Save(); connection = new SqlConnection(ConnectionString); connection.Open(); SqlCommand cmd = connection.CreateCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "TestProcedureWTransaction"; SqlCommandBuilder.DeriveParameters(cmd); if (cmd.Parameters[tmpString = "@spid"].Direction != ParameterDirection.Output) { cmd.Parameters[tmpString].Direction = ParameterDirection.Output; } if (cmd.Parameters[tmpString = "@trancount"].Direction != ParameterDirection.Output) { cmd.Parameters[tmpString].Direction = ParameterDirection.Output; } cmd.Parameters["@id"].Value = 2; cmd.Parameters["@value"].Value = forTestTransaction.Value; cmd.Parameters["@beginTransaction"].Value = true; cmd.Parameters["@rollbackTransaction"].Value = false; tmpInt = cmd.ExecuteNonQuery(); if (cmd.Parameters[tmpString = "@spid"].Value != null && !Convert.IsDBNull(cmd.Parameters[tmpString].Value)) { tmpInt = Convert.ToInt32(cmd.Parameters[tmpString].Value); } if (cmd.Parameters[tmpString = "@trancount"].Value != null && !Convert.IsDBNull(cmd.Parameters[tmpString].Value)) { tmpInt = Convert.ToInt32(cmd.Parameters[tmpString].Value); } session.CommitTransaction(); //session.RollbackTransaction(); } catch (Exception eException) { if (session.InTransaction) { session.RollbackTransaction(); } } finally { if (connection != null && connection.State == ConnectionState.Open) { connection.Close(); } } #endif XPClassInfo classInfoTestMaster = session.GetClassInfo(typeof(TestMaster)); var collection = session.GetObjectsByKey(classInfoTestMaster, new[] { 33L, 99L }, true); var listOfTypeObjects = collection.OfType <object>().ToList(); var listCastObjects = collection.Cast <object>().ToList(); var arrayOfTypeObjects = listOfTypeObjects.ToArray(); var arrayCastObjects = listCastObjects.ToArray(); TestMaster tmpTestMaster, tmpTestMasterII; tmpTestMaster = session.GetObjectByKey <TestMaster>(1L, false); tmpInt = tmpTestMaster.Details.Count; Session sessionII = new Session(); TestDetail tmpTestDetail; tmpTestDetail = sessionII.GetObjectByKey <TestDetail>(2L); tmpTestMasterII = sessionII.GetObjectByKey <TestMaster>(2L); tmpTestDetail.Master = tmpTestMasterII; tmpTestDetail.Save(); sessionII.Save(tmpTestDetail); tmpInt = tmpTestMaster.Details.Count; #if TEST_IS_NEW_AND_IS_TO_SAVE session.BeginTransaction(); tmpTestMaster = new TestMaster(session) { Name = string.Format("Test {0}", DateTime.Now.Ticks) }; isNewObject = session.IsNewObject(tmpTestMaster); isObjectToSave = session.IsObjectToSave(tmpTestMaster); tmpTestMaster.Save(); isNewObject = session.IsNewObject(tmpTestMaster); isObjectToSave = session.IsObjectToSave(tmpTestMaster); session.CommitTransaction(); isNewObject = session.IsNewObject(tmpTestMaster); isObjectToSave = session.IsObjectToSave(tmpTestMaster); session.BeginTransaction(); tmpTestMaster = new TestMaster(session) { Name = string.Format("Test {0}", DateTime.Now.Ticks) }; isNewObject = session.IsNewObject(tmpTestMaster); isObjectToSave = session.IsObjectToSave(tmpTestMaster); tmpTestMaster.Save(); isNewObject = session.IsNewObject(tmpTestMaster); isObjectToSave = session.IsObjectToSave(tmpTestMaster); session.RollbackTransaction(); isNewObject = session.IsNewObject(tmpTestMaster); isObjectToSave = session.IsObjectToSave(tmpTestMaster); #endif //session.IdentityMapBehavior = IdentityMapBehavior.Default; session.ObjectLoaded += SessionObjectLoaded; XPClassInfo classInfoTestDetail = session.GetClassInfo(typeof(TestDetail)); session.GetObjectsByKey(classInfoTestDetail, new List <object> { 4L, 5L /*, 6L, 7L*/ }, true); tmpTestMaster = session.GetObjectByKey <TestMaster>(2L, false); //testMasterII = session.GetObjectByKey<TestMaster>(4L, false); tmpString = tmpTestMaster.Details[1].Val; //session.PreFetch(new[] { testMaster, testMasterII }, "Details"); foreach (TestDetail testDetail in tmpTestMaster.Details) { tmpString = testDetail.Val; } }