public void Insert_simple_tph_entity_derived() { var modificationFunctionMapping = TestContext.GetModificationFunctionMapping("Car"); var commandTrees = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel()) .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName); var convertedTrees = new DynamicToFunctionModificationCommandConverter( modificationFunctionMapping.Item1, modificationFunctionMapping.Item2) .Convert(commandTrees) .OfType <DbInsertCommandTree>() .ToList(); var functionSqlGenerator = new DmlFunctionSqlGenerator(new SqlGenerator()); Assert.Equal( @"INSERT [dbo].[Vehicles]([Name], [Discriminator]) VALUES (@Name, N'Car') DECLARE @Id int SELECT @Id = [Id] FROM [dbo].[Vehicles] WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity() SELECT t0.[Id] FROM [dbo].[Vehicles] AS t0 WHERE @@ROWCOUNT > 0 AND t0.[Id] = @Id", functionSqlGenerator.GenerateInsert(convertedTrees)); }
public void Insert_simple_tph_entity_derived() { var modificationFunctionMapping = TestContext.GetModificationFunctionMapping("Car"); var commandTrees = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel()) .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName); var convertedTrees = new DynamicToFunctionModificationCommandConverter( modificationFunctionMapping.Item1, modificationFunctionMapping.Item2) .Convert(commandTrees) .OfType<DbInsertCommandTree>() .ToList(); var functionSqlGenerator = new DmlFunctionSqlGenerator(new SqlGenerator()); Assert.Equal( @"INSERT [dbo].[Vehicles]([Name], [Discriminator]) VALUES (@Name, N'Car') DECLARE @Id int SELECT @Id = [Id] FROM [dbo].[Vehicles] WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity() SELECT t0.[Id] FROM [dbo].[Vehicles] AS t0 WHERE @@ROWCOUNT > 0 AND t0.[Id] = @Id", functionSqlGenerator.GenerateInsert(convertedTrees)); }
public void Insert_simple_entity() { var modificationFunctionMapping = TestContext.GetModificationFunctionMapping("Customer"); var commandTrees = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel()) .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName); var convertedTrees = new DynamicToFunctionModificationCommandConverter( modificationFunctionMapping.Item1, modificationFunctionMapping.Item2) .Convert(commandTrees) .ToList(); var functionSqlGenerator = new DmlFunctionSqlGenerator(ProviderRegistry.Sql2008_ProviderManifest); Assert.Equal( @"insert [dbo].[Customers]([Name]) values (@Name) declare @CustomerId int select @CustomerId = [CustomerId] from [dbo].[Customers] where @@ROWCOUNT > 0 and [CustomerId] = scope_identity() select t0.[CustomerId] from [dbo].[Customers] as t0 where @@ROWCOUNT > 0 and t0.[CustomerId] = @CustomerId", functionSqlGenerator.GenerateInsert(convertedTrees)); }
public void Insert_tpt_entity_with_concurrency_and_store_generated_values() { var modificationFunctionMapping = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder"); var commandTrees = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel()) .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName); var convertedTrees = new DynamicToFunctionModificationCommandConverter( modificationFunctionMapping.Item1, modificationFunctionMapping.Item2) .Convert(commandTrees) .OfType <DbInsertCommandTree>() .ToList(); var functionSqlGenerator = new DmlFunctionSqlGenerator(new SqlGenerator()); Assert.Equal( @"DECLARE @generated_keys table([order_id] int, [Key] uniqueidentifier, [Code] nvarchar(128), [Signature] varbinary(128)) INSERT [dbo].[Orders]([Code], [Signature], [Name], [Address_Street], [Address_City], [Address_Country_Name], [OrderGroupId], [Customer_CustomerId]) OUTPUT inserted.[order_id], inserted.[Key], inserted.[Code], inserted.[Signature] INTO @generated_keys VALUES (@teh_codez, @Signature, @the_name, @Address_Street, @Address_City, @Address_Country_Name, @OrderGroupId, @Customer_CustomerId) DECLARE @order_id int, @Key uniqueidentifier SELECT @order_id = t.[order_id], @Key = t.[Key] FROM @generated_keys AS g JOIN [dbo].[Orders] AS t ON g.[order_id] = t.[order_id] AND g.[Key] = t.[Key] AND g.[Code] = t.[Code] AND g.[Signature] = t.[Signature] WHERE @@ROWCOUNT > 0 INSERT [dbo].[special_orders]([order_id], [so_key], [Code], [Signature], [OtherCustomer_CustomerId], [OtherAddress_Street], [OtherAddress_City], [OtherAddress_Country_Name]) VALUES (@order_id, @Key, @teh_codez, @Signature, @OtherCustomer_CustomerId, @OtherAddress_Street, @OtherAddress_City, @OtherAddress_Country_Name) INSERT [dbo].[xspecial_orders]([xid], [so_key], [Code], [Signature], [TheSpecialist]) VALUES (@order_id, @Key, @teh_codez, @Signature, @TheSpecialist) SELECT t0.[order_id] AS xid, t0.[Key] AS key_result, t0.[OrderNo], t0.[RowVersion], t1.[MagicOrderToken], t2.[FairyDust] FROM [dbo].[Orders] AS t0 JOIN [dbo].[special_orders] AS t1 ON t1.[order_id] = t0.[order_id] AND t1.[so_key] = t0.[Key] AND t1.[Code] = t0.[Code] AND t1.[Signature] = t0.[Signature] JOIN [dbo].[xspecial_orders] AS t2 ON t2.[xid] = t0.[order_id] AND t2.[so_key] = t0.[Key] AND t2.[Code] = t0.[Code] AND t2.[Signature] = t0.[Signature] WHERE @@ROWCOUNT > 0 AND t0.[order_id] = @order_id AND t0.[Key] = @Key AND t0.[Code] = @teh_codez AND t0.[Signature] = @Signature", functionSqlGenerator.GenerateInsert(convertedTrees)); }
public void Insert_tpt_entity_with_concurrency_and_store_generated_values() { var modificationFunctionMapping = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder"); var commandTrees = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel()) .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName); var convertedTrees = new DynamicToFunctionModificationCommandConverter( modificationFunctionMapping.Item1, modificationFunctionMapping.Item2) .Convert(commandTrees) .ToList(); var functionSqlGenerator = new DmlFunctionSqlGenerator(ProviderRegistry.Sql2008_ProviderManifest); Assert.Equal( @"declare @generated_keys table([order_id] int, [Key] uniqueidentifier, [Code] nvarchar(128), [Signature] varbinary(128)) insert [dbo].[Orders]([Code], [Signature], [Name], [Address_Street], [Address_City], [Address_Country_Name], [OrderGroupId], [Customer_CustomerId]) output inserted.[order_id], inserted.[Key], inserted.[Code], inserted.[Signature] into @generated_keys values (@teh_codez, @Signature, @the_name, @Address_Street, @Address_City, @Address_Country_Name, @OrderGroupId, @Customer_CustomerId) declare @order_id int, @Key uniqueidentifier select @order_id = t.[order_id], @Key = t.[Key] from @generated_keys as g join [dbo].[Orders] as t on g.[order_id] = t.[order_id] and g.[Key] = t.[Key] and g.[Code] = t.[Code] and g.[Signature] = t.[Signature] where @@ROWCOUNT > 0 insert [dbo].[special_orders]([order_id], [so_key], [Code], [Signature], [OtherCustomer_CustomerId], [OtherAddress_Street], [OtherAddress_City], [OtherAddress_Country_Name]) values (@order_id, @Key, @teh_codez, @Signature, @OtherCustomer_CustomerId, @OtherAddress_Street, @OtherAddress_City, @OtherAddress_Country_Name) insert [dbo].[xspecial_orders]([xid], [so_key], [Code], [Signature], [TheSpecialist]) values (@order_id, @Key, @teh_codez, @Signature, @TheSpecialist) select t0.[order_id] as xid, t0.[Key] as key_result, t0.[OrderNo], t0.[RowVersion], t1.[MagicOrderToken], t2.[FairyDust] from [dbo].[Orders] as t0 join [dbo].[special_orders] as t1 on t1.[order_id] = t0.[order_id] and t1.[so_key] = t0.[Key] and t1.[Code] = t0.[Code] and t1.[Signature] = t0.[Signature] join [dbo].[xspecial_orders] as t2 on t2.[xid] = t0.[order_id] and t2.[so_key] = t0.[Key] and t2.[Code] = t0.[Code] and t2.[Signature] = t0.[Signature] where @@ROWCOUNT > 0 and t0.[order_id] = @order_id and t0.[Key] = @Key and t0.[Code] = @teh_codez and t0.[Signature] = @Signature", functionSqlGenerator.GenerateInsert(convertedTrees)); }
private string GenerateFunctionSql(ICollection<DbModificationCommandTree> commandTrees, string rowsAffectedParameter) { DebugCheck.NotNull(commandTrees); Debug.Assert(commandTrees.Any()); var functionSqlGenerator = new DmlFunctionSqlGenerator(_sqlGenerator); switch (commandTrees.First().CommandTreeKind) { case DbCommandTreeKind.Insert: return functionSqlGenerator.GenerateInsert(commandTrees.Cast<DbInsertCommandTree>().ToList()); case DbCommandTreeKind.Update: return functionSqlGenerator.GenerateUpdate(commandTrees.Cast<DbUpdateCommandTree>().ToList(), rowsAffectedParameter); case DbCommandTreeKind.Delete: return functionSqlGenerator.GenerateDelete(commandTrees.Cast<DbDeleteCommandTree>().ToList(), rowsAffectedParameter); } return null; }
public void Insert_tpt_entity_with_concurrency_and_store_generated_values() { var modificationFunctionMapping = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder"); var commandTrees = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel()) .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName); var convertedTrees = new DynamicToFunctionModificationCommandConverter( modificationFunctionMapping.Item1, modificationFunctionMapping.Item2) .Convert(commandTrees) .OfType<DbInsertCommandTree>() .ToList(); var functionSqlGenerator = new DmlFunctionSqlGenerator(new SqlGenerator()); Assert.Equal( @"DECLARE @generated_keys table([order_id] int, [Key] uniqueidentifier, [Code] nvarchar(128), [Signature] varbinary(128)) INSERT [dbo].[Orders]([Code], [Signature], [Name], [Address_Street], [Address_City], [Address_CountryOrRegion_Name], [OrderGroupId], [Customer_CustomerId]) OUTPUT inserted.[order_id], inserted.[Key], inserted.[Code], inserted.[Signature] INTO @generated_keys VALUES (@teh_codez, @Signature, @the_name, @Address_Street, @Address_City, @Address_CountryOrRegion_Name, @OrderGroupId, @Customer_CustomerId) DECLARE @order_id int, @Key uniqueidentifier SELECT @order_id = t.[order_id], @Key = t.[Key] FROM @generated_keys AS g JOIN [dbo].[Orders] AS t ON g.[order_id] = t.[order_id] AND g.[Key] = t.[Key] AND g.[Code] = t.[Code] AND g.[Signature] = t.[Signature] WHERE @@ROWCOUNT > 0 INSERT [dbo].[special_orders]([order_id], [so_key], [Code], [Signature], [OtherCustomer_CustomerId], [OtherAddress_Street], [OtherAddress_City], [OtherAddress_CountryOrRegion_Name]) VALUES (@order_id, @Key, @teh_codez, @Signature, @OtherCustomer_CustomerId, @OtherAddress_Street, @OtherAddress_City, @OtherAddress_CountryOrRegion_Name) INSERT [dbo].[xspecial_orders]([xid], [so_key], [Code], [Signature], [TheSpecialist]) VALUES (@order_id, @Key, @teh_codez, @Signature, @TheSpecialist) SELECT t0.[order_id] AS xid, t0.[Key] AS key_result, t0.[OrderNo], t0.[RowVersion], t1.[MagicOrderToken], t2.[FairyDust] FROM [dbo].[Orders] AS t0 JOIN [dbo].[special_orders] AS t1 ON t1.[order_id] = t0.[order_id] AND t1.[so_key] = t0.[Key] AND t1.[Code] = t0.[Code] AND t1.[Signature] = t0.[Signature] JOIN [dbo].[xspecial_orders] AS t2 ON t2.[xid] = t0.[order_id] AND t2.[so_key] = t0.[Key] AND t2.[Code] = t0.[Code] AND t2.[Signature] = t0.[Signature] WHERE @@ROWCOUNT > 0 AND t0.[order_id] = @order_id AND t0.[Key] = @Key AND t0.[Code] = @teh_codez AND t0.[Signature] = @Signature", functionSqlGenerator.GenerateInsert(convertedTrees)); }