d1695ffa-c53c-47f2-8646-d5edabc3975f true (localdb)\MSSQLLocalDB true tempdb true void Main() { if (false) { // Select and run these commands to initialize the database. //ExecuteCommand("DROP TABLE [Line]"); //ExecuteCommand("DROP TABLE [Order]"); //ExecuteCommand("DROP TABLE [State]"); //ExecuteCommand("DROP TABLE [Operation]"); //ExecuteCommand("DROP TABLE [Transaction]"); ExecuteCommand("CREATE TABLE [Transaction] ( Id INT PRIMARY KEY, Completed BIT, OrderId INT )"); ExecuteCommand("INSERT [Transaction] VALUES ( 123, 0, 1 )"); ExecuteCommand("CREATE TABLE Operation ( Id INT PRIMARY KEY, TransactionId INT, FOREIGN KEY(TransactionId) REFERENCES [Transaction](Id), Ok BIT )"); ExecuteCommand("INSERT Operation VALUES ( 1, 123, 0 ), ( 2, 123, 0 )"); ExecuteCommand("CREATE TABLE [State] ( Id INT PRIMARY KEY )"); ExecuteCommand("INSERT [State] VALUES ( 0 ), ( 2 )"); ExecuteCommand("CREATE TABLE [Order] ( Id INT PRIMARY KEY, StateId INT, FOREIGN KEY(StateId) REFERENCES [State](Id) )"); ExecuteCommand("INSERT [Order] VALUES ( 1, 0 )"); ExecuteCommand("CREATE TABLE Line ( Id INT PRIMARY KEY, OrderId INT, FOREIGN KEY(OrderId) REFERENCES [Order](Id), StateId INT, FOREIGN KEY(StateId) REFERENCES [State](Id) )"); ExecuteCommand("INSERT Line VALUES ( 1, 1, 0 ), ( 2, 1, 0 ), ( 3, 1, 0 )"); } DoWork(123); } // Define other methods and classes here public void DoWork(int id) { var a = Transactions.SingleOrDefault(t => t.Id == id); ProcessTransaction(a); } public void ProcessTransaction(LINQPad.User.Transaction transaction) { var b = Operations.Where(o => o.TransactionId == transaction.Id); //... do some validations var operations = b.ToList(); var order = Orders.Single(o => o.Id == transaction.OrderId); foreach (var operation in operations) { //... do some validations //... pass order through some methods that modify a prop of one or more elements of the order.OrderLines nav prop using foreach orderModifier.ChangeOrder(order); operation.Ok = true; } transaction.Completed = true; SubmitChanges(); } private OrderModifier orderModifier = new OrderModifier(); public class OrderModifier { public void ChangeOrder(Order order) { foreach (var line in order.Lines) { line.StateId = 2; } order.StateId = 2; } } // SQL: // //-- Region Parameters //DECLARE @p0 Int = 123 //-- EndRegion //SELECT [t0].[Id], [t0].[Completed], [t0].[OrderId] //FROM [Transaction] AS [t0] //WHERE [t0].[Id] = @p0 //GO // //-- Region Parameters //DECLARE @p0 Int = 123 //-- EndRegion //SELECT [t0].[Id], [t0].[TransactionId], [t0].[Ok] //FROM [Operation] AS [t0] //WHERE [t0].[TransactionId] = @p0 //GO // //-- Region Parameters //DECLARE @p0 Int = 1 //-- EndRegion //SELECT [t0].[Id], [t0].[StateId] //FROM [Order] AS [t0] //WHERE ([t0].[Id]) = @p0 //GO // //-- Region Parameters //DECLARE @p0 Int = 1 //-- EndRegion //SELECT [t0].[Id], [t0].[OrderId], [t0].[StateId] //FROM [Line] AS [t0] //WHERE [t0].[OrderId] = @p0 //GO // //-- Region Parameters //DECLARE @p0 Int = 1 //DECLARE @p1 Int = 2 //-- EndRegion //UPDATE [Line] //SET [StateId] = @p1 //WHERE [Id] = @p0 //GO // //-- Region Parameters //DECLARE @p0 Int = 2 //DECLARE @p1 Int = 2 //-- EndRegion //UPDATE [Line] //SET [StateId] = @p1 //WHERE [Id] = @p0 //GO // //-- Region Parameters //DECLARE @p0 Int = 3 //DECLARE @p1 Int = 2 //-- EndRegion //UPDATE [Line] //SET [StateId] = @p1 //WHERE [Id] = @p0 //GO // //-- Region Parameters //DECLARE @p0 Int = 1 //DECLARE @p1 Bit = 1 //-- EndRegion //UPDATE [Operation] //SET [Ok] = @p1 //WHERE [Id] = @p0 //GO // //-- Region Parameters //DECLARE @p0 Int = 2 //DECLARE @p1 Bit = 1 //-- EndRegion //UPDATE [Operation] //SET [Ok] = @p1 //WHERE [Id] = @p0 //GO // //-- Region Parameters //DECLARE @p0 Int = 1 //DECLARE @p1 Int = 2 //-- EndRegion //UPDATE [Order] //SET [StateId] = @p1 //WHERE [Id] = @p0 //GO // //-- Region Parameters //DECLARE @p0 Int = 123 //DECLARE @p1 Bit = 1 //-- EndRegion //UPDATE [Transaction] //SET [Completed] = @p1 //WHERE [Id] = @p0 //