From d0a2207df0ba740655aadbaa06816c7d6c289879 Mon Sep 17 00:00:00 2001 From: Tsar Nikolay Date: Thu, 2 Jun 2022 12:27:03 +0500 Subject: [PATCH 01/77] Upgrade to .NET 6.0 --- .github/workflows/build.yml | 76 +++++++++++++++---- .../Controllers/DataObjectController.cs | 2 +- .../Expressions/FilterBinder.cs | 2 +- ...Platform.Flexberry.ORM.ODataService.csproj | 2 +- ...rm.Flexberry.ORM.ODataService.Tests.csproj | 33 ++++---- global.json | 2 + 6 files changed, 85 insertions(+), 32 deletions(-) create mode 100644 global.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6aa42e4d..4aebc233 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,6 +13,10 @@ on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: +env: + XUNIT_RUNNER: "2.4.1" + CONFIGURATION: "Debug" + # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build-postgres" @@ -42,22 +46,42 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v2 + + # Several .NET Core versions will be used during the test run. + # The lowest version gets installed first in order to prevent + # "a newer version is already installed" install errors. + + - name: Install .NET Core 3.1 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 3.1.x + + # Building requires an up-to-date .NET SDK. + + - name: Install .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x - name: Restore NewPlatform.Flexberry.ORM.ODataService.sln - run: nuget restore NewPlatform.Flexberry.ORM.ODataService.sln -NonInteractive + run: dotnet restore NewPlatform.Flexberry.ORM.ODataService.sln - name: Install xunit.runner.console - run: nuget install xunit.runner.console -Version 2.4.1 -OutputDirectory testrunner + run: nuget install xunit.runner.console -Version $XUNIT_RUNNER -OutputDirectory testrunner - name: Compile code - run: msbuild /verbosity:quiet /p:WarningLevel=0 /p:Configuration=Debug NewPlatform.Flexberry.ORM.ODataService.sln + run: dotnet build --no-restore -v q /p:WarningLevel=0 -c $CONFIGURATION NewPlatform.Flexberry.ORM.ODataService.sln - - name: Test under mono - run: mono ./testrunner/xunit.runner.console.2.4.1/tools/net461/xunit.console.exe ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/Debug/net461/NewPlatform.Flexberry.ORM.ODataService.Tests.dll + - name: Test on dotnet 3.1 + run: dotnet test ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/$CONFIGURATION/netcoreapp3.1/NewPlatform.Flexberry.ORM.ODataService.Tests.dll - - name: Test under dotnet - run: dotnet test ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/Debug/netcoreapp3.1/NewPlatform.Flexberry.ORM.ODataService.Tests.dll + - name: Test on dotnet 6.0 + run: dotnet test ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/$CONFIGURATION/net6.0/NewPlatform.Flexberry.ORM.ODataService.Tests.dll + + - name: Test under mono + run: mono ./testrunner/xunit.runner.console.$XUNIT_RUNNER/tools/net461/xunit.console.exe ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/$CONFIGURATION/net461/NewPlatform.Flexberry.ORM.ODataService.Tests.dll - name: Cleanup if: always() @@ -91,22 +115,42 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v2 + + # Several .NET Core versions will be used during the test run. + # The lowest version gets installed first in order to prevent + # "a newer version is already installed" install errors. + + - name: Install .NET Core 3.1 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 3.1.x + + # Building requires an up-to-date .NET SDK. + + - name: Install .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x - name: Restore NewPlatform.Flexberry.ORM.ODataService.sln - run: nuget restore NewPlatform.Flexberry.ORM.ODataService.sln -NonInteractive + run: dotnet restore NewPlatform.Flexberry.ORM.ODataService.sln - name: Install xunit.runner.console - run: nuget install xunit.runner.console -Version 2.4.1 -OutputDirectory testrunner + run: nuget install xunit.runner.console -Version $XUNIT_RUNNER -OutputDirectory testrunner - name: Compile code - run: msbuild /verbosity:quiet /p:WarningLevel=0 /p:Configuration=Debug NewPlatform.Flexberry.ORM.ODataService.sln + run: dotnet build --no-restore -v q /p:WarningLevel=0 -c $CONFIGURATION NewPlatform.Flexberry.ORM.ODataService.sln - - name: Test under mono - run: mono ./testrunner/xunit.runner.console.2.4.1/tools/net461/xunit.console.exe ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/Debug/net461/NewPlatform.Flexberry.ORM.ODataService.Tests.dll + - name: Test on dotnet 3.1 + run: dotnet test ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/$CONFIGURATION/netcoreapp3.1/NewPlatform.Flexberry.ORM.ODataService.Tests.dll - - name: Test under dotnet - run: dotnet test ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/Debug/netcoreapp3.1/NewPlatform.Flexberry.ORM.ODataService.Tests.dll + - name: Test on dotnet 6.0 + run: dotnet test ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/$CONFIGURATION/net6.0/NewPlatform.Flexberry.ORM.ODataService.Tests.dll + + - name: Test under mono + run: mono ./testrunner/xunit.runner.console.$XUNIT_RUNNER/tools/net461/xunit.console.exe ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/$CONFIGURATION/net461/NewPlatform.Flexberry.ORM.ODataService.Tests.dll - name: Cleanup if: always() diff --git a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.cs b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.cs index aa6ed4e4..b8fe8191 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.cs @@ -1251,7 +1251,7 @@ private IActionResult ExecuteExpression() NameValueCollection queryParams = Request.RequestUri.ParseQueryString(); bool isForExcel = Request.Properties.ContainsKey(PostPatchHandler.AcceptApplicationMsExcel) || Convert.ToBoolean(queryParams.Get("exportExcel")); #elif NETSTANDARD - NameValueCollection queryParams = QueryHelpers.QueryToNameValueCollection(Request.Query); + NameValueCollection queryParams = WebUtilities.QueryHelpers.QueryToNameValueCollection(Request.Query); bool isForExcel = HttpContext.Items.ContainsKey(RequestHeadersHookMiddleware.AcceptApplicationMsExcel) || Convert.ToBoolean(queryParams.Get("exportExcel")); #endif bool isExport = _model.ExportStringedObjectViewService != null || _model.ODataExportService != null || _model.ExportService != null; diff --git a/NewPlatform.Flexberry.ORM.ODataService/Expressions/FilterBinder.cs b/NewPlatform.Flexberry.ORM.ODataService/Expressions/FilterBinder.cs index e12f4e1f..e382f9fd 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Expressions/FilterBinder.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Expressions/FilterBinder.cs @@ -62,7 +62,7 @@ internal class FilterBinder private static readonly Expression _ordinalStringComparisonConstant = Expression.Constant(StringComparison.Ordinal); private static readonly MethodInfo _enumTryParseMethod = typeof(Enum).GetMethods() - .Single(m => m.Name == "TryParse" && m.GetParameters().Length == 2); + .First(m => m.Name == "TryParse" && m.GetParameters().Length == 2); private static Dictionary _binaryOperatorMapping = new Dictionary { diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index 9a0dc57d..ed0595ab 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -50,7 +50,7 @@ - + diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj index 906fe862..a512b39f 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj @@ -1,7 +1,7 @@  - net461;netcoreapp3.1 + net6.0;net461;netcoreapp3.1 Debug;Release latest NewPlatform.Flexberry.ORM.ODataService.Tests @@ -47,14 +47,17 @@ - + - - - - + + + + + + + @@ -66,6 +69,10 @@ + + + + @@ -105,17 +112,17 @@ - + - - - True - True - Resources.resx - + + + True + True + Resources.resx + diff --git a/global.json b/global.json new file mode 100644 index 00000000..2c63c085 --- /dev/null +++ b/global.json @@ -0,0 +1,2 @@ +{ +} From ed7edb27856b1d3fd6b86a1b7120ec38ff6e2a2b Mon Sep 17 00:00:00 2001 From: Tsar Nikolay Date: Fri, 3 Jun 2022 10:43:13 +0500 Subject: [PATCH 02/77] Fix serialization Upgrade netfx deps --- .../Formatter/CustomODataFeedSerializer.cs | 19 +++++- .../Model/DataObjectEdmModel.cs | 7 --- ...Platform.Flexberry.ORM.ODataService.csproj | 5 +- .../ODataServiceSample.AspNet.csproj | 59 +++++++++++-------- Samples/ODataServiceSample.AspNet/Web.config | 36 +++++++++-- .../ODataServiceSample.AspNet/packages.config | 29 +++++---- 6 files changed, 98 insertions(+), 57 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Formatter/CustomODataFeedSerializer.cs b/NewPlatform.Flexberry.ORM.ODataService/Formatter/CustomODataFeedSerializer.cs index 6548c773..c4b21381 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Formatter/CustomODataFeedSerializer.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Formatter/CustomODataFeedSerializer.cs @@ -4,6 +4,8 @@ using System.Collections; using System.Collections.Generic; using System.Linq; + using System.Threading.Tasks; + using Microsoft.AspNet.OData; using Microsoft.AspNet.OData.Formatter.Serialization; using Microsoft.OData; @@ -69,14 +71,27 @@ public override ODataResourceSet CreateResourceSet(IEnumerable resourceSetInstan /// The . public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { - if (graph is EnumerableQuery) + if (graph is EnumerableQuery query) { - var list = ((EnumerableQuery)graph).AsIList(); + var list = query.AsIList(); var entityCollectionType = new EdmCollectionTypeReference((EdmCollectionType)((EdmEntitySet)writeContext.NavigationSource).Type); graph = new EdmEntityObjectCollection(entityCollectionType, list); } base.WriteObject(graph, type, messageWriter, writeContext); } + + /// + public override Task WriteObjectAsync(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) + { + if (graph is EnumerableQuery query) + { + var list = query.AsIList(); + var entityCollectionType = new EdmCollectionTypeReference((EdmCollectionType)((EdmEntitySet)writeContext.NavigationSource).Type); + graph = new EdmEntityObjectCollection(entityCollectionType, list); + } + + return base.WriteObjectAsync(graph, type, messageWriter, writeContext); + } } } diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs index a999f430..9a35b162 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs @@ -72,11 +72,6 @@ public class DataObjectEdmModel : EdmModel /// private readonly IDictionary _aliasesTypeToName = new Dictionary(); - /// - /// Словарь, в котором ключ алиас пространства имен, а значение - сам тип. - /// - private readonly IDictionary _aliasesNamespaceToType = new Dictionary(); - /// /// Словарь, в котором составной ключ - это алиас полного имени типа и алиас свойства, а значение - само свойство. /// @@ -744,8 +739,6 @@ private string GetEntityTypeNamespace(Type type) var name = type.Namespace; if (type != typeof(DataObject) && EdmModelBuilder != null && EdmModelBuilder.EntityTypeNamespaceBuilder != null) name = EdmModelBuilder.EntityTypeNamespaceBuilder(type); - if (!_aliasesNamespaceToType.ContainsKey(name)) - _aliasesNamespaceToType.Add(name, type); return name; } diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index ed0595ab..fa7fe342 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -40,12 +40,9 @@ - + - - - diff --git a/Samples/ODataServiceSample.AspNet/ODataServiceSample.AspNet.csproj b/Samples/ODataServiceSample.AspNet/ODataServiceSample.AspNet.csproj index a29afaaa..87b7f669 100644 --- a/Samples/ODataServiceSample.AspNet/ODataServiceSample.AspNet.csproj +++ b/Samples/ODataServiceSample.AspNet/ODataServiceSample.AspNet.csproj @@ -90,8 +90,11 @@ ..\..\packages\log4net.2.0.12\lib\net45\log4net.dll - - ..\..\packages\Microsoft.AspNet.OData.7.5.1\lib\net45\Microsoft.AspNet.OData.dll + + ..\..\packages\Microsoft.AspNet.OData.7.5.14\lib\net45\Microsoft.AspNet.OData.dll + + + ..\..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll @@ -100,14 +103,14 @@ ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.0.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - ..\..\packages\Microsoft.OData.Core.7.7.2\lib\net45\Microsoft.OData.Core.dll + + ..\..\packages\Microsoft.OData.Core.7.10.0\lib\net45\Microsoft.OData.Core.dll - - ..\..\packages\Microsoft.OData.Edm.7.7.2\lib\net45\Microsoft.OData.Edm.dll + + ..\..\packages\Microsoft.OData.Edm.7.10.0\lib\net45\Microsoft.OData.Edm.dll - - ..\..\packages\Microsoft.Spatial.7.7.2\lib\net45\Microsoft.Spatial.dll + + ..\..\packages\Microsoft.Spatial.7.10.0\lib\net45\Microsoft.Spatial.dll ..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll @@ -142,11 +145,11 @@ ..\..\packages\Remotion.Linq.2.2.0\lib\net45\Remotion.Linq.dll - - ..\..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll + + ..\..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - ..\..\packages\System.Configuration.ConfigurationManager.4.7.0\lib\net461\System.Configuration.ConfigurationManager.dll + + ..\..\packages\System.Configuration.ConfigurationManager.6.0.0\lib\net461\System.Configuration.ConfigurationManager.dll @@ -154,7 +157,7 @@ - ..\..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll + ..\..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll @@ -162,11 +165,11 @@ ..\..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll - - ..\..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll + + ..\..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll @@ -176,18 +179,24 @@ ..\..\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll - - ..\..\packages\System.Security.AccessControl.4.7.0\lib\net461\System.Security.AccessControl.dll + + ..\..\packages\System.Security.AccessControl.6.0.0\lib\net461\System.Security.AccessControl.dll - - ..\..\packages\System.Security.Permissions.4.7.0\lib\net461\System.Security.Permissions.dll + + ..\..\packages\System.Security.Permissions.6.0.0\lib\net461\System.Security.Permissions.dll - - ..\..\packages\System.Security.Principal.Windows.4.7.0\lib\net461\System.Security.Principal.Windows.dll + + ..\..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll - - ..\..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll + + ..\..\packages\System.Text.Encodings.Web.4.7.2\lib\net461\System.Text.Encodings.Web.dll + + + ..\..\packages\System.Text.Json.4.6.0\lib\net461\System.Text.Json.dll + + + ..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll diff --git a/Samples/ODataServiceSample.AspNet/Web.config b/Samples/ODataServiceSample.AspNet/Web.config index 9994db11..f6d55c7f 100644 --- a/Samples/ODataServiceSample.AspNet/Web.config +++ b/Samples/ODataServiceSample.AspNet/Web.config @@ -28,15 +28,15 @@ - - - - - + + + + + - + @@ -70,6 +70,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/ODataServiceSample.AspNet/packages.config b/Samples/ODataServiceSample.AspNet/packages.config index 4e9584d8..7f1d5617 100644 --- a/Samples/ODataServiceSample.AspNet/packages.config +++ b/Samples/ODataServiceSample.AspNet/packages.config @@ -2,17 +2,18 @@ - + + - - - + + + @@ -29,20 +30,22 @@ - - + + - - + + - + - - - - + + + + + + From 79f1f6d9f8ead5e7a003ce06a66dcd9d2d98d2ca Mon Sep 17 00:00:00 2001 From: Tsar Nikolay Date: Thu, 23 Jun 2022 12:02:05 +0500 Subject: [PATCH 03/77] Remove samples from main sln, create Samples sln. --- ...orm.Flexberry.ORM.ODataService.Samples.sln | 47 +++++-- ...xberry.ORM.ODataService.netstandard2.0.sln | 67 --------- NewPlatform.Flexberry.ORM.ODataService.sln | 25 +--- ...rm.Flexberry.ORM.ODataService.Tests.csproj | 3 +- .../Startup.cs | 133 ++++++++++++++++++ 5 files changed, 171 insertions(+), 104 deletions(-) rename NewPlatform.Flexberry.ORM.ODataService.net461.sln => NewPlatform.Flexberry.ORM.ODataService.Samples.sln (69%) delete mode 100644 NewPlatform.Flexberry.ORM.ODataService.netstandard2.0.sln create mode 100644 Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startup.cs diff --git a/NewPlatform.Flexberry.ORM.ODataService.net461.sln b/NewPlatform.Flexberry.ORM.ODataService.Samples.sln similarity index 69% rename from NewPlatform.Flexberry.ORM.ODataService.net461.sln rename to NewPlatform.Flexberry.ORM.ODataService.Samples.sln index 78baa41f..8e972b7d 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.net461.sln +++ b/NewPlatform.Flexberry.ORM.ODataService.Samples.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29709.97 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NewPlatform.Flexberry.ORM.ODataService", "NewPlatform.Flexberry.ORM.ODataService\NewPlatform.Flexberry.ORM.ODataService.csproj", "{01BBE45A-3A3F-4EA5-9457-8C62167B5E99}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService", "NewPlatform.Flexberry.ORM.ODataService\NewPlatform.Flexberry.ORM.ODataService.csproj", "{01BBE45A-3A3F-4EA5-9457-8C62167B5E99}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet Package Properties", "NuGet Package Properties", "{EF5F8D62-3B41-44F8-B748-E5CE1CBF00A9}" ProjectSection(SolutionItems) = preProject @@ -12,30 +12,39 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet Package Properties", EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{A94D831A-7B5D-40C6-B76B-2B8B6335DB3E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NewPlatform.Flexberry.ORM.ODataService.Tests", "Tests\NewPlatform.Flexberry.ORM.ODataService.Tests\NewPlatform.Flexberry.ORM.ODataService.Tests.csproj", "{8E43819E-6643-4E5F-A3A2-B1C212033DE6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService.Tests", "Tests\NewPlatform.Flexberry.ORM.ODataService.Tests\NewPlatform.Flexberry.ORM.ODataService.Tests.csproj", "{8E43819E-6643-4E5F-A3A2-B1C212033DE6}" + ProjectSection(ProjectDependencies) = postProject + {5090ACBA-7CD6-4AA7-88A2-15D541573988} = {5090ACBA-7CD6-4AA7-88A2-15D541573988} + EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NewPlatform.Flexberry.ORM.ODataService.Tests.Objects", "Tests\Objects\NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj", "{10CE2502-3EEF-4285-935F-E18F5F623C6D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService.Tests.Objects", "Tests\Objects\NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj", "{10CE2502-3EEF-4285-935F-E18F5F623C6D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers", "Tests\BusinessServers\NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj", "{BFB771C3-51D8-4804-BB0F-A0B4BD7981D9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers", "Tests\BusinessServers\NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj", "{BFB771C3-51D8-4804-BB0F-A0B4BD7981D9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Open Source", "Open Source", "{DB00E5CF-65B6-4A94-8C83-A80DB75E9B02}" ProjectSection(SolutionItems) = preProject .gitignore = .gitignore - .travis.yml = .travis.yml + .github\workflows\build.yml = .github\workflows\build.yml CHANGELOG.md = CHANGELOG.md ConfigTuner.ps1 = ConfigTuner.ps1 LICENSE.md = LICENSE.md README.md = README.md EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NewPlatform.Flexberry.ORM.ODataService.Files", "NewPlatform.Flexberry.ORM.ODataService.Files\NewPlatform.Flexberry.ORM.ODataService.Files.csproj", "{22FAA967-EA69-4AE9-9A07-ECEE6C499BBB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NewPlatform.Flexberry.ORM.ODataService.WebApi", "NewPlatform.Flexberry.ORM.ODataService.WebApi\NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj", "{D3EBD348-D0F8-4C1E-BDC0-6C77D9D443CB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService.Files", "NewPlatform.Flexberry.ORM.ODataService.Files\NewPlatform.Flexberry.ORM.ODataService.Files.csproj", "{22FAA967-EA69-4AE9-9A07-ECEE6C499BBB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NewPlatform.Flexberry.ORM.ODataService.Cors", "NewPlatform.Flexberry.ORM.ODataService.Cors\NewPlatform.Flexberry.ORM.ODataService.Cors.csproj", "{225422F1-D9A8-4B35-9AE3-68C2C1BAAD22}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService.WebApi", "NewPlatform.Flexberry.ORM.ODataService.WebApi\NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj", "{D3EBD348-D0F8-4C1E-BDC0-6C77D9D443CB}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ODataServiceSample.AspNet", "Samples\ODataServiceSample.AspNet\ODataServiceSample.AspNet.csproj", "{D1CE223D-844E-45FF-BDAD-6252A3F3A4EA}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataServiceCore.Common", "NewPlatform.Flexberry.ORM.ODataServiceCore.Common\NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj", "{2C84BB80-78BD-4771-BA5A-32D32DB568DE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi", "NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi\NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj", "{B9E13B47-4A51-4D47-B5B1-2C1A3A8008B1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ODataServiceSample.AspNetCore", "Samples\ODataServiceSample.AspNetCore\ODataServiceSample.AspNetCore.csproj", "{5090ACBA-7CD6-4AA7-88A2-15D541573988}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{DE953BA7-BD14-48DA-AAAA-E835DC84497A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -66,14 +75,22 @@ Global {D3EBD348-D0F8-4C1E-BDC0-6C77D9D443CB}.Debug|Any CPU.Build.0 = Debug|Any CPU {D3EBD348-D0F8-4C1E-BDC0-6C77D9D443CB}.Release|Any CPU.ActiveCfg = Release|Any CPU {D3EBD348-D0F8-4C1E-BDC0-6C77D9D443CB}.Release|Any CPU.Build.0 = Release|Any CPU - {225422F1-D9A8-4B35-9AE3-68C2C1BAAD22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {225422F1-D9A8-4B35-9AE3-68C2C1BAAD22}.Debug|Any CPU.Build.0 = Debug|Any CPU - {225422F1-D9A8-4B35-9AE3-68C2C1BAAD22}.Release|Any CPU.ActiveCfg = Release|Any CPU - {225422F1-D9A8-4B35-9AE3-68C2C1BAAD22}.Release|Any CPU.Build.0 = Release|Any CPU {D1CE223D-844E-45FF-BDAD-6252A3F3A4EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D1CE223D-844E-45FF-BDAD-6252A3F3A4EA}.Debug|Any CPU.Build.0 = Debug|Any CPU {D1CE223D-844E-45FF-BDAD-6252A3F3A4EA}.Release|Any CPU.ActiveCfg = Release|Any CPU {D1CE223D-844E-45FF-BDAD-6252A3F3A4EA}.Release|Any CPU.Build.0 = Release|Any CPU + {2C84BB80-78BD-4771-BA5A-32D32DB568DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2C84BB80-78BD-4771-BA5A-32D32DB568DE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2C84BB80-78BD-4771-BA5A-32D32DB568DE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2C84BB80-78BD-4771-BA5A-32D32DB568DE}.Release|Any CPU.Build.0 = Release|Any CPU + {B9E13B47-4A51-4D47-B5B1-2C1A3A8008B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9E13B47-4A51-4D47-B5B1-2C1A3A8008B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9E13B47-4A51-4D47-B5B1-2C1A3A8008B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9E13B47-4A51-4D47-B5B1-2C1A3A8008B1}.Release|Any CPU.Build.0 = Release|Any CPU + {5090ACBA-7CD6-4AA7-88A2-15D541573988}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5090ACBA-7CD6-4AA7-88A2-15D541573988}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5090ACBA-7CD6-4AA7-88A2-15D541573988}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5090ACBA-7CD6-4AA7-88A2-15D541573988}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -82,9 +99,11 @@ Global {8E43819E-6643-4E5F-A3A2-B1C212033DE6} = {A94D831A-7B5D-40C6-B76B-2B8B6335DB3E} {10CE2502-3EEF-4285-935F-E18F5F623C6D} = {A94D831A-7B5D-40C6-B76B-2B8B6335DB3E} {BFB771C3-51D8-4804-BB0F-A0B4BD7981D9} = {A94D831A-7B5D-40C6-B76B-2B8B6335DB3E} + {D1CE223D-844E-45FF-BDAD-6252A3F3A4EA} = {DE953BA7-BD14-48DA-AAAA-E835DC84497A} + {5090ACBA-7CD6-4AA7-88A2-15D541573988} = {DE953BA7-BD14-48DA-AAAA-E835DC84497A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.2\lib\NET35;packages\Unity.Interception.2.1.505.0\lib\NET35;packages\EnterpriseLibrary.Common.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Data.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Logging.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Logging.Database.5.0.505.0\lib\NET35 SolutionGuid = {611B715C-AD46-45B1-BA4E-36C8F1A1896E} + EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.2\lib\NET35;packages\Unity.Interception.2.1.505.0\lib\NET35;packages\EnterpriseLibrary.Common.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Data.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Logging.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Logging.Database.5.0.505.0\lib\NET35 EndGlobalSection EndGlobal diff --git a/NewPlatform.Flexberry.ORM.ODataService.netstandard2.0.sln b/NewPlatform.Flexberry.ORM.ODataService.netstandard2.0.sln deleted file mode 100644 index f76da5f7..00000000 --- a/NewPlatform.Flexberry.ORM.ODataService.netstandard2.0.sln +++ /dev/null @@ -1,67 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29709.97 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ODataServiceSample.AspNetCore", "Samples\ODataServiceSample.AspNetCore\ODataServiceSample.AspNetCore.csproj", "{4A4E84F0-C200-4C9B-B24E-504B4C02E7E7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataServiceCore.Common", "NewPlatform.Flexberry.ORM.ODataServiceCore.Common\NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj", "{8D1DF99B-0F21-4194-A4F3-CDAD1A4B2F0F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataServiceCore.Files", "NewPlatform.Flexberry.ORM.ODataServiceCore.Files\NewPlatform.Flexberry.ORM.ODataServiceCore.Files.csproj", "{294CA4CD-0F92-41CA-A802-D10CBCBA53CA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi", "NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi\NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj", "{8F5EC8C0-1603-4CE7-B748-8408460548FD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService", "NewPlatform.Flexberry.ORM.ODataService\NewPlatform.Flexberry.ORM.ODataService.csproj", "{2BC99841-E742-4292-AC78-E81712C051A0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService.Tests.Objects", "Tests\Objects\NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj", "{10421EC7-5355-414B-96F1-A3D8F3BDAE05}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers", "Tests\BusinessServers\NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj", "{77F5DF55-2FE9-460F-9F04-933B33E36ABC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService.Tests", "Tests\NewPlatform.Flexberry.ORM.ODataService.Tests\NewPlatform.Flexberry.ORM.ODataService.Tests.csproj", "{59DE2C97-C1EA-43E0-8601-6E20D00D73AE}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4A4E84F0-C200-4C9B-B24E-504B4C02E7E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A4E84F0-C200-4C9B-B24E-504B4C02E7E7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4A4E84F0-C200-4C9B-B24E-504B4C02E7E7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4A4E84F0-C200-4C9B-B24E-504B4C02E7E7}.Release|Any CPU.Build.0 = Release|Any CPU - {8D1DF99B-0F21-4194-A4F3-CDAD1A4B2F0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8D1DF99B-0F21-4194-A4F3-CDAD1A4B2F0F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8D1DF99B-0F21-4194-A4F3-CDAD1A4B2F0F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8D1DF99B-0F21-4194-A4F3-CDAD1A4B2F0F}.Release|Any CPU.Build.0 = Release|Any CPU - {294CA4CD-0F92-41CA-A802-D10CBCBA53CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {294CA4CD-0F92-41CA-A802-D10CBCBA53CA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {294CA4CD-0F92-41CA-A802-D10CBCBA53CA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {294CA4CD-0F92-41CA-A802-D10CBCBA53CA}.Release|Any CPU.Build.0 = Release|Any CPU - {8F5EC8C0-1603-4CE7-B748-8408460548FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8F5EC8C0-1603-4CE7-B748-8408460548FD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8F5EC8C0-1603-4CE7-B748-8408460548FD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8F5EC8C0-1603-4CE7-B748-8408460548FD}.Release|Any CPU.Build.0 = Release|Any CPU - {2BC99841-E742-4292-AC78-E81712C051A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BC99841-E742-4292-AC78-E81712C051A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BC99841-E742-4292-AC78-E81712C051A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BC99841-E742-4292-AC78-E81712C051A0}.Release|Any CPU.Build.0 = Release|Any CPU - {10421EC7-5355-414B-96F1-A3D8F3BDAE05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {10421EC7-5355-414B-96F1-A3D8F3BDAE05}.Debug|Any CPU.Build.0 = Debug|Any CPU - {10421EC7-5355-414B-96F1-A3D8F3BDAE05}.Release|Any CPU.ActiveCfg = Release|Any CPU - {10421EC7-5355-414B-96F1-A3D8F3BDAE05}.Release|Any CPU.Build.0 = Release|Any CPU - {77F5DF55-2FE9-460F-9F04-933B33E36ABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77F5DF55-2FE9-460F-9F04-933B33E36ABC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77F5DF55-2FE9-460F-9F04-933B33E36ABC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77F5DF55-2FE9-460F-9F04-933B33E36ABC}.Release|Any CPU.Build.0 = Release|Any CPU - {59DE2C97-C1EA-43E0-8601-6E20D00D73AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {59DE2C97-C1EA-43E0-8601-6E20D00D73AE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59DE2C97-C1EA-43E0-8601-6E20D00D73AE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {59DE2C97-C1EA-43E0-8601-6E20D00D73AE}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {A5517B10-C731-4F6C-BACE-08A0D672F266} - EndGlobalSection -EndGlobal diff --git a/NewPlatform.Flexberry.ORM.ODataService.sln b/NewPlatform.Flexberry.ORM.ODataService.sln index 8e972b7d..b64a44a1 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.sln +++ b/NewPlatform.Flexberry.ORM.ODataService.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29709.97 +# Visual Studio Version 17 +VisualStudioVersion = 17.2.32602.215 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService", "NewPlatform.Flexberry.ORM.ODataService\NewPlatform.Flexberry.ORM.ODataService.csproj", "{01BBE45A-3A3F-4EA5-9457-8C62167B5E99}" EndProject @@ -13,9 +13,6 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{A94D831A-7B5D-40C6-B76B-2B8B6335DB3E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService.Tests", "Tests\NewPlatform.Flexberry.ORM.ODataService.Tests\NewPlatform.Flexberry.ORM.ODataService.Tests.csproj", "{8E43819E-6643-4E5F-A3A2-B1C212033DE6}" - ProjectSection(ProjectDependencies) = postProject - {5090ACBA-7CD6-4AA7-88A2-15D541573988} = {5090ACBA-7CD6-4AA7-88A2-15D541573988} - EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService.Tests.Objects", "Tests\Objects\NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj", "{10CE2502-3EEF-4285-935F-E18F5F623C6D}" EndProject @@ -35,16 +32,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.O EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataService.WebApi", "NewPlatform.Flexberry.ORM.ODataService.WebApi\NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj", "{D3EBD348-D0F8-4C1E-BDC0-6C77D9D443CB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ODataServiceSample.AspNet", "Samples\ODataServiceSample.AspNet\ODataServiceSample.AspNet.csproj", "{D1CE223D-844E-45FF-BDAD-6252A3F3A4EA}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataServiceCore.Common", "NewPlatform.Flexberry.ORM.ODataServiceCore.Common\NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj", "{2C84BB80-78BD-4771-BA5A-32D32DB568DE}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi", "NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi\NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj", "{B9E13B47-4A51-4D47-B5B1-2C1A3A8008B1}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ODataServiceSample.AspNetCore", "Samples\ODataServiceSample.AspNetCore\ODataServiceSample.AspNetCore.csproj", "{5090ACBA-7CD6-4AA7-88A2-15D541573988}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{DE953BA7-BD14-48DA-AAAA-E835DC84497A}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -75,10 +66,6 @@ Global {D3EBD348-D0F8-4C1E-BDC0-6C77D9D443CB}.Debug|Any CPU.Build.0 = Debug|Any CPU {D3EBD348-D0F8-4C1E-BDC0-6C77D9D443CB}.Release|Any CPU.ActiveCfg = Release|Any CPU {D3EBD348-D0F8-4C1E-BDC0-6C77D9D443CB}.Release|Any CPU.Build.0 = Release|Any CPU - {D1CE223D-844E-45FF-BDAD-6252A3F3A4EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1CE223D-844E-45FF-BDAD-6252A3F3A4EA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1CE223D-844E-45FF-BDAD-6252A3F3A4EA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1CE223D-844E-45FF-BDAD-6252A3F3A4EA}.Release|Any CPU.Build.0 = Release|Any CPU {2C84BB80-78BD-4771-BA5A-32D32DB568DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2C84BB80-78BD-4771-BA5A-32D32DB568DE}.Debug|Any CPU.Build.0 = Debug|Any CPU {2C84BB80-78BD-4771-BA5A-32D32DB568DE}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -87,10 +74,6 @@ Global {B9E13B47-4A51-4D47-B5B1-2C1A3A8008B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {B9E13B47-4A51-4D47-B5B1-2C1A3A8008B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {B9E13B47-4A51-4D47-B5B1-2C1A3A8008B1}.Release|Any CPU.Build.0 = Release|Any CPU - {5090ACBA-7CD6-4AA7-88A2-15D541573988}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5090ACBA-7CD6-4AA7-88A2-15D541573988}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5090ACBA-7CD6-4AA7-88A2-15D541573988}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5090ACBA-7CD6-4AA7-88A2-15D541573988}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -99,11 +82,9 @@ Global {8E43819E-6643-4E5F-A3A2-B1C212033DE6} = {A94D831A-7B5D-40C6-B76B-2B8B6335DB3E} {10CE2502-3EEF-4285-935F-E18F5F623C6D} = {A94D831A-7B5D-40C6-B76B-2B8B6335DB3E} {BFB771C3-51D8-4804-BB0F-A0B4BD7981D9} = {A94D831A-7B5D-40C6-B76B-2B8B6335DB3E} - {D1CE223D-844E-45FF-BDAD-6252A3F3A4EA} = {DE953BA7-BD14-48DA-AAAA-E835DC84497A} - {5090ACBA-7CD6-4AA7-88A2-15D541573988} = {DE953BA7-BD14-48DA-AAAA-E835DC84497A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {611B715C-AD46-45B1-BA4E-36C8F1A1896E} EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.2\lib\NET35;packages\Unity.Interception.2.1.505.0\lib\NET35;packages\EnterpriseLibrary.Common.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Data.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Logging.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Logging.Database.5.0.505.0\lib\NET35 + SolutionGuid = {611B715C-AD46-45B1-BA4E-36C8F1A1896E} EndGlobalSection EndGlobal diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj index a512b39f..aaedcb61 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj @@ -49,6 +49,8 @@ + + @@ -114,7 +116,6 @@ - diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startup.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startup.cs new file mode 100644 index 00000000..0f62ed20 --- /dev/null +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startup.cs @@ -0,0 +1,133 @@ +#if NETCOREAPP +namespace ODataServiceSample.AspNetCore +{ + using System; + using System.IO; + using System.Linq; + using ICSSoft.Services; + using ICSSoft.STORMNET.Business; + using ICSSoft.STORMNET.Security; + using ICSSoft.STORMNET.Windows.Forms; + using IIS.Caseberry.Logging.Objects; + using Microsoft.AspNet.OData.Extensions; + using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Hosting; + using Microsoft.AspNetCore.Hosting.Server.Features; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.DependencyInjection; + using NewPlatform.Flexberry.ORM.ODataService.Extensions; + using NewPlatform.Flexberry.ORM.ODataService.Files; + using NewPlatform.Flexberry.ORM.ODataService.Model; + using NewPlatform.Flexberry.ORM.ODataService.Tests; + using NewPlatform.Flexberry.ORM.ODataService.WebApi.Extensions; + using NewPlatform.Flexberry.ORM.ODataServiceCore.Common.Exceptions; + using NewPlatform.Flexberry.ORM.ODataServiceCore.Extensions; + using NewPlatform.Flexberry.Services; + using Unity; + + using LockService = NewPlatform.Flexberry.Services.LockService; + + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + private IApplicationBuilder ApplicationBuilder { get; set; } + + private IServerAddressesFeature ServerAddressesFeature { get; set; } + + public IConfiguration Configuration { get; } + + public string CustomizationString => ""; + + // This method gets called by the runtime. Use this method to add services to the container. + public virtual void ConfigureServices(IServiceCollection services) + { + /* + // Configure Flexberry services (LockService and IDataService) via native DI. + { + services.AddSingleton(provider => + { + IDataService dataService = new PostgresDataService() { CustomizationString = CustomizationString }; + ExternalLangDef.LanguageDef.DataService = dataService; + + return dataService; + }); + + services.AddSingleton(); + } + */ + + // Configure Flexberry services via Unity. + { + IUnityContainer unityContainer = UnityFactory.GetContainer(); + + IDataService dataService = new PostgresDataService() { CustomizationString = CustomizationString }; + + unityContainer.RegisterInstance(dataService); + ExternalLangDef.LanguageDef.DataService = dataService; + + unityContainer.RegisterInstance(new LockService(dataService)); + + unityContainer.RegisterInstance(new EmptySecurityManager()); + } + + services.AddMvcCore(options => + { + options.Filters.Add(); + options.EnableEndpointRouting = false; + }) + .AddFormatterMappings(); + + services.AddODataService(); + + services.AddSingleton(provider => + { + Uri baseUri = new Uri("http://localhost"); + + if (ServerAddressesFeature != null && ServerAddressesFeature.Addresses != null) + { + // This works with pure self-hosted service only. + baseUri = new Uri(ServerAddressesFeature.Addresses.Single()); + } + + var env = provider.GetRequiredService(); + + return new DefaultDataObjectFileAccessor(baseUri, "api/File", "Uploads"); + }); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public virtual void Configure(IApplicationBuilder app, IHostingEnvironment env) + { + // Save reference to IApplicationBuilder instance. + ApplicationBuilder = app; + + // Save reference to IServerAddressesFeature instance. + ServerAddressesFeature = app.ServerFeatures.Get(); + + app.UseMvc(builder => + { + builder.MapRoute("Lock", "api/lock/{action}/{dataObjectId}", new { controller = "Lock" }); + builder.MapFileRoute(); + }); + + app.UseODataService(builder => + { + var assemblies = new[] + { + typeof(Медведь).Assembly, + typeof(ApplicationLog).Assembly, + typeof(UserSetting).Assembly, + typeof(Lock).Assembly, + }; + var modelBuilder = new DefaultDataObjectEdmModelBuilder(assemblies, false); + + var token = builder.MapDataObjectRoute(modelBuilder); + }); + } + } +} +#endif From 6e540869821094982f555cbf24c921367e7cfbcf Mon Sep 17 00:00:00 2001 From: Tsar Nikolay Date: Thu, 23 Jun 2022 12:38:51 +0500 Subject: [PATCH 04/77] Fix web app factory. --- .../CustomWebApplicationFactory.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CustomWebApplicationFactory.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CustomWebApplicationFactory.cs index c0d96a14..926a4c23 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CustomWebApplicationFactory.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CustomWebApplicationFactory.cs @@ -25,6 +25,14 @@ protected override IWebHostBuilder CreateWebHostBuilder() .UseStartup(); return webHostBuilder; } + + /// + /// https://github.com/dotnet/AspNetCore.Docs/issues/7063 . + protected override void ConfigureWebHost(IWebHostBuilder builder) + { + builder.UseContentRoot("."); + base.ConfigureWebHost(builder); + } } } #endif From 56fe9359cf21c2df53df3aa99041aa98add1b79b Mon Sep 17 00:00:00 2001 From: leoleopon <36438132+leoleopon@users.noreply.github.com> Date: Thu, 30 Jun 2022 14:42:50 +0500 Subject: [PATCH 05/77] Override ReadAsync() method in ExtendedODataEntityDeserializer. (#258) --- .../Formatter/ExtendedODataEntityDeserializer.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Formatter/ExtendedODataEntityDeserializer.cs b/NewPlatform.Flexberry.ORM.ODataService/Formatter/ExtendedODataEntityDeserializer.cs index 94ed26e2..60aa510e 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Formatter/ExtendedODataEntityDeserializer.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Formatter/ExtendedODataEntityDeserializer.cs @@ -13,6 +13,7 @@ #if NETFRAMEWORK using NewPlatform.Flexberry.ORM.ODataService.Expressions; #elif NETSTANDARD + using System.Threading.Tasks; using Microsoft.AspNet.OData.Common; using Microsoft.AspNetCore.Http.Extensions; #endif @@ -80,6 +81,20 @@ public override object Read(ODataMessageReader messageReader, Type type, ODataDe return obj; } +#if NETSTANDARD + /// + /// Выполняет чтение передаваемых данных OData. + /// + /// messageReader, который будет использован для чтения. + /// Тип передаваемых данных. + /// Состояние и установки, используемые при чтении. + /// Преобразованные данные. + public override async Task ReadAsync(ODataMessageReader messageReader, Type type, ODataDeserializerContext readContext) + { + return await Task.Run(() => Read(messageReader, type, readContext)); + } +#endif + /// /// Десериалезует в . /// From b768731396bc231bb4cd5a0e92c0343249a26807 Mon Sep 17 00:00:00 2001 From: Tsar Nikolay Date: Sun, 10 Jul 2022 14:44:12 +0500 Subject: [PATCH 06/77] Fix config files Change nuspec --- ...orm.Flexberry.ORM.ODataService.Samples.sln | 1 - NewPlatform.Flexberry.ORM.ODataService.nuspec | 27 +- NewPlatform.Flexberry.ORM.ODataService.sln | 1 - Samples/ODataServiceSample.AspNet/Web.config | 12 +- .../App.config | 428 +++++++++--------- 5 files changed, 231 insertions(+), 238 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.Samples.sln b/NewPlatform.Flexberry.ORM.ODataService.Samples.sln index 8e972b7d..80230c6a 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.Samples.sln +++ b/NewPlatform.Flexberry.ORM.ODataService.Samples.sln @@ -104,6 +104,5 @@ Global EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {611B715C-AD46-45B1-BA4E-36C8F1A1896E} - EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.2\lib\NET35;packages\Unity.Interception.2.1.505.0\lib\NET35;packages\EnterpriseLibrary.Common.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Data.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Logging.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Logging.Database.5.0.505.0\lib\NET35 EndGlobalSection EndGlobal diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 97c749db..37b5aa3e 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 6.2.0-beta09 + 6.3.0-alpha01 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -12,37 +12,32 @@ true Flexberry ORM OData Service Package. - Add - 1. Support IExportStringedObjectViewService interface call for fast excel export. - - Fixed - 1. SafeLoadDetails for partial loaded detail. - 2. Custom batch handler settings such as ODataMessageQuotas. - 3. CallbackBeforeGet with count equals true. - 4. Fix create detail view. + Changed + 1. Upgrade `Microsoft.AspNet.OData` to `7.5.14` + 2. Upgrade `NewPlatform.Flexberry.AspNetCore.OData` to `7.5.14` - Copyright New Platform Ltd 2021 + Copyright New Platform Ltd 2022 Flexberry ORM OData ODataService - + - - - + + + - + - + diff --git a/NewPlatform.Flexberry.ORM.ODataService.sln b/NewPlatform.Flexberry.ORM.ODataService.sln index b64a44a1..040b93c8 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.sln +++ b/NewPlatform.Flexberry.ORM.ODataService.sln @@ -84,7 +84,6 @@ Global {BFB771C3-51D8-4804-BB0F-A0B4BD7981D9} = {A94D831A-7B5D-40C6-B76B-2B8B6335DB3E} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.2\lib\NET35;packages\Unity.Interception.2.1.505.0\lib\NET35;packages\EnterpriseLibrary.Common.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Data.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Logging.5.0.505.0\lib\NET35;packages\EnterpriseLibrary.Logging.Database.5.0.505.0\lib\NET35 SolutionGuid = {611B715C-AD46-45B1-BA4E-36C8F1A1896E} EndGlobalSection EndGlobal diff --git a/Samples/ODataServiceSample.AspNet/Web.config b/Samples/ODataServiceSample.AspNet/Web.config index f6d55c7f..ce45f008 100644 --- a/Samples/ODataServiceSample.AspNet/Web.config +++ b/Samples/ODataServiceSample.AspNet/Web.config @@ -19,7 +19,7 @@ - + @@ -29,10 +29,10 @@ - - - - + + + + @@ -191,7 +191,7 @@ - + diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/App.config b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/App.config index 7494caf2..58ddf418 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/App.config +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/App.config @@ -1,214 +1,214 @@ - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 61fdf414efe23a342c63465b1e1785c223596f25 Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Mon, 12 Dec 2022 13:51:08 +0500 Subject: [PATCH 07/77] Small fixes for export to excel functionality --- .../Controllers/DataObjectController.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.cs b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.cs index b8fe8191..6da1eabe 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.cs @@ -273,7 +273,7 @@ internal static bool CheckDataAvailableForStringDataViewExcelExport(DataObjectEd { bool isAfterGetDeniedTypesExist = false; - Type[] deniedTypes = model.ExcelExportAfterGetDeniedTypes; + Type[] deniedTypes = model.ExcelExportAfterGetDeniedTypes ?? new Type[0]; Type[] lcsTypes = lcs.LoadingTypes; IEnumerable intersection = lcsTypes.Intersect(deniedTypes); @@ -638,7 +638,10 @@ internal LoadingCustomizationStruct PrepareLcsForStringedObjectViewExport(NameVa } resultLcs.View.Properties = resultProperies.ToArray(); - resultLcs.View = ViewPropertyAppender.GetViewWithPropertiesUsedInFunction(resultLcs.View, resultLcs.LimitFunction, _dataService); + if (resultLcs.LimitFunction != null) + { + resultLcs.View = ViewPropertyAppender.GetViewWithPropertiesUsedInFunction(resultLcs.View, resultLcs.LimitFunction, _dataService); + } return resultLcs; } From 2d8e9e4d05f63f2325857396638289416c0a051a Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Mon, 12 Dec 2022 13:52:45 +0500 Subject: [PATCH 08/77] Update Microsoft.AspNet.OData to 7.6.1, NewPlatform.Flexberry.AspNetCore.OData to 7.6.2-alpha01 --- .../NewPlatform.Flexberry.ORM.ODataService.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index fa7fe342..f5db7e9e 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -40,14 +40,14 @@ - + - + - + From d5bde062ca2f26d8260aad1b3a680a40a4ac93e6 Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Tue, 13 Dec 2022 16:44:24 +0500 Subject: [PATCH 09/77] Add net6 and net7 as target frameworks --- .../NewPlatform.Flexberry.ORM.ODataService.Files.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataService.csproj | 8 ++++---- ...wPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj | 2 +- ...wPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataService.Tests.csproj | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj index 384befdf..0afef08f 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj @@ -40,7 +40,7 @@ - + diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index f5db7e9e..884d9ace 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -1,7 +1,7 @@  - net45;net461;netcoreapp3.1;netstandard2.0 + net45;net461;netcoreapp3.1;netstandard2.0;net6.0;net7.0 Debug;Release latest NewPlatform.Flexberry.ORM.ODataService @@ -15,7 +15,7 @@ 1.0.0.0 - + $(DefineConstants);NETSTANDARD @@ -46,7 +46,7 @@ - + @@ -54,7 +54,7 @@ - + diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj index 941a47a7..ca1d4b2f 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj @@ -15,7 +15,7 @@ 1.0.0.0 - + diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj b/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj index 81dbd9cd..606bfb5f 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj @@ -15,7 +15,7 @@ 1.0.0.0 - + diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj index aaedcb61..5b7a2d46 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj @@ -1,7 +1,7 @@  - net6.0;net461;netcoreapp3.1 + net6.0;net461;netcoreapp3.1;net7.0; Debug;Release latest NewPlatform.Flexberry.ORM.ODataService.Tests @@ -57,7 +57,7 @@ - + From 27f529a3ee02b13c6fb967e62e93cafc394b454e Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Wed, 14 Dec 2022 12:20:59 +0500 Subject: [PATCH 10/77] Fixed problem with unit test on .Net6 --- .../Events/EventHandlerContainer.cs | 3 ++ .../Exceptions/CustomExceptionFilter.cs | 31 +++++++++++++++++-- .../Exceptions/Delegates.cs | 13 ++++++++ .../Events/AfterInternalServerErrorTest.cs | 15 ++++++--- 4 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 NewPlatform.Flexberry.ORM.ODataServiceCore.Common/Exceptions/Delegates.cs diff --git a/NewPlatform.Flexberry.ORM.ODataService/Events/EventHandlerContainer.cs b/NewPlatform.Flexberry.ORM.ODataService/Events/EventHandlerContainer.cs index df5abab7..d7f9f713 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Events/EventHandlerContainer.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Events/EventHandlerContainer.cs @@ -53,6 +53,9 @@ internal class EventHandlerContainer : IEventHandlerContainer /// /// Делегат, вызываемый после возникновения исключения. + /// В версиях .Net Core и выше не все исключения, происходящие в Odata, отлавливаются данным делегатом. + /// Некоторые исключения генерируются напрямую из MS-кода. Для их перехвата можно воспользоваться делегатом в CustomExceptionFilter + /// (или добавить собственную реализацию IExceptionFilter). /// public DelegateAfterInternalServerError CallbackAfterInternalServerError { get; set; } } diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/Exceptions/CustomExceptionFilter.cs b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/Exceptions/CustomExceptionFilter.cs index 6c8022be..348a51a1 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/Exceptions/CustomExceptionFilter.cs +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/Exceptions/CustomExceptionFilter.cs @@ -2,16 +2,37 @@ { using System; using System.Collections.Generic; + using System.Net; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; - using Microsoft.AspNetCore.Mvc.Filters; - + using Microsoft.AspNetCore.Mvc.Filters; + /// /// The implementation for unhandled exceptions. + /// + /// It can be set on Startup.cs somehow like: + /// public virtual void ConfigureServices(IServiceCollection services) + /// { + /// ... + /// services.AddMvcCore(options => + /// { + /// options.Filters.Add<CustomExceptionFilter>(); + /// ... + /// })... + /// } + /// + /// Also global delegate for error processing can be added. + /// /// public class CustomExceptionFilter : IExceptionFilter { + /// + /// Delegate for executing after global error occured. + /// Some OData errors on .Net Core and higher return straight from MS code and only custom exception filter can catch and process them. + /// + public static FilterDelegateAfterInternalServerError CallbackAfterInternalServerError { get; set; } + private readonly bool exceptionDataAllowed; /// @@ -35,6 +56,12 @@ public void OnException(ExceptionContext context) exception = customException.InnerException; } + if (CallbackAfterInternalServerError != null) + { + HttpStatusCode statusCodeForDelegate = HttpStatusCode.InternalServerError; + exception = CallbackAfterInternalServerError(exception, ref statusCodeForDelegate); + } + object error = GetError(statusCode, exception); var result = new ObjectResult(error); diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/Exceptions/Delegates.cs b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/Exceptions/Delegates.cs new file mode 100644 index 00000000..13877f68 --- /dev/null +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/Exceptions/Delegates.cs @@ -0,0 +1,13 @@ +namespace NewPlatform.Flexberry.ORM.ODataServiceCore.Common.Exceptions +{ + using System; + using System.Net; + + /// + /// Type of delegate called after global exception occured. + /// + /// Exceprtion that occured during processing of Odata request. + /// Returning Error Code. By default 500. + /// Exception for client. + public delegate Exception FilterDelegateAfterInternalServerError(Exception ex, ref HttpStatusCode code); +} diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterInternalServerErrorTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterInternalServerErrorTest.cs index 3af9cf66..428eccb4 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterInternalServerErrorTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterInternalServerErrorTest.cs @@ -1,12 +1,13 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests.Events { + using System; using System.Net; using System.Net.Http; - using ICSSoft.STORMNET; - +#if NETCOREAPP + using NewPlatform.Flexberry.ORM.ODataServiceCore.Common.Exceptions; +#endif using Xunit; - using System; /// /// Класс тестов для тестирования логики после возникновения исключения. @@ -47,9 +48,13 @@ public Exception AfterInternalServerError(Exception e, ref HttpStatusCode code) public void TestAfterInternalServerError() { ActODataService(args => - { + { +#if NETFRAMEWORK args.Token.Events.CallbackAfterInternalServerError = AfterInternalServerError; - +#elif NETCOREAPP + CustomExceptionFilter.CallbackAfterInternalServerError = AfterInternalServerError; +#endif + Медведь медв = new Медведь { Вес = 48, Пол = tПол.Мужской }; Медведь медв2 = new Медведь { Вес = 148, Пол = tПол.Мужской }; Лес лес = new Лес { Название = "Бор" }; From 137ed5ddaec6bd7e162269b2b36b881b5bca8179 Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Thu, 15 Dec 2022 11:17:49 +0500 Subject: [PATCH 11/77] Updated NewPlatform.Flexberry.ORM.ODataService nuspec to 6.3.0-alpha02 --- NewPlatform.Flexberry.ORM.ODataService.nuspec | 70 +++++++++++++------ 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 44d61290..0dd59c24 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 6.3.0-alpha01 + 6.3.0-alpha02 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -12,27 +12,27 @@ true Flexberry ORM OData Service Package. - Changed - 1. Upgrade `Microsoft.AspNet.OData` to `7.5.14` - 2. Upgrade `NewPlatform.Flexberry.AspNetCore.OData` to `7.5.14` + Changed + 1. Upgrade `Microsoft.AspNet.OData` to `7.6.1` + 2. Upgrade `NewPlatform.Flexberry.AspNetCore.OData` to `7.6.2-alpha01` - Add - 1. Support IExportStringedObjectViewService interface call for fast excel export. - 2. Add DisabledDataObjectFileAccessor realization. - 3. Support of actions with void response (it returns 204 No Content code). + Add + 1. Support IExportStringedObjectViewService interface call for fast excel export. + 2. Add DisabledDataObjectFileAccessor realization. + 3. Support of actions with void response (it returns 204 No Content code). - Fixed - 1. SafeLoadDetails for partial loaded detail. - 2. Custom batch handler settings such as ODataMessageQuotas. - 3. CallbackBeforeGet with count equals true. - 4. Fix create detail view. - 5. Fix view creation in case with filters by detail (twin master field contains, pk eq const). - + Fixed + 1. SafeLoadDetails for partial loaded detail. + 2. Custom batch handler settings such as ODataMessageQuotas. + 3. CallbackBeforeGet with count equals true. + 4. Fix create detail view. + 5. Fix view creation in case with filters by detail (twin master field contains, pk eq const). + Copyright New Platform Ltd 2022 Flexberry ORM OData ODataService - + @@ -43,16 +43,28 @@ - + - + - + - + + + + + + + + + + + + + @@ -88,5 +100,23 @@ + + + + + + + + + + + + + + + + + + From 9405811305747173eff972a38207c226e6c4936b Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Thu, 15 Dec 2022 13:03:03 +0500 Subject: [PATCH 12/77] Removed net7 for fast build --- NewPlatform.Flexberry.ORM.ODataService.nuspec | 15 --------------- .../NewPlatform.Flexberry.ORM.ODataService.csproj | 2 +- ...atform.Flexberry.ORM.ODataService.Tests.csproj | 2 +- 3 files changed, 2 insertions(+), 17 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 0dd59c24..19655507 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -60,12 +60,6 @@ - - - - - - @@ -109,14 +103,5 @@ - - - - - - - - - diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index 884d9ace..780a7902 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -1,7 +1,7 @@  - net45;net461;netcoreapp3.1;netstandard2.0;net6.0;net7.0 + net45;net461;netcoreapp3.1;netstandard2.0;net6.0 Debug;Release latest NewPlatform.Flexberry.ORM.ODataService diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj index 5b7a2d46..2154185d 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj @@ -1,7 +1,7 @@  - net6.0;net461;netcoreapp3.1;net7.0; + net6.0;net461;netcoreapp3.1; Debug;Release latest NewPlatform.Flexberry.ORM.ODataService.Tests From 5379e464adf5bd8e3fdc86d5c1c58cd3309eb384 Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Thu, 15 Dec 2022 14:37:43 +0500 Subject: [PATCH 13/77] Fixed mistyped version of dependency --- NewPlatform.Flexberry.ORM.ODataService.nuspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 19655507..40219d01 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -40,7 +40,7 @@ - + From bfb6dc75ad96d5744711c4979c37f791af8da119 Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Mon, 19 Dec 2022 10:49:40 +0500 Subject: [PATCH 14/77] Added net6.0 to other projects --- .../NewPlatform.Flexberry.ORM.ODataService.Files.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj index 0afef08f..5f485303 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj @@ -1,7 +1,7 @@  - net45;net461;netcoreapp3.1;netstandard2.0 + net45;net461;netcoreapp3.1;netstandard2.0;net6.0 Debug;Release latest NewPlatform.Flexberry.ORM.ODataService.Files diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj index ca1d4b2f..96db3a7a 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1;netstandard2.0 + netcoreapp3.1;netstandard2.0;net6.0 Debug;Release latest NewPlatform.Flexberry.ORM.ODataServiceCore.Common diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj b/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj index 606bfb5f..0c929e29 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1;netstandard2.0 + netcoreapp3.1;netstandard2.0;net6.0 Debug;Release latest NewPlatform.Flexberry.ORM.ODataService.WebApi From 06815f48ba5d3de9bd65873b8ad49d83127ed08e Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Fri, 13 Jan 2023 15:03:52 +0500 Subject: [PATCH 15/77] Added changes for namespace forming if Publish Name is set --- .../Expressions/EdmLibHelpers.cs | 2 +- .../Model/DataObjectEdmModel.cs | 21 ++++++++--- .../Model/DefaultDataObjectEdmModelBuilder.cs | 2 +- .../CRUD/Read/MetaDataTest.cs | 35 ++++++++++++++++--- 4 files changed, 49 insertions(+), 11 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Expressions/EdmLibHelpers.cs b/NewPlatform.Flexberry.ORM.ODataService/Expressions/EdmLibHelpers.cs index ef8eddec..86ab66e7 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Expressions/EdmLibHelpers.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Expressions/EdmLibHelpers.cs @@ -351,7 +351,7 @@ private static string EdmName(this Type clrType) private static string EdmFullName(this Type clrType) { - return string.Format(CultureInfo.InvariantCulture, "{0}.{1}", clrType.Namespace, clrType.EdmName()); + return string.IsNullOrEmpty(clrType.Namespace) ? clrType.EdmName() : string.Format(CultureInfo.InvariantCulture, "{0}.{1}", clrType.Namespace, clrType.EdmName()); } private static IEdmPrimitiveType GetPrimitiveType(EdmPrimitiveTypeKind primitiveKind) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs index 9a35b162..c9c1427c 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs @@ -153,7 +153,10 @@ private void BuildTypeHierarchy() else _typeHierarchy[baseDataObjectType].Add(dataObjectType); - var typeFullName = $"{GetEntityTypeNamespace(dataObjectType)}.{GetEntityTypeName(dataObjectType)}"; + string nameSpace = GetEntityTypeNamespace(dataObjectType); + string typeName = GetEntityTypeName(dataObjectType); + + var typeFullName = string.IsNullOrEmpty(nameSpace) ? typeName : $"{nameSpace}.{typeName}"; if (!_aliasesNameToProperty.ContainsKey(typeFullName)) { _aliasesNameToProperty.Add(typeFullName, new Dictionary()); @@ -721,7 +724,7 @@ private string GetEntityTypeName(Type type) var nameSpace = GetEntityTypeNamespace(type); if (type != typeof(DataObject) && EdmModelBuilder != null && EdmModelBuilder.EntityTypeNameBuilder != null) name = EdmModelBuilder.EntityTypeNameBuilder(type); - var fullname = $"{nameSpace}.{name}"; + var fullname = string.IsNullOrEmpty(nameSpace) ? name : $"{nameSpace}.{name}"; if (!_aliasesNameToType.ContainsKey(fullname)) _aliasesNameToType.Add(fullname, type); if (!_aliasesTypeToName.ContainsKey(type)) @@ -738,7 +741,15 @@ private string GetEntityTypeNamespace(Type type) { var name = type.Namespace; if (type != typeof(DataObject) && EdmModelBuilder != null && EdmModelBuilder.EntityTypeNamespaceBuilder != null) - name = EdmModelBuilder.EntityTypeNamespaceBuilder(type); + name = EdmModelBuilder.EntityTypeNamespaceBuilder(type); + +#if NETSTANDARD + // On NetStandard there are extra checks that lead to exceptions if name is empty or null. + if (name == string.Empty) + { + return "____"; + } +#endif return name; } @@ -752,7 +763,9 @@ private string GetEntityPropertyName(PropertyInfo prop) var name = prop.Name; if (name != KeyPropertyName && prop.DeclaringType != typeof(DataObject) && EdmModelBuilder != null && EdmModelBuilder.EntityPropertyNameBuilder != null) name = EdmModelBuilder.EntityPropertyNameBuilder(prop); - var typeFullName = $"{GetEntityTypeNamespace(prop.DeclaringType)}.{GetEntityTypeName(prop.DeclaringType)}"; + string nameSpace = GetEntityTypeNamespace(prop.DeclaringType); + string typeName = GetEntityTypeName(prop.DeclaringType); + string typeFullName = string.IsNullOrEmpty(nameSpace) ? typeName : $"{nameSpace}.{typeName}"; if (!_aliasesNameToProperty.ContainsKey(typeFullName)) { _aliasesNameToProperty.Add(typeFullName, new Dictionary()); diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs index 6c24e5e4..9115e228 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs @@ -324,7 +324,7 @@ private string BuildEntitySetName(Type dataObjectType) string typeName = BuildEntityTypeName(dataObjectType); string nameSpace = BuildEntityTypeNamespace(dataObjectType); - return string.Concat(_useNamespaceInEntitySetName ? $"{nameSpace}.{typeName}".Replace(".", string.Empty) : typeName, "s"/* "Aliases"*/).Replace("_", string.Empty); + return string.Concat((_useNamespaceInEntitySetName && !string.IsNullOrEmpty(nameSpace)) ? $"{nameSpace}.{typeName}".Replace(".", string.Empty) : typeName, "s"/* "Aliases"*/).Replace("_", string.Empty); //return string.Concat(_useNamespaceInEntitySetName ? dataObjectType.FullName.Replace(".", string.Empty) : dataObjectType.Name, "s"/* "Aliases"*/).Replace("_", string.Empty); } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs index 8563af41..ca30431c 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs @@ -2,10 +2,9 @@ { using System.Collections.Generic; using System.Net; - using System.Net.Http; - - using ICSSoft.STORMNET; - + using System.Net.Http; + using ICSSoft.STORMNET; + using Microsoft.AspNetCore.Http; using NewPlatform.Flexberry.ORM.ODataService.Tests.Extensions; using Newtonsoft.Json; @@ -27,7 +26,7 @@ public class MetaDataTest : BaseODataServiceIntegratedTest public MetaDataTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { - } + } #endif /// @@ -76,5 +75,31 @@ public void ObjectsWithCountTest() } }); } + + /// + /// + /// + [Fact] + public void GetFullMetadataTest() + { + ActODataService(args => + { + // Формируем URL запроса к OData-сервису. + string requestUrl = string.Format("http://localhost/odata/$metadata"); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно. + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + + // Получим строку с ответом. + string receivedData = response.Content.ReadAsStringAsync().Result.Beautify(); + + Assert.True(!string.IsNullOrEmpty(receivedData)); + Assert.StartsWith("", receivedData); + } + }); + } } } From 7f3529757c98ec264c13898f5b867ab83798e57f Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Mon, 16 Jan 2023 09:59:42 +0500 Subject: [PATCH 16/77] Changed version at nuspec up to 6.3.0-alpha03 --- NewPlatform.Flexberry.ORM.ODataService.nuspec | 3 ++- .../Model/DataObjectEdmModel.cs | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 40219d01..5e5a7c0f 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 6.3.0-alpha02 + 6.3.0-alpha03 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -15,6 +15,7 @@ Changed 1. Upgrade `Microsoft.AspNet.OData` to `7.6.1` 2. Upgrade `NewPlatform.Flexberry.AspNetCore.OData` to `7.6.2-alpha01` + 3. Added stubbed namespace for entities with publish name. Add 1. Support IExportStringedObjectViewService interface call for fast excel export. diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs index c9c1427c..0b9f94e3 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs @@ -743,13 +743,12 @@ private string GetEntityTypeNamespace(Type type) if (type != typeof(DataObject) && EdmModelBuilder != null && EdmModelBuilder.EntityTypeNamespaceBuilder != null) name = EdmModelBuilder.EntityTypeNamespaceBuilder(type); -#if NETSTANDARD - // On NetStandard there are extra checks that lead to exceptions if name is empty or null. + // There are extra checks on MS libraries that lead to exceptions if name is empty or null. if (name == string.Empty) { return "____"; } -#endif + return name; } From 708df13971dd9155066e76ca9de9c8a0f5b6223d Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Mon, 16 Jan 2023 12:48:54 +0500 Subject: [PATCH 17/77] Added forgotten comment --- .../CRUD/Read/MetaDataTest.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs index ca30431c..3f388322 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs @@ -2,9 +2,9 @@ { using System.Collections.Generic; using System.Net; - using System.Net.Http; - using ICSSoft.STORMNET; - using Microsoft.AspNetCore.Http; + using System.Net.Http; + using ICSSoft.STORMNET; + using Microsoft.AspNetCore.Http; using NewPlatform.Flexberry.ORM.ODataService.Tests.Extensions; using Newtonsoft.Json; @@ -26,7 +26,7 @@ public class MetaDataTest : BaseODataServiceIntegratedTest public MetaDataTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { - } + } #endif /// @@ -77,7 +77,7 @@ public void ObjectsWithCountTest() } /// - /// + /// Тест проверки получения метаданных без ошибки. /// [Fact] public void GetFullMetadataTest() @@ -85,9 +85,9 @@ public void GetFullMetadataTest() ActODataService(args => { // Формируем URL запроса к OData-сервису. - string requestUrl = string.Format("http://localhost/odata/$metadata"); - - // Обращаемся к OData-сервису и обрабатываем ответ. + string requestUrl = string.Format("http://localhost/odata/$metadata"); + + // Обращаемся к OData-сервису и обрабатываем ответ. using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result) { // Убедимся, что запрос завершился успешно. @@ -98,7 +98,7 @@ public void GetFullMetadataTest() Assert.True(!string.IsNullOrEmpty(receivedData)); Assert.StartsWith("", receivedData); - } + } }); } } From edd2af9e46ee24a02a45065590861da4c5206ab9 Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Thu, 19 Jan 2023 14:28:34 +0500 Subject: [PATCH 18/77] Added net7 to target frameworks --- .../NewPlatform.Flexberry.ORM.ODataService.Files.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataService.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataService.Tests.csproj | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj index 5f485303..aecab398 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj @@ -1,7 +1,7 @@  - net45;net461;netcoreapp3.1;netstandard2.0;net6.0 + net45;net461;netcoreapp3.1;netstandard2.0;net6.0;net7.0 Debug;Release latest NewPlatform.Flexberry.ORM.ODataService.Files diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index 780a7902..884d9ace 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -1,7 +1,7 @@  - net45;net461;netcoreapp3.1;netstandard2.0;net6.0 + net45;net461;netcoreapp3.1;netstandard2.0;net6.0;net7.0 Debug;Release latest NewPlatform.Flexberry.ORM.ODataService diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj index 96db3a7a..1dde4e14 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1;netstandard2.0;net6.0 + netcoreapp3.1;netstandard2.0;net6.0;net7.0 Debug;Release latest NewPlatform.Flexberry.ORM.ODataServiceCore.Common diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj b/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj index 0c929e29..9b08254f 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi/NewPlatform.Flexberry.ORM.ODataServiceCore.WebApi.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1;netstandard2.0;net6.0 + netcoreapp3.1;netstandard2.0;net6.0;net7.0 Debug;Release latest NewPlatform.Flexberry.ORM.ODataService.WebApi diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj index 2154185d..fb0c1dea 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj @@ -1,7 +1,7 @@  - net6.0;net461;netcoreapp3.1; + net6.0;net461;netcoreapp3.1;net7.0 Debug;Release latest NewPlatform.Flexberry.ORM.ODataService.Tests From edc0fd4a2a0f17ac82cf3050b2c35b12f3def9a3 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Fri, 20 Jan 2023 12:21:33 +0500 Subject: [PATCH 19/77] Update build.yml to add .net7 --- .github/workflows/build.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4aebc233..b5dc2f78 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -64,6 +64,13 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: 6.0.x + + # Building requires an up-to-date .NET SDK. + + - name: Install .NET 7.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 7.0.x - name: Restore NewPlatform.Flexberry.ORM.ODataService.sln run: dotnet restore NewPlatform.Flexberry.ORM.ODataService.sln @@ -79,6 +86,9 @@ jobs: - name: Test on dotnet 6.0 run: dotnet test ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/$CONFIGURATION/net6.0/NewPlatform.Flexberry.ORM.ODataService.Tests.dll + + - name: Test on dotnet 7.0 + run: dotnet test ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/$CONFIGURATION/net7.0/NewPlatform.Flexberry.ORM.ODataService.Tests.dll - name: Test under mono run: mono ./testrunner/xunit.runner.console.$XUNIT_RUNNER/tools/net461/xunit.console.exe ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/$CONFIGURATION/net461/NewPlatform.Flexberry.ORM.ODataService.Tests.dll @@ -133,6 +143,11 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: 6.0.x + + - name: Install .NET 7.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 7.0.x - name: Restore NewPlatform.Flexberry.ORM.ODataService.sln run: dotnet restore NewPlatform.Flexberry.ORM.ODataService.sln @@ -148,6 +163,9 @@ jobs: - name: Test on dotnet 6.0 run: dotnet test ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/$CONFIGURATION/net6.0/NewPlatform.Flexberry.ORM.ODataService.Tests.dll + + - name: Test on dotnet 7.0 + run: dotnet test ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/$CONFIGURATION/net7.0/NewPlatform.Flexberry.ORM.ODataService.Tests.dll - name: Test under mono run: mono ./testrunner/xunit.runner.console.$XUNIT_RUNNER/tools/net461/xunit.console.exe ./Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/bin/$CONFIGURATION/net461/NewPlatform.Flexberry.ORM.ODataService.Tests.dll From 255f75181411423c3f6ba73b3d1e14b7b608c193 Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Tue, 7 Feb 2023 16:42:59 +0500 Subject: [PATCH 20/77] Added net 7 to nuspek file --- NewPlatform.Flexberry.ORM.ODataService.nuspec | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 5e5a7c0f..6dd5a022 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 6.3.0-alpha03 + 7.0.0-alpha01 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -14,7 +14,7 @@ Changed 1. Upgrade `Microsoft.AspNet.OData` to `7.6.1` - 2. Upgrade `NewPlatform.Flexberry.AspNetCore.OData` to `7.6.2-alpha01` + 2. Upgrade `NewPlatform.Flexberry.AspNetCore.OData` to `7.6.2-beta01` 3. Added stubbed namespace for entities with publish name. Add @@ -44,19 +44,25 @@ - + - + - + + + + + + + @@ -104,5 +110,14 @@ + + + + + + + + + From b4071753557271b8b9c366d5690fe4cbe876d6d0 Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Tue, 7 Feb 2023 17:40:49 +0500 Subject: [PATCH 21/77] Updated nuspek to 6.3.0-alpha04 --- NewPlatform.Flexberry.ORM.ODataService.nuspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 6dd5a022..92d67c0e 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 7.0.0-alpha01 + 6.3.0-alpha04 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. From 8642a19d324e4903ba86fda43a66904dd1d37e10 Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Tue, 7 Feb 2023 18:51:52 +0500 Subject: [PATCH 22/77] Updated to 7.0.0-beta01 --- NewPlatform.Flexberry.ORM.ODataService.nuspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 92d67c0e..3a7e1999 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 6.3.0-alpha04 + 7.0.0-beta01 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. From d176a6673637dd413c728230b8ed8106f51f2bfe Mon Sep 17 00:00:00 2001 From: Anisimova Tatyana Date: Tue, 7 Feb 2023 19:44:53 +0500 Subject: [PATCH 23/77] Updated packages on sample project --- .../ODataServiceSample.AspNet.csproj | 638 +++++++++--------- Samples/ODataServiceSample.AspNet/Web.config | 404 +++++------ .../ODataServiceSample.AspNet/packages.config | 108 +-- 3 files changed, 575 insertions(+), 575 deletions(-) diff --git a/Samples/ODataServiceSample.AspNet/ODataServiceSample.AspNet.csproj b/Samples/ODataServiceSample.AspNet/ODataServiceSample.AspNet.csproj index 87b7f669..cc892c7d 100644 --- a/Samples/ODataServiceSample.AspNet/ODataServiceSample.AspNet.csproj +++ b/Samples/ODataServiceSample.AspNet/ODataServiceSample.AspNet.csproj @@ -1,326 +1,326 @@ - - - - Debug - AnyCPU - - - 2.0 - {D1CE223D-844E-45FF-BDAD-6252A3F3A4EA} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - ODataServiceSample.AspNet - ODataServiceSample.AspNet - v4.6.1 - true - - 44324 - - - - - - - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - - - true - pdbonly - true - bin\ - TRACE - prompt - 4 - - - - ..\..\packages\SharpZipLib.1.2.0\lib\net45\ICSharpCode.SharpZipLib.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.Business.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.Business.ExternalLangDef.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.Business.LINQProvider.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.Business.LockService.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.MSSQLDataService.6.0.0\lib\net45\ICSSoft.STORMNET.Business.MSSQLDataService.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.OracleDataService.6.0.0\lib\net45\ICSSoft.STORMNET.Business.OracleDataService.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.PostgresDataService.6.0.0\lib\net45\ICSSoft.STORMNET.Business.PostgresDataService.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.Collections.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.DataObject.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.FunctionalLanguage.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.Tools.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.UserDataTypes.dll - - - ..\..\packages\NewPlatform.Flexberry.LogService.Objects.4.0.0\lib\net45\IIS.Caseberry.Logging.BusinessServers.dll - - - ..\..\packages\NewPlatform.Flexberry.LogService.Objects.4.0.0\lib\net45\IIS.Caseberry.Logging.Objects.dll - - - ..\..\packages\log4net.2.0.12\lib\net45\log4net.dll - - - ..\..\packages\Microsoft.AspNet.OData.7.5.14\lib\net45\Microsoft.AspNet.OData.dll - - - ..\..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll - - - - ..\..\packages\Microsoft.Extensions.DependencyInjection.2.0.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.dll - - - ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.0.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - - ..\..\packages\Microsoft.OData.Core.7.10.0\lib\net45\Microsoft.OData.Core.dll - - - ..\..\packages\Microsoft.OData.Edm.7.10.0\lib\net45\Microsoft.OData.Edm.dll - - - ..\..\packages\Microsoft.Spatial.7.10.0\lib\net45\Microsoft.Spatial.dll - - - ..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - - - ..\..\packages\NewPlatform.Flexberry.AspNet.WebApi.Cors.1.2.0\lib\net45\NewPlatform.Flexberry.AspNet.WebApi.Cors.dll - - - ..\..\packages\NewPlatform.Flexberry.LockService.3.0.0\lib\net45\NewPlatform.Flexberry.LockService.dll - - - ..\..\packages\NewPlatform.Flexberry.LogService.2.0.0\lib\net45\NewPlatform.Flexberry.LogService.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\NewPlatform.Flexberry.ORM.CurrentUserService.dll - - - ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\NewPlatform.Flexberry.ORM.UnityFactory.dll - - - ..\..\packages\NewPlatform.Flexberry.UserSettingsService.4.0.0\lib\net45\NewPlatform.Flexberry.UserSettingsService.dll - - - ..\..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll - - - ..\..\packages\Npgsql.4.0.7\lib\net451\Npgsql.dll - - - ..\..\packages\Oracle.ManagedDataAccess.12.1.022\lib\net40\Oracle.ManagedDataAccess.dll - - - ..\..\packages\Remotion.Linq.2.2.0\lib\net45\Remotion.Linq.dll - - - ..\..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - ..\..\packages\System.Configuration.ConfigurationManager.6.0.0\lib\net461\System.Configuration.ConfigurationManager.dll - - - - ..\..\packages\System.Data.SqlClient.4.6.1\lib\net461\System.Data.SqlClient.dll - - - - ..\..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - - ..\..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll - - - - ..\..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - ..\..\packages\System.Runtime.Serialization.Formatters.4.3.0\lib\net46\System.Runtime.Serialization.Formatters.dll - - - ..\..\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll - - - - ..\..\packages\System.Security.AccessControl.6.0.0\lib\net461\System.Security.AccessControl.dll - - - ..\..\packages\System.Security.Permissions.6.0.0\lib\net461\System.Security.Permissions.dll - - - ..\..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll - - - - ..\..\packages\System.Text.Encodings.Web.4.7.2\lib\net461\System.Text.Encodings.Web.dll - - - ..\..\packages\System.Text.Json.4.6.0\lib\net461\System.Text.Json.dll - - - ..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll - - - - ..\..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\..\packages\Microsoft.AspNet.Cors.5.2.7\lib\net45\System.Web.Cors.dll - - - - - - - - - - - - ..\..\packages\Microsoft.AspNet.WebApi.Core.5.2.7\lib\net45\System.Web.Http.dll - - - ..\..\packages\Microsoft.AspNet.WebApi.Cors.5.2.7\lib\net45\System.Web.Http.Cors.dll - - - ..\..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.7\lib\net45\System.Web.Http.WebHost.dll - - - - - - - - - - ..\..\packages\Unity.Abstractions.5.11.6\lib\net46\Unity.Abstractions.dll - - - ..\..\packages\Unity.AspNet.WebApi.5.11.2\lib\net46\Unity.AspNet.WebApi.dll - - - ..\..\packages\Unity.Configuration.5.11.2\lib\net46\Unity.Configuration.dll - - - ..\..\packages\Unity.Container.5.11.8\lib\net46\Unity.Container.dll - - - ..\..\packages\WebActivatorEx.2.2.0\lib\net40\WebActivatorEx.dll - - - - - - - - - - - - - Global.asax - - - - - - - Web.config - - - Web.config - - - - - {22faa967-ea69-4ae9-9a07-ecee6c499bbb} - NewPlatform.Flexberry.ORM.ODataService.Files - - - {d3ebd348-d0f8-4c1e-bdc0-6c77d9d443cb} - NewPlatform.Flexberry.ORM.ODataService.WebApi - - - {01bbe45a-3a3f-4ea5-9457-8c62167b5e99} - NewPlatform.Flexberry.ORM.ODataService - - - {bfb771c3-51d8-4804-bb0f-a0b4bd7981d9} - NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers - - - {10ce2502-3eef-4285-935f-e18f5f623c6d} - NewPlatform.Flexberry.ORM.ODataService.Tests.Objects - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - - - - - - True - True - 2730 - / - https://localhost:44324/ - False - False - - - False - - - - + + + + Debug + AnyCPU + + + 2.0 + {D1CE223D-844E-45FF-BDAD-6252A3F3A4EA} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + ODataServiceSample.AspNet + ODataServiceSample.AspNet + v4.6.1 + true + + 44324 + + + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + true + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + ..\..\packages\SharpZipLib.1.2.0\lib\net45\ICSharpCode.SharpZipLib.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.Business.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.Business.ExternalLangDef.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.Business.LINQProvider.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.Business.LockService.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.MSSQLDataService.6.0.0\lib\net45\ICSSoft.STORMNET.Business.MSSQLDataService.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.OracleDataService.6.0.0\lib\net45\ICSSoft.STORMNET.Business.OracleDataService.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.PostgresDataService.6.0.0\lib\net45\ICSSoft.STORMNET.Business.PostgresDataService.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.Collections.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.DataObject.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.FunctionalLanguage.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.Tools.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\ICSSoft.STORMNET.UserDataTypes.dll + + + ..\..\packages\NewPlatform.Flexberry.LogService.Objects.4.0.0\lib\net45\IIS.Caseberry.Logging.BusinessServers.dll + + + ..\..\packages\NewPlatform.Flexberry.LogService.Objects.4.0.0\lib\net45\IIS.Caseberry.Logging.Objects.dll + + + ..\..\packages\log4net.2.0.12\lib\net45\log4net.dll + + + ..\..\packages\Microsoft.AspNet.OData.7.6.1\lib\net45\Microsoft.AspNet.OData.dll + + + ..\..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll + + + + ..\..\packages\Microsoft.Extensions.DependencyInjection.2.0.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.dll + + + ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.0.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + + ..\..\packages\Microsoft.OData.Core.7.12.2\lib\net45\Microsoft.OData.Core.dll + + + ..\..\packages\Microsoft.OData.Edm.7.12.2\lib\net45\Microsoft.OData.Edm.dll + + + ..\..\packages\Microsoft.Spatial.7.12.2\lib\net45\Microsoft.Spatial.dll + + + ..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + + + ..\..\packages\NewPlatform.Flexberry.AspNet.WebApi.Cors.1.2.0\lib\net45\NewPlatform.Flexberry.AspNet.WebApi.Cors.dll + + + ..\..\packages\NewPlatform.Flexberry.LockService.3.0.0\lib\net45\NewPlatform.Flexberry.LockService.dll + + + ..\..\packages\NewPlatform.Flexberry.LogService.2.0.0\lib\net45\NewPlatform.Flexberry.LogService.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\NewPlatform.Flexberry.ORM.CurrentUserService.dll + + + ..\..\packages\NewPlatform.Flexberry.ORM.6.0.0\lib\net45\NewPlatform.Flexberry.ORM.UnityFactory.dll + + + ..\..\packages\NewPlatform.Flexberry.UserSettingsService.4.0.0\lib\net45\NewPlatform.Flexberry.UserSettingsService.dll + + + ..\..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + + + ..\..\packages\Npgsql.4.0.7\lib\net451\Npgsql.dll + + + ..\..\packages\Oracle.ManagedDataAccess.12.1.022\lib\net40\Oracle.ManagedDataAccess.dll + + + ..\..\packages\Remotion.Linq.2.2.0\lib\net45\Remotion.Linq.dll + + + ..\..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + ..\..\packages\System.Configuration.ConfigurationManager.6.0.0\lib\net461\System.Configuration.ConfigurationManager.dll + + + + ..\..\packages\System.Data.SqlClient.4.6.1\lib\net461\System.Data.SqlClient.dll + + + + ..\..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + + ..\..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll + + + + ..\..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + + ..\..\packages\System.Runtime.Serialization.Formatters.4.3.0\lib\net46\System.Runtime.Serialization.Formatters.dll + + + ..\..\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll + + + + ..\..\packages\System.Security.AccessControl.6.0.0\lib\net461\System.Security.AccessControl.dll + + + ..\..\packages\System.Security.Permissions.6.0.0\lib\net461\System.Security.Permissions.dll + + + ..\..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll + + + + ..\..\packages\System.Text.Encodings.Web.4.7.2\lib\net461\System.Text.Encodings.Web.dll + + + ..\..\packages\System.Text.Json.4.6.0\lib\net461\System.Text.Json.dll + + + ..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + + + ..\..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll + + + ..\..\packages\Microsoft.AspNet.Cors.5.2.7\lib\net45\System.Web.Cors.dll + + + + + + + + + + + + ..\..\packages\Microsoft.AspNet.WebApi.Core.5.2.7\lib\net45\System.Web.Http.dll + + + ..\..\packages\Microsoft.AspNet.WebApi.Cors.5.2.7\lib\net45\System.Web.Http.Cors.dll + + + ..\..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.7\lib\net45\System.Web.Http.WebHost.dll + + + + + + + + + + ..\..\packages\Unity.Abstractions.5.11.6\lib\net46\Unity.Abstractions.dll + + + ..\..\packages\Unity.AspNet.WebApi.5.11.2\lib\net46\Unity.AspNet.WebApi.dll + + + ..\..\packages\Unity.Configuration.5.11.2\lib\net46\Unity.Configuration.dll + + + ..\..\packages\Unity.Container.5.11.8\lib\net46\Unity.Container.dll + + + ..\..\packages\WebActivatorEx.2.2.0\lib\net40\WebActivatorEx.dll + + + + + + + + + + + + + Global.asax + + + + + + + Web.config + + + Web.config + + + + + {22faa967-ea69-4ae9-9a07-ecee6c499bbb} + NewPlatform.Flexberry.ORM.ODataService.Files + + + {d3ebd348-d0f8-4c1e-bdc0-6c77d9d443cb} + NewPlatform.Flexberry.ORM.ODataService.WebApi + + + {01bbe45a-3a3f-4ea5-9457-8c62167b5e99} + NewPlatform.Flexberry.ORM.ODataService + + + {bfb771c3-51d8-4804-bb0f-a0b4bd7981d9} + NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers + + + {10ce2502-3eef-4285-935f-e18f5f623c6d} + NewPlatform.Flexberry.ORM.ODataService.Tests.Objects + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + True + True + 2730 + / + https://localhost:44324/ + False + False + + + False + + + + + --> \ No newline at end of file diff --git a/Samples/ODataServiceSample.AspNet/Web.config b/Samples/ODataServiceSample.AspNet/Web.config index ce45f008..53ccffc2 100644 --- a/Samples/ODataServiceSample.AspNet/Web.config +++ b/Samples/ODataServiceSample.AspNet/Web.config @@ -1,202 +1,202 @@ - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/ODataServiceSample.AspNet/packages.config b/Samples/ODataServiceSample.AspNet/packages.config index 7f1d5617..d8f6e075 100644 --- a/Samples/ODataServiceSample.AspNet/packages.config +++ b/Samples/ODataServiceSample.AspNet/packages.config @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From d30f84a18a9beb3a4997704d9bf64e35f3567467 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Fri, 17 Feb 2023 13:56:35 +0500 Subject: [PATCH 24/77] Update depending NewPlatform.Flexberry.AspNetCore.OData up to 7.6.2 --- .../NewPlatform.Flexberry.ORM.ODataService.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index 7dee68d5..85c00cef 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -47,7 +47,7 @@ - + From a55db21745d3353463793818f91accaed0cf40fe Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Fri, 17 Feb 2023 14:09:51 +0500 Subject: [PATCH 25/77] Update NewPlatform.Flexberry.ORM up to 7.0.0 --- ...rm.Flexberry.ORM.ODataService.Files.csproj | 2 +- ...m.Flexberry.ORM.ODataService.WebApi.csproj | 2 +- ...Platform.Flexberry.ORM.ODataService.csproj | 2 +- ...exberry.ORM.ODataServiceCore.Common.csproj | 2 +- .../ODataServiceSample.AspNet.csproj | 28 +++++++++---------- .../ODataServiceSample.AspNet/packages.config | 8 +++--- .../ODataServiceSample.AspNetCore.csproj | 4 +-- ....ODataService.Tests.BusinessServers.csproj | 8 +++--- ...rm.Flexberry.ORM.ODataService.Tests.csproj | 6 ++-- ...erry.ORM.ODataService.Tests.Objects.csproj | 8 +++--- 10 files changed, 35 insertions(+), 35 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj index de1d1840..0efac5ca 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj @@ -21,7 +21,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj b/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj index 085e1116..7f2c41cd 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj @@ -22,7 +22,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index 85c00cef..a80cce2d 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -26,7 +26,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj index 839a496b..104e7d0a 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj @@ -26,7 +26,7 @@ - + diff --git a/Samples/ODataServiceSample.AspNet/ODataServiceSample.AspNet.csproj b/Samples/ODataServiceSample.AspNet/ODataServiceSample.AspNet.csproj index c98efb48..56ea6fc3 100644 --- a/Samples/ODataServiceSample.AspNet/ODataServiceSample.AspNet.csproj +++ b/Samples/ODataServiceSample.AspNet/ODataServiceSample.AspNet.csproj @@ -46,40 +46,40 @@ ..\..\packages\SharpZipLib.1.3.3\lib\net45\ICSharpCode.SharpZipLib.dll - ..\..\packages\NewPlatform.Flexberry.ORM.6.1.0\lib\net45\ICSSoft.STORMNET.Business.dll + ..\..\packages\NewPlatform.Flexberry.ORM.7.0.0\lib\net45\ICSSoft.STORMNET.Business.dll - ..\..\packages\NewPlatform.Flexberry.ORM.6.1.0\lib\net45\ICSSoft.STORMNET.Business.ExternalLangDef.dll + ..\..\packages\NewPlatform.Flexberry.ORM.7.0.0\lib\net45\ICSSoft.STORMNET.Business.ExternalLangDef.dll - ..\..\packages\NewPlatform.Flexberry.ORM.6.1.0\lib\net45\ICSSoft.STORMNET.Business.LINQProvider.dll + ..\..\packages\NewPlatform.Flexberry.ORM.7.0.0\lib\net45\ICSSoft.STORMNET.Business.LINQProvider.dll - ..\..\packages\NewPlatform.Flexberry.ORM.6.1.0\lib\net45\ICSSoft.STORMNET.Business.LockService.dll + ..\..\packages\NewPlatform.Flexberry.ORM.7.0.0\lib\net45\ICSSoft.STORMNET.Business.LockService.dll - ..\..\packages\NewPlatform.Flexberry.ORM.MSSQLDataService.6.1.0\lib\net45\ICSSoft.STORMNET.Business.MSSQLDataService.dll + ..\..\packages\NewPlatform.Flexberry.ORM.MSSQLDataService.7.0.0\lib\net45\ICSSoft.STORMNET.Business.MSSQLDataService.dll - ..\..\packages\NewPlatform.Flexberry.ORM.OracleDataService.6.1.0\lib\net45\ICSSoft.STORMNET.Business.OracleDataService.dll + ..\..\packages\NewPlatform.Flexberry.ORM.OracleDataService.7.0.0\lib\net45\ICSSoft.STORMNET.Business.OracleDataService.dll - ..\..\packages\NewPlatform.Flexberry.ORM.PostgresDataService.6.1.0\lib\net45\ICSSoft.STORMNET.Business.PostgresDataService.dll + ..\..\packages\NewPlatform.Flexberry.ORM.PostgresDataService.7.0.0\lib\net45\ICSSoft.STORMNET.Business.PostgresDataService.dll - ..\..\packages\NewPlatform.Flexberry.ORM.6.1.0\lib\net45\ICSSoft.STORMNET.Collections.dll + ..\..\packages\NewPlatform.Flexberry.ORM.7.0.0\lib\net45\ICSSoft.STORMNET.Collections.dll - ..\..\packages\NewPlatform.Flexberry.ORM.6.1.0\lib\net45\ICSSoft.STORMNET.DataObject.dll + ..\..\packages\NewPlatform.Flexberry.ORM.7.0.0\lib\net45\ICSSoft.STORMNET.DataObject.dll - ..\..\packages\NewPlatform.Flexberry.ORM.6.1.0\lib\net45\ICSSoft.STORMNET.FunctionalLanguage.dll + ..\..\packages\NewPlatform.Flexberry.ORM.7.0.0\lib\net45\ICSSoft.STORMNET.FunctionalLanguage.dll - ..\..\packages\NewPlatform.Flexberry.ORM.6.1.0\lib\net45\ICSSoft.STORMNET.Tools.dll + ..\..\packages\NewPlatform.Flexberry.ORM.7.0.0\lib\net45\ICSSoft.STORMNET.Tools.dll - ..\..\packages\NewPlatform.Flexberry.ORM.6.1.0\lib\net45\ICSSoft.STORMNET.UserDataTypes.dll + ..\..\packages\NewPlatform.Flexberry.ORM.7.0.0\lib\net45\ICSSoft.STORMNET.UserDataTypes.dll ..\..\packages\NewPlatform.Flexberry.LogService.Objects.4.0.0\lib\net45\IIS.Caseberry.Logging.BusinessServers.dll @@ -125,10 +125,10 @@ ..\..\packages\NewPlatform.Flexberry.LogService.2.1.0\lib\net45\NewPlatform.Flexberry.LogService.dll - ..\..\packages\NewPlatform.Flexberry.ORM.6.1.0\lib\net45\NewPlatform.Flexberry.ORM.CurrentUserService.dll + ..\..\packages\NewPlatform.Flexberry.ORM.7.0.0\lib\net45\NewPlatform.Flexberry.ORM.CurrentUserService.dll - ..\..\packages\NewPlatform.Flexberry.ORM.6.1.0\lib\net45\NewPlatform.Flexberry.ORM.UnityFactory.dll + ..\..\packages\NewPlatform.Flexberry.ORM.7.0.0\lib\net45\NewPlatform.Flexberry.ORM.UnityFactory.dll ..\..\packages\NewPlatform.Flexberry.UserSettingsService.4.0.0\lib\net45\NewPlatform.Flexberry.UserSettingsService.dll diff --git a/Samples/ODataServiceSample.AspNet/packages.config b/Samples/ODataServiceSample.AspNet/packages.config index 8ca23a48..144abee6 100644 --- a/Samples/ODataServiceSample.AspNet/packages.config +++ b/Samples/ODataServiceSample.AspNet/packages.config @@ -19,10 +19,10 @@ - - - - + + + + diff --git a/Samples/ODataServiceSample.AspNetCore/ODataServiceSample.AspNetCore.csproj b/Samples/ODataServiceSample.AspNetCore/ODataServiceSample.AspNetCore.csproj index e7e94ac1..5495ea3e 100644 --- a/Samples/ODataServiceSample.AspNetCore/ODataServiceSample.AspNetCore.csproj +++ b/Samples/ODataServiceSample.AspNetCore/ODataServiceSample.AspNetCore.csproj @@ -13,8 +13,8 @@ - - + + diff --git a/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj b/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj index 257c8f41..376e1dc8 100644 --- a/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj +++ b/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj @@ -14,10 +14,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj index 9fee8c31..6b7d0970 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj @@ -40,9 +40,9 @@ - - - + + + diff --git a/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj b/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj index 472c7861..73e0de6a 100644 --- a/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj +++ b/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj @@ -14,10 +14,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 8a29fc72443fdbc5c1e446a771321752f868a5b8 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Fri, 17 Feb 2023 14:13:19 +0500 Subject: [PATCH 26/77] Update NewPlatform.Flexberry.ORM.ODataService up to 7.0.0 --- CHANGELOG.md | 10 +++++++ NewPlatform.Flexberry.ORM.ODataService.nuspec | 29 ++++++++++--------- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d59ed36b..398dfc8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,16 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed +## [7.0.0] - 2023.02.17 + +### Added +1. Added stubbed namespace for entities with publish name. +2. Added .net6 and .net7 as target frameworks. + +### Changed +1. Upgrade `Microsoft.AspNet.OData` to `7.6.1` +2. Upgrade `NewPlatform.Flexberry.AspNetCore.OData` to `7.6.2` + ## [6.2.0] - 2023.02.16 ### Added diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index ba7371e5..66baa57c 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 7.0.0-beta01 + 7.0.0 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -12,11 +12,14 @@ true Flexberry ORM OData Service Package. + Added + 1. Added stubbed namespace for entities with publish name. + 2. Added .net6 and .net7 as target frameworks. + Changed 1. Upgrade `Microsoft.AspNet.OData` to `7.6.1` - 2. Upgrade `NewPlatform.Flexberry.AspNetCore.OData` to `7.6.2-beta01` - 3. Added stubbed namespace for entities with publish name. - + 2. Upgrade `NewPlatform.Flexberry.AspNetCore.OData` to `7.6.2` + Copyright New Platform Ltd 2023 Flexberry ORM OData ODataService @@ -28,31 +31,31 @@ - + - + - + - + - + - + - + - + - + From 13e5ee075bbf22ea50d9f96e7fcff6681c259b3f Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Wed, 12 Apr 2023 13:43:59 +0500 Subject: [PATCH 27/77] Updated NewPlatform.Flexberry.ORM up to 7.1.0 --- .../NewPlatform.Flexberry.ORM.ODataService.Files.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataService.csproj | 2 +- ...wPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj | 2 +- ...lexberry.ORM.ODataService.Tests.BusinessServers.csproj | 8 ++++---- .../NewPlatform.Flexberry.ORM.ODataService.Tests.csproj | 6 +++--- ...atform.Flexberry.ORM.ODataService.Tests.Objects.csproj | 8 ++++---- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj index 0efac5ca..6443def9 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj @@ -21,7 +21,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj b/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj index 7f2c41cd..c29f2c93 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj @@ -22,7 +22,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index a80cce2d..f5e49399 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -26,7 +26,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj index 104e7d0a..959f3040 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj @@ -26,7 +26,7 @@ - + diff --git a/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj b/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj index 376e1dc8..e5c2a1e5 100644 --- a/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj +++ b/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj @@ -14,10 +14,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj index 6b7d0970..ec8bcc03 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj @@ -40,9 +40,9 @@ - - - + + + diff --git a/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj b/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj index 73e0de6a..c0fe08bd 100644 --- a/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj +++ b/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj @@ -14,10 +14,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive From a94ccd5911891e190b5baed1c77bb3d1f5d60f9c Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Wed, 12 Apr 2023 13:51:10 +0500 Subject: [PATCH 28/77] Updated version of Flexberry ORM ODataService up to 7.1.0 --- CHANGELOG.md | 5 +++++ NewPlatform.Flexberry.ORM.ODataService.nuspec | 19 +++++++------------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 398dfc8b..cc8187bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,11 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed +## [7.1.0] - 2023.04.12 + +### Changed +1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.0`. + ## [7.0.0] - 2023.02.17 ### Added diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 66baa57c..13a49fab 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 7.0.0 + 7.1.0 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -12,13 +12,8 @@ true Flexberry ORM OData Service Package. - Added - 1. Added stubbed namespace for entities with publish name. - 2. Added .net6 and .net7 as target frameworks. - Changed - 1. Upgrade `Microsoft.AspNet.OData` to `7.6.1` - 2. Upgrade `NewPlatform.Flexberry.AspNetCore.OData` to `7.6.2` + 1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.0`. Copyright New Platform Ltd 2023 Flexberry ORM OData ODataService @@ -31,31 +26,31 @@ - + - + - + - + - + From 1a4dce94a0c5d2c7fccba77a093598c2ab890297 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Sat, 15 Apr 2023 21:33:02 +0500 Subject: [PATCH 29/77] Updates NewPlatform.Flexberry.ORM up to 7.1.1-beta01 --- .../NewPlatform.Flexberry.ORM.ODataService.Files.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataService.csproj | 2 +- ...wPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj | 2 +- ...lexberry.ORM.ODataService.Tests.BusinessServers.csproj | 8 ++++---- .../NewPlatform.Flexberry.ORM.ODataService.Tests.csproj | 6 +++--- ...atform.Flexberry.ORM.ODataService.Tests.Objects.csproj | 8 ++++---- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj index 6443def9..c95c47da 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj @@ -21,7 +21,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj b/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj index c29f2c93..5293c358 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj @@ -22,7 +22,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index f5e49399..956c37a7 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -26,7 +26,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj index 959f3040..bc24bf67 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj @@ -26,7 +26,7 @@ - + diff --git a/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj b/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj index e5c2a1e5..42fd38a2 100644 --- a/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj +++ b/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj @@ -14,10 +14,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj index ec8bcc03..e91c942a 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj @@ -40,9 +40,9 @@ - - - + + + diff --git a/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj b/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj index c0fe08bd..7ae77c6e 100644 --- a/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj +++ b/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj @@ -14,10 +14,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 0d35e6901e37c5f4da25a7bc21d5b626753288a8 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Sat, 15 Apr 2023 21:37:28 +0500 Subject: [PATCH 30/77] Changed objects for new test on ORM --- Tests/Objects/BaseLegoBlock.cs | 12 ++++++++++-- Tests/Objects/LegoBlock.cs | 14 ++++++++++++-- ...265\320\264\320\262\320\265\320\264\321\214.cs" | 2 ++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/Tests/Objects/BaseLegoBlock.cs b/Tests/Objects/BaseLegoBlock.cs index f293872f..c3c45511 100644 --- a/Tests/Objects/BaseLegoBlock.cs +++ b/Tests/Objects/BaseLegoBlock.cs @@ -39,12 +39,20 @@ public class BaseLegoBlock : ICSSoft.STORMNET.DataObject private NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockColor fColor; private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoPatent fPatents; - + // *** Start programmer edit section *** (BaseLegoBlock CustomMembers) + [NotStored] + public virtual string AssocType + { + get + { + return GetType().Name; + } + } // *** End programmer edit section *** (BaseLegoBlock CustomMembers) - + /// /// Name. /// diff --git a/Tests/Objects/LegoBlock.cs b/Tests/Objects/LegoBlock.cs index 655dcf7b..47d1db04 100644 --- a/Tests/Objects/LegoBlock.cs +++ b/Tests/Objects/LegoBlock.cs @@ -48,12 +48,22 @@ public class LegoBlock : NewPlatform.Flexberry.ORM.ODataService.Tests.BaseLegoBl private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockCustomPanel fCustomPanels; private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockTopPanel fTopPanels; - + // *** Start programmer edit section *** (LegoBlock CustomMembers) + [NotStored] + [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.PostgresDataService), "'Association'")] + public override string AssocType + { + get + { + return base.AssocType; + } + } + // *** End programmer edit section *** (LegoBlock CustomMembers) - + /// /// Width. /// diff --git "a/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" "b/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" index 48d23425..2f2b5414 100644 --- "a/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" +++ "b/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" @@ -326,6 +326,8 @@ public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаРожд [StrLen(255)] [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "\'ПорядковыйНомер:\' + @ПорядковыйНомер@ + \", Цвет глаз мамы:\" + isnull(@Мама.ЦветГ" + "лаз@,\'\')")] + [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.PostgresDataService), "\'ПорядковыйНомер:\' || @ПорядковыйНомер@ || \", Цвет глаз мамы:\" || coalesce(@Мама.ЦветГ" + + "лаз@,\'\')")] public virtual string МедведьСтрокой { get From d29705a5eeb6637dfb313f506d85ec0247853de2 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Sat, 15 Apr 2023 21:38:40 +0500 Subject: [PATCH 31/77] Reverse previous changes --- .../Expressions/EdmLibHelpers.cs | 2 +- .../Model/DataObjectEdmModel.cs | 11 +++-------- .../Model/DefaultDataObjectEdmModelBuilder.cs | 3 +-- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Expressions/EdmLibHelpers.cs b/NewPlatform.Flexberry.ORM.ODataService/Expressions/EdmLibHelpers.cs index 86ab66e7..ef8eddec 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Expressions/EdmLibHelpers.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Expressions/EdmLibHelpers.cs @@ -351,7 +351,7 @@ private static string EdmName(this Type clrType) private static string EdmFullName(this Type clrType) { - return string.IsNullOrEmpty(clrType.Namespace) ? clrType.EdmName() : string.Format(CultureInfo.InvariantCulture, "{0}.{1}", clrType.Namespace, clrType.EdmName()); + return string.Format(CultureInfo.InvariantCulture, "{0}.{1}", clrType.Namespace, clrType.EdmName()); } private static IEdmPrimitiveType GetPrimitiveType(EdmPrimitiveTypeKind primitiveKind) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs index 0b9f94e3..c386f791 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs @@ -153,10 +153,7 @@ private void BuildTypeHierarchy() else _typeHierarchy[baseDataObjectType].Add(dataObjectType); - string nameSpace = GetEntityTypeNamespace(dataObjectType); - string typeName = GetEntityTypeName(dataObjectType); - - var typeFullName = string.IsNullOrEmpty(nameSpace) ? typeName : $"{nameSpace}.{typeName}"; + var typeFullName = $"{GetEntityTypeNamespace(dataObjectType)}.{GetEntityTypeName(dataObjectType)}"; if (!_aliasesNameToProperty.ContainsKey(typeFullName)) { _aliasesNameToProperty.Add(typeFullName, new Dictionary()); @@ -724,7 +721,7 @@ private string GetEntityTypeName(Type type) var nameSpace = GetEntityTypeNamespace(type); if (type != typeof(DataObject) && EdmModelBuilder != null && EdmModelBuilder.EntityTypeNameBuilder != null) name = EdmModelBuilder.EntityTypeNameBuilder(type); - var fullname = string.IsNullOrEmpty(nameSpace) ? name : $"{nameSpace}.{name}"; + var fullname = $"{nameSpace}.{name}"; if (!_aliasesNameToType.ContainsKey(fullname)) _aliasesNameToType.Add(fullname, type); if (!_aliasesTypeToName.ContainsKey(type)) @@ -762,9 +759,7 @@ private string GetEntityPropertyName(PropertyInfo prop) var name = prop.Name; if (name != KeyPropertyName && prop.DeclaringType != typeof(DataObject) && EdmModelBuilder != null && EdmModelBuilder.EntityPropertyNameBuilder != null) name = EdmModelBuilder.EntityPropertyNameBuilder(prop); - string nameSpace = GetEntityTypeNamespace(prop.DeclaringType); - string typeName = GetEntityTypeName(prop.DeclaringType); - string typeFullName = string.IsNullOrEmpty(nameSpace) ? typeName : $"{nameSpace}.{typeName}"; + var typeFullName = $"{GetEntityTypeNamespace(prop.DeclaringType)}.{GetEntityTypeName(prop.DeclaringType)}"; if (!_aliasesNameToProperty.ContainsKey(typeFullName)) { _aliasesNameToProperty.Add(typeFullName, new Dictionary()); diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs index 9115e228..b345ffcb 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs @@ -324,8 +324,7 @@ private string BuildEntitySetName(Type dataObjectType) string typeName = BuildEntityTypeName(dataObjectType); string nameSpace = BuildEntityTypeNamespace(dataObjectType); - return string.Concat((_useNamespaceInEntitySetName && !string.IsNullOrEmpty(nameSpace)) ? $"{nameSpace}.{typeName}".Replace(".", string.Empty) : typeName, "s"/* "Aliases"*/).Replace("_", string.Empty); - //return string.Concat(_useNamespaceInEntitySetName ? dataObjectType.FullName.Replace(".", string.Empty) : dataObjectType.Name, "s"/* "Aliases"*/).Replace("_", string.Empty); + return string.Concat(_useNamespaceInEntitySetName ? $"{nameSpace}.{typeName}".Replace(".", string.Empty) : typeName, "s"/* "Aliases"*/).Replace("_", string.Empty); } /// From 0c0c70dc85aca02142339c87fc9f1b663bd32d24 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Sat, 15 Apr 2023 21:39:49 +0500 Subject: [PATCH 32/77] Added filter on response --- .../ODataApplicationBuilderExtensions.cs | 64 ++++++++++++++++++- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs b/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs index 9c936c27..a9699e42 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs @@ -1,11 +1,15 @@ #if NETSTANDARD namespace NewPlatform.Flexberry.ORM.ODataService.Extensions { - using System; + using System; + using System.IO; + using System.Net.Mime; + using System.Threading.Tasks; using Microsoft.AspNet.OData; using Microsoft.AspNet.OData.Common; using Microsoft.AspNet.OData.Extensions; - using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; using NewPlatform.Flexberry.ORM.ODataService.Middleware; @@ -30,6 +34,11 @@ public static IApplicationBuilder UseODataService(this IApplicationBuilder app, VerifyODataServiceIsRegistered(app); + app.Use(async (context, next) => + { + await RewriteResponse(context, next); + }); + return app .UseODataBatching() .UseMiddleware() @@ -48,6 +57,57 @@ private static void VerifyODataServiceIsRegistered(IApplicationBuilder app) throw Error.InvalidOperation(SRResources.MissingODataServices, nameof(IPerRouteContainer)); } } + + /// + /// Removing of extra symbols from response. + /// + /// Context of request. + /// Next middleware. + /// Formed task. + public static async Task RewriteResponse(HttpContext context, Func next) + { + using (var responseBodyStream = new MemoryStream()) + { + var bodyStream = context.Response.Body; + + try + { + context.Response.Body = responseBodyStream; + + await next(); + + responseBodyStream.Seek(0, SeekOrigin.Begin); + var responseBody = new StreamReader(responseBodyStream).ReadToEnd(); + + //Modify the response in some way. + if (context.Response.ContentType.Contains("application/json") + || context.Response.ContentType.Contains("application/xml") + || context.Response.ContentType.Contains("multipart/mixed")) + { + responseBody = responseBody + .Replace("(____.", "(") + .Replace("\"____.", "\"") + .Replace("____.", ".") + .Replace(" Namespace=\"____\"", " Namespace=\"\""); + } + + using (var newStream = new MemoryStream()) + { + var sw = new StreamWriter(newStream); + sw.Write(responseBody); + sw.Flush(); + + newStream.Seek(0, SeekOrigin.Begin); + + await newStream.CopyToAsync(bodyStream); + } + } + finally + { + context.Response.Body = bodyStream; + } + } + } } } #endif From 8be8eba80fa1e26bf64d25a01d3a06d86e4f9c01 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Sat, 15 Apr 2023 21:43:25 +0500 Subject: [PATCH 33/77] Added test on wrong symbols on get --- .../CRUD/Read/GetTest.cs | 108 ++++++++++++++++++ .../CRUD/Read/MetaDataTest.cs | 5 +- 2 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs new file mode 100644 index 00000000..2205aee6 --- /dev/null +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs @@ -0,0 +1,108 @@ +namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Read +{ + using System; + using System.Collections.Generic; + using System.Net; + using System.Net.Http; + + using ICSSoft.STORMNET; + using ICSSoft.STORMNET.UserDataTypes; + using ICSSoft.STORMNET.Windows.Forms; + + using NewPlatform.Flexberry.ORM.ODataService.Tests.Extensions; + + using Newtonsoft.Json; + using Newtonsoft.Json.Linq; + + using Xunit; + + /// + /// Класс тестов для проверки корректной обработки Get-запросов. + /// + public class GetTest : BaseODataServiceIntegratedTest + { +#if NETCOREAPP + /// + /// Конструктор по-умолчанию. + /// + /// Фабрика для приложения. + /// Вывод отладочной информации. + public GetTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + : base(factory, output) + { + } +#endif + + /// + /// Проверка получения данных для классов, в которых есть нехранимые поля, который не содержат setter'ов. + /// (Такие варианты присутствуют в старом коде). + /// + [Fact] + public void TestGetNotStored() + { + ActODataService(args => + { + LegoBlock block = new LegoBlock { Name = "Легосити" }; + var objs = new DataObject[] { block }; + args.DataService.UpdateObjects(ref objs); + + string requestUrl = string.Format( + "http://localhost/odata/{0}?$select=__PrimaryKey,AssocType", + args.Token.Model.GetEdmEntitySet(typeof(LegoBlock)).Name); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно. + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + + // Получим строку с ответом. + string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify(); + + // Преобразуем полученный объект в словарь. + Dictionary receivedDict = JsonConvert.DeserializeObject>(receivedStr); + + Assert.Equal(1, ((JArray)receivedDict["value"]).Count); + } + }); + } + + /// + /// Проверка значение в атрибуте @odata.type. + /// + [Fact] + public void TestGetWithMaster() + { + ActODataService(args => + { + LegoBlock block = new LegoBlock { Name = "Легосити" }; + LegoPatent patent = new LegoPatent { Name = "ZeroM", BaseLegoBlock = block }; + var objs = new DataObject[] { block, patent }; + args.DataService.UpdateObjects(ref objs); + + string requestUrl = string.Format( + "http://localhost/odata/{0}?$select=__PrimaryKey,Name&$expand=BaseLegoBlock($select=__PrimaryKey,Name)", + args.Token.Model.GetEdmEntitySet(typeof(LegoPatent)).Name); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно. + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + + // Получим строку с ответом. + string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify(); + + // Преобразуем полученный объект в словарь. + Dictionary receivedDict = JsonConvert.DeserializeObject>(receivedStr); + + Assert.Equal(1, ((JArray)receivedDict["value"]).Count); + Assert.Contains("@odata.type", receivedStr); +#if NETCOREAPP + Assert.DoesNotContain("____", receivedStr); +#endif + } + }); + } + } +} diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs index 3f388322..d9b7ea82 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs @@ -97,7 +97,10 @@ public void GetFullMetadataTest() string receivedData = response.Content.ReadAsStringAsync().Result.Beautify(); Assert.True(!string.IsNullOrEmpty(receivedData)); - Assert.StartsWith("", receivedData); + Assert.StartsWith("", receivedData); +#if NETCOREAPP + Assert.DoesNotContain("____", receivedData); +#endif } }); } From f85c0af4737857f2e95a15b43094fc391262f90f Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Mon, 17 Apr 2023 11:04:03 +0500 Subject: [PATCH 34/77] Fixed problems with NullReference on response update --- .../Extensions/ODataApplicationBuilderExtensions.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs b/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs index a9699e42..75dabb7f 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs @@ -80,9 +80,10 @@ public static async Task RewriteResponse(HttpContext context, Func next) var responseBody = new StreamReader(responseBodyStream).ReadToEnd(); //Modify the response in some way. - if (context.Response.ContentType.Contains("application/json") + if (context.Response.ContentType != null && + (context.Response.ContentType.Contains("application/json") || context.Response.ContentType.Contains("application/xml") - || context.Response.ContentType.Contains("multipart/mixed")) + || context.Response.ContentType.Contains("multipart/mixed"))) { responseBody = responseBody .Replace("(____.", "(") From cb02c668524ecf63150231be4325155f48e850d1 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Mon, 17 Apr 2023 11:06:32 +0500 Subject: [PATCH 35/77] Updated on nuspek NewPlatform.Flexberry.ORM.ODataService up to 7.1.1-beta01 --- CHANGELOG.md | 2 ++ NewPlatform.Flexberry.ORM.ODataService.nuspec | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc8187bd..b0999de8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,10 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added ### Changed +1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.1-beta01`. ### Fixed +1. Fixed problem with metadata when inheritance and PublishName is used (for Net Standart 2.0, Net Core 3.1, Net 6.0, Net 7.0). ## [7.1.0] - 2023.04.12 diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 13a49fab..415acec7 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 7.1.0 + 7.1.1-beta01 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -13,7 +13,10 @@ Flexberry ORM OData Service Package. Changed - 1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.0`. + 1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.1-beta01`. + + Fixed + 1. Fixed problem with metadata when inheritance and PublishName is used (for Net Standart 2.0, Net Core 3.1, Net 6.0, Net 7.0). Copyright New Platform Ltd 2023 Flexberry ORM OData ODataService From 5652085146ccfaba8532de21068f10aa545c39bc Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Mon, 17 Apr 2023 12:17:19 +0500 Subject: [PATCH 36/77] Changed test object value for test fixing --- .../CRUD/Read/GetTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs index 2205aee6..3d60358e 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs @@ -76,7 +76,7 @@ public void TestGetWithMaster() ActODataService(args => { LegoBlock block = new LegoBlock { Name = "Легосити" }; - LegoPatent patent = new LegoPatent { Name = "ZeroM", BaseLegoBlock = block }; + LegoPatent patent = new LegoPatent { Name = "ZeroM", BaseLegoBlock = block, Date = DateTime.Now }; var objs = new DataObject[] { block, patent }; args.DataService.UpdateObjects(ref objs); From 24ca683b3b77ec0f68d55574b43cc444fc111013 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Mon, 17 Apr 2023 13:58:44 +0500 Subject: [PATCH 37/77] Removed commented code --- .../Model/DefaultDataObjectEdmModelBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs index b345ffcb..63f84ab6 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs @@ -324,7 +324,7 @@ private string BuildEntitySetName(Type dataObjectType) string typeName = BuildEntityTypeName(dataObjectType); string nameSpace = BuildEntityTypeNamespace(dataObjectType); - return string.Concat(_useNamespaceInEntitySetName ? $"{nameSpace}.{typeName}".Replace(".", string.Empty) : typeName, "s"/* "Aliases"*/).Replace("_", string.Empty); + return string.Concat(_useNamespaceInEntitySetName ? $"{nameSpace}.{typeName}".Replace(".", string.Empty) : typeName, "s").Replace("_", string.Empty); } /// From 62ad75af418426108480daf3ade0d58ff5c54823 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Tue, 18 Apr 2023 13:14:47 +0500 Subject: [PATCH 38/77] Added support of removing extra symbols from response for net4.5 --- .../ODataApplicationBuilderExtensions.cs | 10 +-- .../Handlers/PostPatchHandler.cs | 61 +++++++++++++++++-- .../CRUD/Read/GetTest.cs | 4 +- .../CRUD/Read/MetaDataTest.cs | 4 +- 4 files changed, 65 insertions(+), 14 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs b/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs index 75dabb7f..065a45c6 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs @@ -66,9 +66,10 @@ private static void VerifyODataServiceIsRegistered(IApplicationBuilder app) /// Formed task. public static async Task RewriteResponse(HttpContext context, Func next) { + /* Same code for NETFRAMEWORK is placed on NewPlatform.Flexberry.ORM.ODataService.Handlers.PostPatchHandler.*/ using (var responseBodyStream = new MemoryStream()) { - var bodyStream = context.Response.Body; + Stream bodyStream = context.Response.Body; try { @@ -77,7 +78,8 @@ public static async Task RewriteResponse(HttpContext context, Func next) await next(); responseBodyStream.Seek(0, SeekOrigin.Begin); - var responseBody = new StreamReader(responseBodyStream).ReadToEnd(); + using StreamReader sr = new StreamReader(responseBodyStream); + var responseBody = sr.ReadToEnd(); //Modify the response in some way. if (context.Response.ContentType != null && @@ -92,9 +94,9 @@ public static async Task RewriteResponse(HttpContext context, Func next) .Replace(" Namespace=\"____\"", " Namespace=\"\""); } - using (var newStream = new MemoryStream()) + using (MemoryStream newStream = new MemoryStream()) { - var sw = new StreamWriter(newStream); + using StreamWriter sw = new StreamWriter(newStream); sw.Write(responseBody); sw.Flush(); diff --git a/NewPlatform.Flexberry.ORM.ODataService/Handlers/PostPatchHandler.cs b/NewPlatform.Flexberry.ORM.ODataService/Handlers/PostPatchHandler.cs index ae7c0e1d..e8a95c4f 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Handlers/PostPatchHandler.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Handlers/PostPatchHandler.cs @@ -1,6 +1,10 @@ #if NETFRAMEWORK namespace NewPlatform.Flexberry.ORM.ODataService.Handlers -{ +{ + using Microsoft.AspNet.OData.Batch; + using System; + using System.IO; + using System.Net; using System.Net.Http; using System.Threading; using System.Threading.Tasks; @@ -33,8 +37,13 @@ public class PostPatchHandler : DelegatingHandler public const string AcceptApplicationMsExcel = "PostPatchHandler_AcceptApplicationMsExcel"; /// - protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { + if (request == null) + { + throw new ArgumentNullException(nameof(request)); + } + foreach (var val in request.Headers.Accept) { if (val.MediaType == "application/ms-excel") @@ -62,9 +71,53 @@ protected override Task SendAsync(HttpRequestMessage reques /// Исправление для Mono, взято из https://github.com/OData/odata.net/issues/165 */ if (!request.Headers.Contains("Accept-Charset")) - request.Headers.Add("Accept-Charset", new[] { "utf-8" }); + request.Headers.Add("Accept-Charset", new[] { "utf-8" }); + + HttpResponseMessage responseMessage = await base.SendAsync(request, cancellationToken); + await RewriteResponse(responseMessage); + return responseMessage; + + } - return base.SendAsync(request, cancellationToken); + /// + /// Удаление некорректных символов в именах типов метаданных. + /// Данные символы добавляются специально, чтобы MS не бросало исключение на пустой Namespace у типов с PublishName. + /// + /// Текущее ответное сообщение, в котором могут быть заменены символы. + /// Задача на обработку. + private static async Task RewriteResponse(HttpResponseMessage response) + { + /* Same code for NETSTANDARD is placed on NewPlatform.Flexberry.ORM.ODataService.Extensions.ODataApplicationBuilderExtensions.*/ + string contentType = response?.Content?.Headers?.ContentType?.MediaType; + if (!string.IsNullOrEmpty(contentType) && + (contentType.Contains("application/json") + || contentType.Contains("application/xml") + || contentType.Contains("multipart/mixed"))) + { + HttpContent content = response.Content; + Stream contentStream = await content.ReadAsStreamAsync(); + using StreamReader sr = new StreamReader(contentStream); + string responseStr = sr.ReadToEnd(); + + responseStr = responseStr + .Replace("(____.", "(") + .Replace("\"____.", "\"") + .Replace("____.", ".") + .Replace(" Namespace=\"____\"", " Namespace=\"\""); + + using (MemoryStream newStream = new MemoryStream()) + { + using StreamWriter sw = new StreamWriter(newStream); + sw.Write(responseStr); + sw.Flush(); + newStream.Seek(0, SeekOrigin.Begin); + + contentStream.Position = 0; + contentStream.SetLength(0); + + await newStream.CopyToAsync(contentStream); + } + } } } } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs index 3d60358e..019014ad 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs @@ -97,10 +97,8 @@ public void TestGetWithMaster() Dictionary receivedDict = JsonConvert.DeserializeObject>(receivedStr); Assert.Equal(1, ((JArray)receivedDict["value"]).Count); - Assert.Contains("@odata.type", receivedStr); -#if NETCOREAPP + Assert.Contains("@odata.type", receivedStr); Assert.DoesNotContain("____", receivedStr); -#endif } }); } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs index d9b7ea82..e90fbf41 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs @@ -97,10 +97,8 @@ public void GetFullMetadataTest() string receivedData = response.Content.ReadAsStringAsync().Result.Beautify(); Assert.True(!string.IsNullOrEmpty(receivedData)); - Assert.StartsWith("", receivedData); -#if NETCOREAPP + Assert.StartsWith("", receivedData); Assert.DoesNotContain("____", receivedData); -#endif } }); } From 029aa1efd75122b97d91637f5d824b12465961db Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Tue, 18 Apr 2023 13:17:30 +0500 Subject: [PATCH 39/77] Changed version of NewPlatform.Flexberry.ORM.ODataService up to --- CHANGELOG.md | 2 +- NewPlatform.Flexberry.ORM.ODataService.nuspec | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0999de8..9ca34b78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). 1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.1-beta01`. ### Fixed -1. Fixed problem with metadata when inheritance and PublishName is used (for Net Standart 2.0, Net Core 3.1, Net 6.0, Net 7.0). +1. Fixed problem with metadata when inheritance and PublishName is used. ## [7.1.0] - 2023.04.12 diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 415acec7..997f6282 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 7.1.1-beta01 + 7.1.1-beta02 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -16,7 +16,7 @@ 1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.1-beta01`. Fixed - 1. Fixed problem with metadata when inheritance and PublishName is used (for Net Standart 2.0, Net Core 3.1, Net 6.0, Net 7.0). + 1. Fixed problem with metadata when inheritance and PublishName is used. Copyright New Platform Ltd 2023 Flexberry ORM OData ODataService From 0486e30a3aa5b117c0cdfda51a0ac6676863fec8 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Tue, 18 Apr 2023 17:02:26 +0500 Subject: [PATCH 40/77] Fixed NullReference on closed stream --- .../ODataApplicationBuilderExtensions.cs | 3 +-- .../Handlers/PostPatchHandler.cs | 27 ++++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs b/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs index 065a45c6..a18efe34 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Extensions/ODataApplicationBuilderExtensions.cs @@ -78,8 +78,7 @@ public static async Task RewriteResponse(HttpContext context, Func next) await next(); responseBodyStream.Seek(0, SeekOrigin.Begin); - using StreamReader sr = new StreamReader(responseBodyStream); - var responseBody = sr.ReadToEnd(); + var responseBody = new StreamReader(responseBodyStream).ReadToEnd(); //Modify the response in some way. if (context.Response.ContentType != null && diff --git a/NewPlatform.Flexberry.ORM.ODataService/Handlers/PostPatchHandler.cs b/NewPlatform.Flexberry.ORM.ODataService/Handlers/PostPatchHandler.cs index e8a95c4f..37ceafba 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Handlers/PostPatchHandler.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Handlers/PostPatchHandler.cs @@ -96,26 +96,27 @@ private static async Task RewriteResponse(HttpResponseMessage response) { HttpContent content = response.Content; Stream contentStream = await content.ReadAsStreamAsync(); - using StreamReader sr = new StreamReader(contentStream); - string responseStr = sr.ReadToEnd(); - - responseStr = responseStr + string responseStr = new StreamReader(contentStream).ReadToEnd(); + if (!string.IsNullOrEmpty(responseStr) && responseStr.Length > 3) + { + responseStr = responseStr .Replace("(____.", "(") .Replace("\"____.", "\"") .Replace("____.", ".") .Replace(" Namespace=\"____\"", " Namespace=\"\""); - using (MemoryStream newStream = new MemoryStream()) - { - using StreamWriter sw = new StreamWriter(newStream); - sw.Write(responseStr); - sw.Flush(); - newStream.Seek(0, SeekOrigin.Begin); + using (MemoryStream newStream = new MemoryStream()) + { + using StreamWriter sw = new StreamWriter(newStream); + sw.Write(responseStr); + sw.Flush(); + newStream.Seek(0, SeekOrigin.Begin); - contentStream.Position = 0; - contentStream.SetLength(0); + contentStream.Position = 0; + contentStream.SetLength(responseStr.Length); - await newStream.CopyToAsync(contentStream); + await newStream.CopyToAsync(contentStream); + } } } } From ef0f3409c0ae914392653512212abe8cd07b0bba Mon Sep 17 00:00:00 2001 From: Sokolov Andrey Date: Thu, 11 May 2023 18:13:19 +0500 Subject: [PATCH 41/77] delete try catch, for view error --- .../Controllers/DataObjectController.cs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.cs b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.cs index 6da1eabe..3a11240f 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.cs @@ -871,14 +871,7 @@ internal EdmEntityObject GetEdmObject(IEdmEntityType entityType, object obj, int } else { - try - { - value = propertyInfo.GetValue(obj, null); - } - catch (System.Exception) - { - continue; - } + value = propertyInfo.GetValue(obj, null); } Type propType = propertyInfo.PropertyType; From 2df9215d477e5fdc9bedde52c3bc5873b1451050 Mon Sep 17 00:00:00 2001 From: Bratchikov Igor Date: Fri, 19 May 2023 15:24:46 +0500 Subject: [PATCH 42/77] Fix safe load details with complex type usage hierarchy --- NewPlatform.Flexberry.ORM.ODataService.nuspec | 5 +++- .../Extensions/DataServiceExtensions.cs | 28 ++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 997f6282..708f56d0 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 7.1.1-beta02 + 7.1.1-beta03 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -14,9 +14,12 @@ Changed 1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.1-beta01`. + 2. Get properties from objects for send it to frontend always rethrow exception now. Fixed 1. Fixed problem with metadata when inheritance and PublishName is used. + 2. Safe load details with complex type usage hierarchy. + Copyright New Platform Ltd 2023 Flexberry ORM OData ODataService diff --git a/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs b/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs index da766c19..9d0ddd9b 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs @@ -88,7 +88,33 @@ public static void SafeLoadDetails(this IDataService dataService, View view, ILi // Нужно гарантировать, что у загруженных детейлов будет проставлена ссылка на агрегатора, поэтому добавим свойство в представление (если уже есть, то второй раз не добавится). detailView.AddProperty(agregatorPropertyName); LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(detailView.DefineClassType, detailView); - lcs.LoadingTypes = TypeUsageProvider.TypeUsage.GetUsageTypes(view.DefineClassType, detailInView.Name); + Type[] usageTypes = TypeUsageProvider.TypeUsage.GetUsageTypes(view.DefineClassType, detailInView.Name); + List storedTypes = new List(); + foreach (var usageType in usageTypes) + { + if (Information.IsStoredType(usageType)) + { + storedTypes.Add(usageType); + } + } + + if (!storedTypes.Any()) + { + foreach (DataObject agregator in agregators) + { + Type agregatorType = agregator.GetType(); + Type[] usageTypesFromAgregator = TypeUsageProvider.TypeUsage.GetUsageTypes(agregatorType, detailInView.Name); + foreach (Type usageTypeFromAgregator in usageTypesFromAgregator) + { + if (Information.IsStoredType(usageTypeFromAgregator) && !storedTypes.Contains(usageTypeFromAgregator)) + { + storedTypes.Add(usageTypeFromAgregator); + } + } + } + } + + lcs.LoadingTypes = storedTypes.ToArray(); Type agregatorKeyType = agregators[0].__PrimaryKey.GetType(); // Производим обработку только тех агрегаторов, для которых ранее не был загружен детейл. From fddc683851a6cbf9c678867d0f4b3d34b29038f3 Mon Sep 17 00:00:00 2001 From: Anisimova2020 <70688166+Anisimova2020@users.noreply.github.com> Date: Thu, 8 Jun 2023 19:28:53 +0500 Subject: [PATCH 43/77] Changed version of NewPlatform.Flexberry.ORM.ODataService up to 7.1.1 --- CHANGELOG.md | 12 +++++++++++- ...wPlatform.Flexberry.ORM.ODataService.Files.csproj | 2 +- ...Platform.Flexberry.ORM.ODataService.WebApi.csproj | 2 +- NewPlatform.Flexberry.ORM.ODataService.nuspec | 4 ++-- .../NewPlatform.Flexberry.ORM.ODataService.csproj | 2 +- ...form.Flexberry.ORM.ODataServiceCore.Common.csproj | 2 +- ...rry.ORM.ODataService.Tests.BusinessServers.csproj | 8 ++++---- ...wPlatform.Flexberry.ORM.ODataService.Tests.csproj | 10 +++++----- ...m.Flexberry.ORM.ODataService.Tests.Objects.csproj | 8 ++++---- 9 files changed, 30 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ca34b78..850d3165 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,10 +7,20 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added ### Changed -1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.1-beta01`. + +### Fixed + +## [7.1.1] - 2023.06.08 + +### Added + +### Changed +1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.1`. +2. Get properties from objects for send it to frontend always rethrow exception now. ### Fixed 1. Fixed problem with metadata when inheritance and PublishName is used. +2. Safe load details with complex type usage hierarchy. ## [7.1.0] - 2023.04.12 diff --git a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj index c95c47da..70e898ff 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj @@ -21,7 +21,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj b/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj index 5293c358..38b63eb3 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj @@ -22,7 +22,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 708f56d0..7f32de62 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 7.1.1-beta03 + 7.1.1 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -13,7 +13,7 @@ Flexberry ORM OData Service Package. Changed - 1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.1-beta01`. + 1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.1`. 2. Get properties from objects for send it to frontend always rethrow exception now. Fixed diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index 956c37a7..0dec1c9e 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -26,7 +26,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj index bc24bf67..ccd211a7 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj @@ -26,7 +26,7 @@ - + diff --git a/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj b/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj index 42fd38a2..1d422150 100644 --- a/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj +++ b/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj @@ -14,10 +14,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj index e91c942a..f7a7c68f 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj @@ -38,11 +38,11 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - + + + + + diff --git a/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj b/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj index 7ae77c6e..b73f9f3b 100644 --- a/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj +++ b/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj @@ -14,10 +14,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 4687a07c5ade79474d1d27ae8271e7cb8894494f Mon Sep 17 00:00:00 2001 From: tosotova Date: Wed, 7 Feb 2024 15:56:56 +0500 Subject: [PATCH 44/77] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=82=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0=20=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5,=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=B3=D0=B4=D0=B0=20=D0=B4=D0=B5=D1=82=D0=B5=D0=B9=D0=BB=20?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=B0=D1=81=D1=82=D0=B5=D1=80=20=D0=BE=D0=B4?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=82=D0=B8=D0=BF=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CRUD/Update/ModifyDataTest.cs | 157 +++ ...tform.Flexberry.ORM.ODataService.Tests.crp | 1045 +++++++++-------- .../SqlScripts/MSSql.create.sql | 536 ++++----- .../SqlScripts/Oracle.create.sql | 493 ++++---- .../SqlScripts/PostgreSql.create.sql | 298 ++--- Tests/Objects/AgregatorWithSameMAndD.cs | 143 +++ Tests/Objects/DetailAndMaster.cs | 150 +++ 7 files changed, 1635 insertions(+), 1187 deletions(-) create mode 100644 Tests/Objects/AgregatorWithSameMAndD.cs create mode 100644 Tests/Objects/DetailAndMaster.cs diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs index d0592622..67aa9763 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs @@ -5,8 +5,10 @@ using System.Linq; using System.Net; using System.Net.Http; + using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing; using ICSSoft.STORMNET; using ICSSoft.STORMNET.Business; + using ICSSoft.STORMNET.Business.LINQProvider; using ICSSoft.STORMNET.Exceptions; using ICSSoft.STORMNET.KeyGen; using ICSSoft.STORMNET.Windows.Forms; @@ -1605,5 +1607,160 @@ public void UpdateDetailAndDetailTest() } }); } + + /// + /// Осуществляет проверку удаления данных. + /// + [Fact] + public void DeletePlainObjectTest() + { + ActODataService(args => + { + // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. + Медведь agregator = new Медведь() { МедведьСтрокой = "Agregator" }; + args.DataService.UpdateObject(agregator); + + View view = new View(typeof(Медведь), View.ReadType.OnlyThatObject); + Медведь foundAgregator0 = args.DataService.Query<Медведь>(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.NotNull(foundAgregator0); + + // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). + string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, agregator.__PrimaryKey); + requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был удален из базы. + Медведь foundAgregator = args.DataService.Query<Медведь>(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.Null(foundAgregator); + } + }); + } + + /// + /// Осуществляет проверку удаления данных, если детейл и мастер одного типа, но при этом пустые. + /// + [Fact] + public void DeleteObjectWithSameDetailAndMasterEmptyTest() + { + ActODataService(args => + { + // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. + AgregatorSameMD agregator = new AgregatorSameMD() { Name = "Agregator" }; + args.DataService.UpdateObject(agregator); + + View view = new View(typeof(AgregatorSameMD), View.ReadType.OnlyThatObject); + AgregatorSameMD foundAgregator0 = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.NotNull(foundAgregator0); + + // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). + string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(AgregatorSameMD)).Name, agregator.__PrimaryKey); + requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был удален из базы. + AgregatorSameMD foundAgregator = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.Null(foundAgregator); + } + }); + } + + /// + /// Осуществляет проверку удаления данных, если детейл и мастер одного типа? но лишь детейл заполнен. + /// + [Fact] + public void DeleteObjectWithSameDetailAndMasterTest() + { + ActODataService(args => + { + // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. + AgregatorSameMD agregator = new AgregatorSameMD() { Name = "Agregator" }; + args.DataService.UpdateObject(agregator); + + DetailAndMaster dm = new DetailAndMaster() { Name = "DetailAndMaster" }; + agregator.Details.Add(dm); + args.DataService.UpdateObject(dm); + + AgregatorSameMD agregator2 = new AgregatorSameMD() { Name = "Agregator2" }; + args.DataService.UpdateObject(agregator2); + DetailAndMaster dm2 = new DetailAndMaster() { Name = "DetailAndMaster2" }; + agregator2.Details.Add(dm2); + args.DataService.UpdateObject(dm2); + + View view = new View(typeof(AgregatorSameMD), View.ReadType.OnlyThatObject); + AgregatorSameMD foundAgregator0 = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.NotNull(foundAgregator0); + + // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). + string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(AgregatorSameMD)).Name, agregator.__PrimaryKey); + requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был удален из базы. + AgregatorSameMD foundAgregator = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.Null(foundAgregator); + } + }); + } + + /// + /// Осуществляет проверку удаления данных, если детейл и мастер одного типа, но не пустые. + /// + [Fact] + public void DeleteObjectWithSameDetailAndMaster2Test() + { + ActODataService(args => + { + // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. + AgregatorSameMD agregator = new AgregatorSameMD() { Name = "Agregator" }; + args.DataService.UpdateObject(agregator); + + DetailAndMaster dm = new DetailAndMaster() { Name = "DetailAndMaster" }; + agregator.Details.Add(dm); + args.DataService.UpdateObject(dm); + + AgregatorSameMD agregator2 = new AgregatorSameMD() { Name = "Agregator2" }; + args.DataService.UpdateObject(agregator2); + DetailAndMaster dm2 = new DetailAndMaster() { Name = "DetailAndMaster2" }; + agregator2.Details.Add(dm2); + args.DataService.UpdateObject(dm2); + + agregator.Master = dm2; + args.DataService.UpdateObject(agregator); + + View view = new View(typeof(AgregatorSameMD), View.ReadType.OnlyThatObject); + AgregatorSameMD foundAgregator0 = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.NotNull(foundAgregator0); + + // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). + string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(AgregatorSameMD)).Name, agregator.__PrimaryKey); + requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был удален из базы. + AgregatorSameMD foundAgregator = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.Null(foundAgregator); + } + }); + } } } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp index ebb6a638..79557574 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp @@ -1,1130 +1,1209 @@ - + - - + + - + - + - + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + - + - + - + + + + + + + - + + + + - + - - - - + + + + - + - + - + - + - + + + - + - + - + - + - + - + - + - + - + + + + + + + + + + - + - + - + - - + + - + - + - + - - + + - + - + - + - + - - - + + + - + - - - - - - - - + - + - + - + + - + - + + + - + - + - + - - - + + + - + - - + + + - - - + - + - - - - - - - - - - - - - + + - - - - - - + - + - + - - + + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - - - - - - - - - - - - - - + + + + + + + + + + - - - - + - + - + - - + + - + - + - - + + - + - + + + + - + - + - + - + - + - + - - - - - - - - - - - + - - - + - + - - + + - + - + + + + - + - + - + - + - + + + - + - + - - + + - + - + - + + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + + + - + - - + + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - + - + + + - + - + - + - + - + - + - - + + - + - + - + - + + + + + - + - + - - + + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - + - - - - - - - - - - - + + + + + + + + + + + - + - + - + - - - - - - - - + + + + + + + + - + + + + + + + + + + + + + + + + + + + - - - + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + + + - + - + - + - - + + @@ -1133,15 +1212,15 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/MSSql.create.sql b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/MSSql.create.sql index 672b66b2..4d78c4cc 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/MSSql.create.sql +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/MSSql.create.sql @@ -2,75 +2,59 @@ -CREATE TABLE [Лес] ( +CREATE TABLE [КлассСМножТипов] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Название] VARCHAR(255) NULL, - - [Площадь] INT NULL, - - [Заповедник] BIT NULL, + [PropertyBool] BIT NULL, - [ДатаПослОсмотра] DATETIME NULL, + [PropertyDateTime] DATETIME NULL, - [Страна] UNIQUEIDENTIFIER NULL, + [PropertyDecimal] DECIMAL NULL, - PRIMARY KEY ([primaryKey])) + [PropertyDouble] FLOAT NULL, -CREATE TABLE [КлассСМножТипов] ( + [PropertyEnum] VARCHAR(6) NULL, - [primaryKey] UNIQUEIDENTIFIER NOT NULL, + [PropertyFloat] REAL NULL, [PropertyGeography] geography NULL, - [PropertyEnum] VARCHAR(6) NULL, - - [PropertyBool] BIT NULL, - [PropertyInt] INT NULL, - [PropertyDateTime] DATETIME NULL, - - [PropertyString] VARCHAR(255) NULL, - - [PropertyFloat] REAL NULL, + [PropertyStormnetBlob] NVARCHAR(MAX) NULL, - [PropertyDouble] FLOAT NULL, + [PropertyStormnetContact] NVARCHAR(MAX) NULL, - [PropertyDecimal] DECIMAL NULL, + [PropertyStormnetEvent] NVARCHAR(MAX) NULL, - [PropertySystemNullableDateTime] DATETIME NULL, + [PropertyStormnetFile] NVARCHAR(MAX) NULL, - [PropertySystemNullableInt] INT NULL, + [PropertyStormnetGeoData] NVARCHAR(MAX) NULL, - [PropertySystemNullableGuid] UNIQUEIDENTIFIER NULL, + [PropertyStormnetImage] NVARCHAR(MAX) NULL, - [PropertySystemNullableDecimal] DECIMAL NULL, + [PropertyStormnetKeyGuid] UNIQUEIDENTIFIER NULL, [PropStormnetNullableDateTime] DATETIME NULL, - [PropertyStormnetNullableInt] INT NULL, - - [PropertyStormnetKeyGuid] UNIQUEIDENTIFIER NULL, - [PropStormnetNullableDecimal] DECIMAL NULL, - [PropertyStormnetPartliedDate] VARCHAR(255) NULL, + [PropertyStormnetNullableInt] INT NULL, - [PropertyStormnetContact] NVARCHAR(MAX) NULL, + [PropertyStormnetPartliedDate] VARCHAR(255) NULL, - [PropertyStormnetBlob] NVARCHAR(MAX) NULL, + [PropertyStormnetWebFile] NVARCHAR(MAX) NULL, - [PropertyStormnetEvent] NVARCHAR(MAX) NULL, + [PropertyString] VARCHAR(255) NULL, - [PropertyStormnetGeoData] NVARCHAR(MAX) NULL, + [PropertySystemNullableDateTime] DATETIME NULL, - [PropertyStormnetImage] NVARCHAR(MAX) NULL, + [PropertySystemNullableDecimal] DECIMAL NULL, - [PropertyStormnetWebFile] NVARCHAR(MAX) NULL, + [PropertySystemNullableGuid] UNIQUEIDENTIFIER NULL, - [PropertyStormnetFile] NVARCHAR(MAX) NULL, + [PropertySystemNullableInt] INT NULL, PRIMARY KEY ([primaryKey])) @@ -84,18 +68,35 @@ CREATE TABLE [Master] ( PRIMARY KEY ([primaryKey])) -CREATE TABLE [LegoPatent] ( +CREATE TABLE [Лес] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Name] VARCHAR(255) NULL, + [ДатаПослОсмотра] DATETIME NULL, - [Date] DATETIME NULL, + [Заповедник] BIT NULL, + + [Название] VARCHAR(255) NULL, + + [Площадь] INT NULL, + + [Страна] UNIQUEIDENTIFIER NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [LegoPatent] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, [Authors] VARCHAR(255) NULL, + [Date] DATETIME NULL, + [Description] VARCHAR(255) NULL, + [Name] VARCHAR(255) NULL, + [LegoBlock] UNIQUEIDENTIFIER NULL, [LegoDevice] UNIQUEIDENTIFIER NULL, @@ -193,12 +194,12 @@ CREATE TABLE [Driver] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Name] VARCHAR(255) NULL, - [CarCount] INT NULL, [Documents] BIT NULL, + [Name] VARCHAR(255) NULL, + PRIMARY KEY ([primaryKey])) @@ -226,41 +227,6 @@ CREATE TABLE [Журнал] ( PRIMARY KEY ([primaryKey])) -CREATE TABLE [Медведь] ( - - [primaryKey] UNIQUEIDENTIFIER NOT NULL, - - [ПолеБС] VARCHAR(255) NULL, - - [ПорядковыйНомер] INT NULL, - - [Вес] INT NULL, - - [ЦветГлаз] VARCHAR(255) NULL, - - [Пол] VARCHAR(9) NULL, - - [ДатаРождения] DATETIME NULL, - - [CreateTime] DATETIME NULL, - - [Creator] VARCHAR(255) NULL, - - [EditTime] DATETIME NULL, - - [Editor] VARCHAR(255) NULL, - - [ЛесОбитания] UNIQUEIDENTIFIER NULL, - - [Папа] UNIQUEIDENTIFIER NULL, - - [Страна] UNIQUEIDENTIFIER NULL, - - [Мама] UNIQUEIDENTIFIER NULL, - - PRIMARY KEY ([primaryKey])) - - CREATE TABLE [TestMaster] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, @@ -298,18 +264,18 @@ CREATE TABLE [LegoBlock] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Width] INT NULL, - - [Height] INT NULL, + [Configuration] VARCHAR(255) NULL, [Depth] INT NULL, - [Configuration] VARCHAR(255) NULL, + [Height] INT NULL, - [Name] VARCHAR(255) NULL, + [Width] INT NULL, [BlockId] INT NULL, + [Name] VARCHAR(255) NULL, + [Material] UNIQUEIDENTIFIER NULL, [Color] UNIQUEIDENTIFIER NULL, @@ -317,39 +283,14 @@ CREATE TABLE [LegoBlock] ( PRIMARY KEY ([primaryKey])) -CREATE TABLE [Берлога] ( - - [primaryKey] UNIQUEIDENTIFIER NOT NULL, - - [ПолеБС] VARCHAR(255) NULL, - - [Наименование] VARCHAR(255) NULL, - - [Комфортность] INT NULL, - - [Заброшена] BIT NULL, - - [Сертификат] NVARCHAR(MAX) NULL, - - [CertString] NVARCHAR(MAX) NULL, - - [ЛесРасположения] UNIQUEIDENTIFIER NULL, - - [ДляКакойПороды] UNIQUEIDENTIFIER NULL, - - [Медведь] UNIQUEIDENTIFIER NOT NULL, - - PRIMARY KEY ([primaryKey])) - - CREATE TABLE [LegoBlockColor] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Name] VARCHAR(255) NULL, - [ColorNumber] INT NULL, + [Name] VARCHAR(255) NULL, + PRIMARY KEY ([primaryKey])) @@ -366,10 +307,10 @@ CREATE TABLE [Котенок] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [КличкаКотенка] VARCHAR(255) NULL, - [Глупость] INT NULL, + [КличкаКотенка] VARCHAR(255) NULL, + [Кошка_m0] UNIQUEIDENTIFIER NOT NULL, PRIMARY KEY ([primaryKey])) @@ -412,21 +353,6 @@ CREATE TABLE [DetailsClass1] ( PRIMARY KEY ([primaryKey])) -CREATE TABLE [Car] ( - - [primaryKey] UNIQUEIDENTIFIER NOT NULL, - - [Number] VARCHAR(255) NULL, - - [Model] VARCHAR(255) NULL, - - [TipCar] VARCHAR(9) NULL, - - [driver] UNIQUEIDENTIFIER NOT NULL, - - PRIMARY KEY ([primaryKey])) - - CREATE TABLE [LegoBlockCustomPanel] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, @@ -446,10 +372,10 @@ CREATE TABLE [ТипЛапы] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Название] VARCHAR(255) NULL, - [Актуально] BIT NULL, + [Название] VARCHAR(255) NULL, + PRIMARY KEY ([primaryKey])) @@ -466,10 +392,10 @@ CREATE TABLE [LegoPanelAngle] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Name] VARCHAR(255) NULL, - [Angle] INT NULL, + [Name] VARCHAR(255) NULL, + PRIMARY KEY ([primaryKey])) @@ -548,10 +474,10 @@ CREATE TABLE [ТипПороды] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Название] VARCHAR(255) NULL, - [ДатаРегистрации] DATETIME NULL, + [Название] VARCHAR(255) NULL, + PRIMARY KEY ([primaryKey])) @@ -559,10 +485,10 @@ CREATE TABLE [LegoBlockTopPanel] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [WidthCount] INT NULL, - [HeightCount] INT NULL, + [WidthCount] INT NULL, + [SocketStandard] UNIQUEIDENTIFIER NULL, [Block] UNIQUEIDENTIFIER NOT NULL, @@ -626,10 +552,10 @@ CREATE TABLE [LegoDevice] ( [Electricity] BIT NULL, - [Name] VARCHAR(255) NULL, - [BlockId] INT NULL, + [Name] VARCHAR(255) NULL, + [Color] UNIQUEIDENTIFIER NULL, PRIMARY KEY ([primaryKey])) @@ -645,10 +571,10 @@ CREATE TABLE [Наследник] ( [Свойство2] INT NULL, - [Master] UNIQUEIDENTIFIER NULL, - [Мастер] UNIQUEIDENTIFIER NULL, + [Master] UNIQUEIDENTIFIER NULL, + PRIMARY KEY ([primaryKey])) @@ -656,10 +582,10 @@ CREATE TABLE [LegoBlockBottomPanel] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [WidthCount] INT NULL, - [HeightCount] INT NULL, + [WidthCount] INT NULL, + [Block] UNIQUEIDENTIFIER NOT NULL, PRIMARY KEY ([primaryKey])) @@ -671,55 +597,130 @@ CREATE TABLE [ДочернийКласс] ( [ChildProperty] VARCHAR(255) NULL, - [PropertyGeography] geography NULL, + [PropertyBool] BIT NULL, + + [PropertyDateTime] DATETIME NULL, + + [PropertyDecimal] DECIMAL NULL, + + [PropertyDouble] FLOAT NULL, [PropertyEnum] VARCHAR(6) NULL, - [PropertyBool] BIT NULL, + [PropertyFloat] REAL NULL, + + [PropertyGeography] geography NULL, [PropertyInt] INT NULL, - [PropertyDateTime] DATETIME NULL, + [PropertyStormnetBlob] NVARCHAR(MAX) NULL, - [PropertyString] VARCHAR(255) NULL, + [PropertyStormnetContact] NVARCHAR(MAX) NULL, - [PropertyFloat] REAL NULL, + [PropertyStormnetEvent] NVARCHAR(MAX) NULL, - [PropertyDouble] FLOAT NULL, + [PropertyStormnetFile] NVARCHAR(MAX) NULL, - [PropertyDecimal] DECIMAL NULL, + [PropertyStormnetGeoData] NVARCHAR(MAX) NULL, + + [PropertyStormnetImage] NVARCHAR(MAX) NULL, + + [PropertyStormnetKeyGuid] UNIQUEIDENTIFIER NULL, + + [PropStormnetNullableDateTime] DATETIME NULL, + + [PropStormnetNullableDecimal] DECIMAL NULL, + + [PropertyStormnetNullableInt] INT NULL, + + [PropertyStormnetPartliedDate] VARCHAR(255) NULL, + + [PropertyStormnetWebFile] NVARCHAR(MAX) NULL, + + [PropertyString] VARCHAR(255) NULL, [PropertySystemNullableDateTime] DATETIME NULL, - [PropertySystemNullableInt] INT NULL, + [PropertySystemNullableDecimal] DECIMAL NULL, [PropertySystemNullableGuid] UNIQUEIDENTIFIER NULL, - [PropertySystemNullableDecimal] DECIMAL NULL, + [PropertySystemNullableInt] INT NULL, - [PropStormnetNullableDateTime] DATETIME NULL, + PRIMARY KEY ([primaryKey])) - [PropertyStormnetNullableInt] INT NULL, - [PropertyStormnetKeyGuid] UNIQUEIDENTIFIER NULL, +CREATE TABLE [Медведь] ( - [PropStormnetNullableDecimal] DECIMAL NULL, + [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [PropertyStormnetPartliedDate] VARCHAR(255) NULL, + [Вес] INT NULL, - [PropertyStormnetContact] NVARCHAR(MAX) NULL, + [ДатаРождения] DATETIME NULL, - [PropertyStormnetBlob] NVARCHAR(MAX) NULL, + [Пол] VARCHAR(9) NULL, - [PropertyStormnetEvent] NVARCHAR(MAX) NULL, + [ПолеБС] VARCHAR(255) NULL, - [PropertyStormnetGeoData] NVARCHAR(MAX) NULL, + [ПорядковыйНомер] INT NULL, - [PropertyStormnetImage] NVARCHAR(MAX) NULL, + [ЦветГлаз] VARCHAR(255) NULL, - [PropertyStormnetWebFile] NVARCHAR(MAX) NULL, + [CreateTime] DATETIME NULL, - [PropertyStormnetFile] NVARCHAR(MAX) NULL, + [Creator] VARCHAR(255) NULL, + + [Editor] VARCHAR(255) NULL, + + [EditTime] DATETIME NULL, + + [ЛесОбитания] UNIQUEIDENTIFIER NULL, + + [Мама] UNIQUEIDENTIFIER NULL, + + [Папа] UNIQUEIDENTIFIER NULL, + + [Страна] UNIQUEIDENTIFIER NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [Берлога] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Заброшена] BIT NULL, + + [Комфортность] INT NULL, + + [Наименование] VARCHAR(255) NULL, + + [ПолеБС] VARCHAR(255) NULL, + + [Сертификат] NVARCHAR(MAX) NULL, + + [CertString] NVARCHAR(MAX) NULL, + + [ЛесРасположения] UNIQUEIDENTIFIER NULL, + + [ДляКакойПороды] UNIQUEIDENTIFIER NULL, + + [Медведь] UNIQUEIDENTIFIER NOT NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [Car] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Model] VARCHAR(255) NULL, + + [Number] VARCHAR(255) NULL, + + [TipCar] VARCHAR(9) NULL, + + [driver] UNIQUEIDENTIFIER NOT NULL, PRIMARY KEY ([primaryKey])) @@ -736,27 +737,28 @@ CREATE TABLE [Перелом] ( PRIMARY KEY ([primaryKey])) + CREATE TABLE [Лапа] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Цвет] VARCHAR(255) NULL, - - [Размер] INT NULL, + [БылиЛиПереломы] BIT NULL, [ДатаРождения] DATETIME NULL, - [БылиЛиПереломы] BIT NULL, + [Номер] INT NULL, - [Сторона] VARCHAR(11) NULL, + [Размер] INT NULL, - [Номер] INT NULL, + [РазмерDecimal] DECIMAL NULL, [РазмерDouble] FLOAT NULL, [РазмерFloat] REAL NULL, - [РазмерDecimal] DECIMAL NULL, + [Сторона] VARCHAR(11) NULL, + + [Цвет] VARCHAR(255) NULL, [ТипЛапы_m0] UNIQUEIDENTIFIER NULL, @@ -769,25 +771,47 @@ CREATE TABLE [Кошка] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Кличка] VARCHAR(255) NULL, + [Агрессивная] BIT NULL, [ДатаРождения] DATETIME NULL, - [Тип] VARCHAR(11) NULL, - - [ПородаСтрокой] VARCHAR(255) NULL, - - [Агрессивная] BIT NULL, + [Кличка] VARCHAR(255) NULL, [УсыСлева] INT NULL, [УсыСправа] INT NULL, + [ПородаСтрокой] VARCHAR(255) NULL, + + [Тип] VARCHAR(11) NULL, + [Порода_m0] UNIQUEIDENTIFIER NOT NULL, PRIMARY KEY ([primaryKey])) +CREATE TABLE [AgregatorSameMD] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Name] VARCHAR(255) NULL, + + [Master] UNIQUEIDENTIFIER NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [DetailAndMaster] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Name] VARCHAR(255) NULL, + + [Agregator] UNIQUEIDENTIFIER NOT NULL, + + PRIMARY KEY ([primaryKey])) + + CREATE TABLE [STORMNETLOCKDATA] ( [LockKey] VARCHAR(300) NOT NULL, @@ -1069,168 +1093,6 @@ CREATE TABLE [STORMAuField] ( PRIMARY KEY ([primaryKey])) - ALTER TABLE [Лес] ADD CONSTRAINT [Лес_FСтрана_0] FOREIGN KEY ([Страна]) REFERENCES [Страна] -CREATE INDEX Лес_IСтрана on [Лес] ([Страна]) - - ALTER TABLE [LegoPatent] ADD CONSTRAINT [LegoPatent_FLegoBlock_0] FOREIGN KEY ([LegoBlock]) REFERENCES [LegoBlock] -CREATE INDEX LegoPatent_ILegoBlock on [LegoPatent] ([LegoBlock]) - - ALTER TABLE [LegoPatent] ADD CONSTRAINT [LegoPatent_FLegoDevice_0] FOREIGN KEY ([LegoDevice]) REFERENCES [LegoDevice] -CREATE INDEX LegoPatent_ILegoDevice on [LegoPatent] ([LegoDevice]) - - ALTER TABLE [Мастер] ADD CONSTRAINT [Мастер_FМастер2_0] FOREIGN KEY ([Мастер2]) REFERENCES [Мастер2] -CREATE INDEX Мастер_IМастер2 on [Мастер] ([Мастер2]) - - ALTER TABLE [Блоха] ADD CONSTRAINT [Блоха_FМедведь_0] FOREIGN KEY ([МедведьОбитания]) REFERENCES [Медведь] -CREATE INDEX Блоха_IМедведьОбитания on [Блоха] ([МедведьОбитания]) - - ALTER TABLE [TestDetailWithCicle] ADD CONSTRAINT [TestDetailWithCicle_FTestDetailWithCicle_0] FOREIGN KEY ([Parent]) REFERENCES [TestDetailWithCicle] -CREATE INDEX TestDetailWithCicle_IParent on [TestDetailWithCicle] ([Parent]) - - ALTER TABLE [TestDetailWithCicle] ADD CONSTRAINT [TestDetailWithCicle_FTestMaster_0] FOREIGN KEY ([TestMaster]) REFERENCES [TestMaster] -CREATE INDEX TestDetailWithCicle_ITestMaster on [TestDetailWithCicle] ([TestMaster]) - - ALTER TABLE [Детейл] ADD CONSTRAINT [Детейл_FБазовыйКласс_0] FOREIGN KEY ([БазовыйКласс_m0]) REFERENCES [БазовыйКласс] -CREATE INDEX Детейл_IБазовыйКласс_m0 on [Детейл] ([БазовыйКласс_m0]) - - ALTER TABLE [Детейл] ADD CONSTRAINT [Детейл_FНаследник_0] FOREIGN KEY ([БазовыйКласс_m1]) REFERENCES [Наследник] -CREATE INDEX Детейл_IБазовыйКласс_m1 on [Детейл] ([БазовыйКласс_m1]) - - ALTER TABLE [Журнал] ADD CONSTRAINT [Журнал_FАвтор_0] FOREIGN KEY ([Автор2]) REFERENCES [Автор] -CREATE INDEX Журнал_IАвтор2 on [Журнал] ([Автор2]) - - ALTER TABLE [Журнал] ADD CONSTRAINT [Журнал_FБиблиотека_0] FOREIGN KEY ([Библиотека2]) REFERENCES [Библиотека] -CREATE INDEX Журнал_IБиблиотека2 on [Журнал] ([Библиотека2]) - - ALTER TABLE [Медведь] ADD CONSTRAINT [Медведь_FЛес_0] FOREIGN KEY ([ЛесОбитания]) REFERENCES [Лес] -CREATE INDEX Медведь_IЛесОбитания on [Медведь] ([ЛесОбитания]) - - ALTER TABLE [Медведь] ADD CONSTRAINT [Медведь_FМедведь_0] FOREIGN KEY ([Папа]) REFERENCES [Медведь] -CREATE INDEX Медведь_IПапа on [Медведь] ([Папа]) - - ALTER TABLE [Медведь] ADD CONSTRAINT [Медведь_FСтрана_0] FOREIGN KEY ([Страна]) REFERENCES [Страна] -CREATE INDEX Медведь_IСтрана on [Медведь] ([Страна]) - - ALTER TABLE [Медведь] ADD CONSTRAINT [Медведь_FМедведь_1] FOREIGN KEY ([Мама]) REFERENCES [Медведь] -CREATE INDEX Медведь_IМама on [Медведь] ([Мама]) - - ALTER TABLE [MainClass] ADD CONSTRAINT [MainClass_FAgrClass1_0] FOREIGN KEY ([AgrClass1]) REFERENCES [AgrClass1] -CREATE INDEX MainClass_IAgrClass1 on [MainClass] ([AgrClass1]) - - ALTER TABLE [Порода] ADD CONSTRAINT [Порода_FПорода_0] FOREIGN KEY ([Иерархия_m0]) REFERENCES [Порода] -CREATE INDEX Порода_IИерархия_m0 on [Порода] ([Иерархия_m0]) - - ALTER TABLE [Порода] ADD CONSTRAINT [Порода_FТипПороды_0] FOREIGN KEY ([ТипПороды_m0]) REFERENCES [ТипПороды] -CREATE INDEX Порода_IТипПороды_m0 on [Порода] ([ТипПороды_m0]) - - ALTER TABLE [LegoBlock] ADD CONSTRAINT [LegoBlock_FLegoMaterial_0] FOREIGN KEY ([Material]) REFERENCES [LegoMaterial] -CREATE INDEX LegoBlock_IMaterial on [LegoBlock] ([Material]) - - ALTER TABLE [LegoBlock] ADD CONSTRAINT [LegoBlock_FLegoBlockColor_0] FOREIGN KEY ([Color]) REFERENCES [LegoBlockColor] -CREATE INDEX LegoBlock_IColor on [LegoBlock] ([Color]) - - ALTER TABLE [Берлога] ADD CONSTRAINT [Берлога_FЛес_0] FOREIGN KEY ([ЛесРасположения]) REFERENCES [Лес] -CREATE INDEX Берлога_IЛесРасположения on [Берлога] ([ЛесРасположения]) - - ALTER TABLE [Берлога] ADD CONSTRAINT [Берлога_FПорода_0] FOREIGN KEY ([ДляКакойПороды]) REFERENCES [Порода] -CREATE INDEX Берлога_IДляКакойПороды on [Берлога] ([ДляКакойПороды]) - - ALTER TABLE [Берлога] ADD CONSTRAINT [Берлога_FМедведь_0] FOREIGN KEY ([Медведь]) REFERENCES [Медведь] -CREATE INDEX Берлога_IМедведь on [Берлога] ([Медведь]) - - ALTER TABLE [Котенок] ADD CONSTRAINT [Котенок_FКошка_0] FOREIGN KEY ([Кошка_m0]) REFERENCES [Кошка] -CREATE INDEX Котенок_IКошка_m0 on [Котенок] ([Кошка_m0]) - - ALTER TABLE [Daughter] ADD CONSTRAINT [Daughter_FPerson_0] FOREIGN KEY ([Parent]) REFERENCES [Person] -CREATE INDEX Daughter_IParent on [Daughter] ([Parent]) - - ALTER TABLE [LegoBlockTopPanelHole] ADD CONSTRAINT [LegoBlockTopPanelHole_FLegoBlockTopPanel_0] FOREIGN KEY ([TopPanel]) REFERENCES [LegoBlockTopPanel] -CREATE INDEX LegoBlockTopPanelHole_ITopPanel on [LegoBlockTopPanelHole] ([TopPanel]) - - ALTER TABLE [DetailsClass1] ADD CONSTRAINT [DetailsClass1_FDetailsClass2_0] FOREIGN KEY ([DetailsClass2]) REFERENCES [DetailsClass2] -CREATE INDEX DetailsClass1_IDetailsClass2 on [DetailsClass1] ([DetailsClass2]) - - ALTER TABLE [DetailsClass1] ADD CONSTRAINT [DetailsClass1_FAgrClass1_0] FOREIGN KEY ([AgrClass1]) REFERENCES [AgrClass1] -CREATE INDEX DetailsClass1_IAgrClass1 on [DetailsClass1] ([AgrClass1]) - - ALTER TABLE [Car] ADD CONSTRAINT [Car_FDriver_0] FOREIGN KEY ([driver]) REFERENCES [Driver] -CREATE INDEX Car_Idriver on [Car] ([driver]) - - ALTER TABLE [LegoBlockCustomPanel] ADD CONSTRAINT [LegoBlockCustomPanel_FLegoPanelAngle_0] FOREIGN KEY ([PanelAngle]) REFERENCES [LegoPanelAngle] -CREATE INDEX LegoBlockCustomPanel_IPanelAngle on [LegoBlockCustomPanel] ([PanelAngle]) - - ALTER TABLE [LegoBlockCustomPanel] ADD CONSTRAINT [LegoBlockCustomPanel_FLegoBlock_0] FOREIGN KEY ([Block]) REFERENCES [LegoBlock] -CREATE INDEX LegoBlockCustomPanel_IBlock on [LegoBlockCustomPanel] ([Block]) - - ALTER TABLE [Детейл2] ADD CONSTRAINT [Детейл2_FДетейл_0] FOREIGN KEY ([Детейл_m0]) REFERENCES [Детейл] -CREATE INDEX Детейл2_IДетейл_m0 on [Детейл2] ([Детейл_m0]) - - ALTER TABLE [Детейл2] ADD CONSTRAINT [Детейл2_FДетейлНаследник_0] FOREIGN KEY ([Детейл_m1]) REFERENCES [ДетейлНаследник] -CREATE INDEX Детейл2_IДетейл_m1 on [Детейл2] ([Детейл_m1]) - - ALTER TABLE [Son] ADD CONSTRAINT [Son_FPerson_0] FOREIGN KEY ([Parent]) REFERENCES [Person] -CREATE INDEX Son_IParent on [Son] ([Parent]) - - ALTER TABLE [LegoBlockTopPanel] ADD CONSTRAINT [LegoBlockTopPanel_FLegoSocketStandard_0] FOREIGN KEY ([SocketStandard]) REFERENCES [LegoSocketStandard] -CREATE INDEX LegoBlockTopPanel_ISocketStandard on [LegoBlockTopPanel] ([SocketStandard]) - - ALTER TABLE [LegoBlockTopPanel] ADD CONSTRAINT [LegoBlockTopPanel_FLegoBlock_0] FOREIGN KEY ([Block]) REFERENCES [LegoBlock] -CREATE INDEX LegoBlockTopPanel_IBlock on [LegoBlockTopPanel] ([Block]) - - ALTER TABLE [ДетейлНаследник] ADD CONSTRAINT [ДетейлНаследник_FБазовыйКласс_0] FOREIGN KEY ([БазовыйКласс_m0]) REFERENCES [БазовыйКласс] -CREATE INDEX ДетейлНаследник_IБазовыйКласс_m0 on [ДетейлНаследник] ([БазовыйКласс_m0]) - - ALTER TABLE [ДетейлНаследник] ADD CONSTRAINT [ДетейлНаследник_FНаследник_0] FOREIGN KEY ([БазовыйКласс_m1]) REFERENCES [Наследник] -CREATE INDEX ДетейлНаследник_IБазовыйКласс_m1 on [ДетейлНаследник] ([БазовыйКласс_m1]) - - ALTER TABLE [DetailsClass2] ADD CONSTRAINT [DetailsClass2_FAgrClass2_0] FOREIGN KEY ([AgrClass2]) REFERENCES [AgrClass2] -CREATE INDEX DetailsClass2_IAgrClass2 on [DetailsClass2] ([AgrClass2]) - - ALTER TABLE [Книга] ADD CONSTRAINT [Книга_FАвтор_0] FOREIGN KEY ([Автор1]) REFERENCES [Автор] -CREATE INDEX Книга_IАвтор1 on [Книга] ([Автор1]) - - ALTER TABLE [Книга] ADD CONSTRAINT [Книга_FБиблиотека_0] FOREIGN KEY ([Библиотека1]) REFERENCES [Библиотека] -CREATE INDEX Книга_IБиблиотека1 on [Книга] ([Библиотека1]) - - ALTER TABLE [LegoDevice] ADD CONSTRAINT [LegoDevice_FLegoBlockColor_0] FOREIGN KEY ([Color]) REFERENCES [LegoBlockColor] -CREATE INDEX LegoDevice_IColor on [LegoDevice] ([Color]) - - ALTER TABLE [Наследник] ADD CONSTRAINT [Наследник_FMaster_0] FOREIGN KEY ([Master]) REFERENCES [Master] -CREATE INDEX Наследник_IMaster on [Наследник] ([Master]) - - ALTER TABLE [Наследник] ADD CONSTRAINT [Наследник_FМастер_0] FOREIGN KEY ([Мастер]) REFERENCES [Мастер] -CREATE INDEX Наследник_IМастер on [Наследник] ([Мастер]) - - ALTER TABLE [LegoBlockBottomPanel] ADD CONSTRAINT [LegoBlockBottomPanel_FLegoBlock_0] FOREIGN KEY ([Block]) REFERENCES [LegoBlock] -CREATE INDEX LegoBlockBottomPanel_IBlock on [LegoBlockBottomPanel] ([Block]) - - ALTER TABLE [Перелом] ADD CONSTRAINT [Перелом_FЛапа_0] FOREIGN KEY ([Лапа_m0]) REFERENCES [Лапа] -CREATE INDEX Перелом_IЛапа_m0 on [Перелом] ([Лапа_m0]) - - ALTER TABLE [Лапа] ADD CONSTRAINT [Лапа_FТипЛапы_0] FOREIGN KEY ([ТипЛапы_m0]) REFERENCES [ТипЛапы] -CREATE INDEX Лапа_IТипЛапы_m0 on [Лапа] ([ТипЛапы_m0]) - - ALTER TABLE [Лапа] ADD CONSTRAINT [Лапа_FКошка_0] FOREIGN KEY ([Кошка_m0]) REFERENCES [Кошка] -CREATE INDEX Лапа_IКошка_m0 on [Лапа] ([Кошка_m0]) - - ALTER TABLE [Кошка] ADD CONSTRAINT [Кошка_FПорода_0] FOREIGN KEY ([Порода_m0]) REFERENCES [Порода] -CREATE INDEX Кошка_IПорода_m0 on [Кошка] ([Порода_m0]) - - ALTER TABLE [STORMWEBSEARCH] ADD CONSTRAINT [STORMWEBSEARCH_FSTORMFILTERSETTING_0] FOREIGN KEY ([FilterSetting_m0]) REFERENCES [STORMFILTERSETTING] - - ALTER TABLE [STORMFILTERDETAIL] ADD CONSTRAINT [STORMFILTERDETAIL_FSTORMFILTERSETTING_0] FOREIGN KEY ([FilterSetting_m0]) REFERENCES [STORMFILTERSETTING] - - ALTER TABLE [STORMFILTERLOOKUP] ADD CONSTRAINT [STORMFILTERLOOKUP_FSTORMFILTERSETTING_0] FOREIGN KEY ([FilterSetting_m0]) REFERENCES [STORMFILTERSETTING] - - ALTER TABLE [STORMLG] ADD CONSTRAINT [STORMLG_FSTORMAG_0] FOREIGN KEY ([Group_m0]) REFERENCES [STORMAG] - - ALTER TABLE [STORMLG] ADD CONSTRAINT [STORMLG_FSTORMAG_1] FOREIGN KEY ([User_m0]) REFERENCES [STORMAG] - - ALTER TABLE [STORMAuEntity] ADD CONSTRAINT [STORMAuEntity_FSTORMAG_0] FOREIGN KEY ([User_m0]) REFERENCES [STORMAG] - - ALTER TABLE [STORMAuEntity] ADD CONSTRAINT [STORMAuEntity_FSTORMAuObjType_0] FOREIGN KEY ([ObjectType_m0]) REFERENCES [STORMAuObjType] - ALTER TABLE [STORMAuField] ADD CONSTRAINT [STORMAuField_FSTORMAuField_0] FOREIGN KEY ([MainChange_m0]) REFERENCES [STORMAuField] - ALTER TABLE [STORMAuField] ADD CONSTRAINT [STORMAuField_FSTORMAuEntity_0] FOREIGN KEY ([AuditEntity_m0]) REFERENCES [STORMAuEntity] diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/Oracle.create.sql b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/Oracle.create.sql index 6f1691e3..a5716085 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/Oracle.create.sql +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/Oracle.create.sql @@ -2,78 +2,60 @@ -CREATE TABLE "Лес" +CREATE TABLE "КлассСМножТипов" ( "primaryKey" RAW(16) NOT NULL, - "Название" NVARCHAR2(255) NULL, - - "Площадь" NUMBER(10) NULL, - - "Заповедник" NUMBER(1) NULL, + "PropertyBool" NUMBER(1) NULL, - "ДатаПослОсмотра" DATE NULL, + "PropertyDateTime" DATE NULL, - "Страна" RAW(16) NULL, + "PropertyDecimal" NUMBER(38) NULL, - PRIMARY KEY ("primaryKey") -) ; + "PropertyDouble" FLOAT(126) NULL, -CREATE TABLE "КлассСМножТипов" -( + "PropertyEnum" NVARCHAR2(6) NULL, - "primaryKey" RAW(16) NOT NULL, + "PropertyFloat" FLOAT(53) NULL, "PropertyGeography" CLOB NULL, - "PropertyEnum" NVARCHAR2(6) NULL, - - "PropertyBool" NUMBER(1) NULL, - "PropertyInt" NUMBER(10) NULL, - "PropertyDateTime" DATE NULL, - - "PropertyString" NVARCHAR2(255) NULL, - - "PropertyFloat" FLOAT(53) NULL, + "PropertyStormnetBlob" CLOB NULL, - "PropertyDouble" FLOAT(126) NULL, + "PropertyStormnetContact" CLOB NULL, - "PropertyDecimal" NUMBER(38) NULL, + "PropertyStormnetEvent" CLOB NULL, - "PropertySystemNullableDateTime" DATE NULL, + "PropertyStormnetFile" CLOB NULL, - "PropertySystemNullableInt" NUMBER(10) NULL, + "PropertyStormnetGeoData" CLOB NULL, - "PropertySystemNullableGuid" RAW(16) NULL, + "PropertyStormnetImage" CLOB NULL, - "PropertySystemNullableDecimal" NUMBER(38) NULL, + "PropertyStormnetKeyGuid" RAW(16) NULL, "PropStormnetNullableDateTime" DATE NULL, - "PropertyStormnetNullableInt" NUMBER(10) NULL, - - "PropertyStormnetKeyGuid" RAW(16) NULL, - "PropStormnetNullableDecimal" NUMBER(38) NULL, - "PropertyStormnetPartliedDate" NVARCHAR2(255) NULL, + "PropertyStormnetNullableInt" NUMBER(10) NULL, - "PropertyStormnetContact" CLOB NULL, + "PropertyStormnetPartliedDate" NVARCHAR2(255) NULL, - "PropertyStormnetBlob" CLOB NULL, + "PropertyStormnetWebFile" CLOB NULL, - "PropertyStormnetEvent" CLOB NULL, + "PropertyString" NVARCHAR2(255) NULL, - "PropertyStormnetGeoData" CLOB NULL, + "PropertySystemNullableDateTime" DATE NULL, - "PropertyStormnetImage" CLOB NULL, + "PropertySystemNullableDecimal" NUMBER(38) NULL, - "PropertyStormnetWebFile" CLOB NULL, + "PropertySystemNullableGuid" RAW(16) NULL, - "PropertyStormnetFile" CLOB NULL, + "PropertySystemNullableInt" NUMBER(10) NULL, PRIMARY KEY ("primaryKey") ) ; @@ -90,19 +72,38 @@ CREATE TABLE "Master" ) ; -CREATE TABLE "LegoPatent" +CREATE TABLE "Лес" ( "primaryKey" RAW(16) NOT NULL, - "Name" NVARCHAR2(255) NULL, + "ДатаПослОсмотра" DATE NULL, - "Date" DATE NULL, + "Заповедник" NUMBER(1) NULL, + + "Название" NVARCHAR2(255) NULL, + + "Площадь" NUMBER(10) NULL, + + "Страна" RAW(16) NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "LegoPatent" +( + + "primaryKey" RAW(16) NOT NULL, "Authors" NVARCHAR2(255) NULL, + "Date" DATE NULL, + "Description" NVARCHAR2(255) NULL, + "Name" NVARCHAR2(255) NULL, + "LegoBlock" RAW(16) NULL, "LegoDevice" RAW(16) NULL, @@ -218,12 +219,12 @@ CREATE TABLE "Driver" "primaryKey" RAW(16) NOT NULL, - "Name" NVARCHAR2(255) NULL, - "CarCount" NUMBER(10) NULL, "Documents" NUMBER(1) NULL, + "Name" NVARCHAR2(255) NULL, + PRIMARY KEY ("primaryKey") ) ; @@ -256,43 +257,6 @@ CREATE TABLE "Журнал" ) ; -CREATE TABLE "Медведь" -( - - "primaryKey" RAW(16) NOT NULL, - - "ПолеБС" NVARCHAR2(255) NULL, - - "ПорядковыйНомер" NUMBER(10) NULL, - - "Вес" NUMBER(10) NULL, - - "ЦветГлаз" NVARCHAR2(255) NULL, - - "Пол" NVARCHAR2(9) NULL, - - "ДатаРождения" DATE NULL, - - "CreateTime" DATE NULL, - - "Creator" NVARCHAR2(255) NULL, - - "EditTime" DATE NULL, - - "Editor" NVARCHAR2(255) NULL, - - "ЛесОбитания" RAW(16) NULL, - - "Папа" RAW(16) NULL, - - "Страна" RAW(16) NULL, - - "Мама" RAW(16) NULL, - - PRIMARY KEY ("primaryKey") -) ; - - CREATE TABLE "TestMaster" ( @@ -337,18 +301,18 @@ CREATE TABLE "LegoBlock" "primaryKey" RAW(16) NOT NULL, - "Width" NUMBER(10) NULL, - - "Height" NUMBER(10) NULL, + "Configuration" NVARCHAR2(255) NULL, "Depth" NUMBER(10) NULL, - "Configuration" NVARCHAR2(255) NULL, + "Height" NUMBER(10) NULL, - "Name" NVARCHAR2(255) NULL, + "Width" NUMBER(10) NULL, "BlockId" NUMBER(10) NULL, + "Name" NVARCHAR2(255) NULL, + "Material" RAW(16) NULL, "Color" RAW(16) NULL, @@ -357,42 +321,15 @@ CREATE TABLE "LegoBlock" ) ; -CREATE TABLE "Берлога" -( - - "primaryKey" RAW(16) NOT NULL, - - "ПолеБС" NVARCHAR2(255) NULL, - - "Наименование" NVARCHAR2(255) NULL, - - "Комфортность" NUMBER(10) NULL, - - "Заброшена" NUMBER(1) NULL, - - "Сертификат" CLOB NULL, - - "CertString" CLOB NULL, - - "ЛесРасположения" RAW(16) NULL, - - "ДляКакойПороды" RAW(16) NULL, - - "Медведь" RAW(16) NOT NULL, - - PRIMARY KEY ("primaryKey") -) ; - - CREATE TABLE "LegoBlockColor" ( "primaryKey" RAW(16) NOT NULL, - "Name" NVARCHAR2(255) NULL, - "ColorNumber" NUMBER(10) NULL, + "Name" NVARCHAR2(255) NULL, + PRIMARY KEY ("primaryKey") ) ; @@ -413,10 +350,10 @@ CREATE TABLE "Котенок" "primaryKey" RAW(16) NOT NULL, - "КличкаКотенка" NVARCHAR2(255) NULL, - "Глупость" NUMBER(10) NULL, + "КличкаКотенка" NVARCHAR2(255) NULL, + "Кошка_m0" RAW(16) NOT NULL, PRIMARY KEY ("primaryKey") @@ -466,23 +403,6 @@ CREATE TABLE "DetailsClass1" ) ; -CREATE TABLE "Car" -( - - "primaryKey" RAW(16) NOT NULL, - - "Number" NVARCHAR2(255) NULL, - - "Model" NVARCHAR2(255) NULL, - - "TipCar" NVARCHAR2(9) NULL, - - "driver" RAW(16) NOT NULL, - - PRIMARY KEY ("primaryKey") -) ; - - CREATE TABLE "LegoBlockCustomPanel" ( @@ -505,10 +425,10 @@ CREATE TABLE "ТипЛапы" "primaryKey" RAW(16) NOT NULL, - "Название" NVARCHAR2(255) NULL, - "Актуально" NUMBER(1) NULL, + "Название" NVARCHAR2(255) NULL, + PRIMARY KEY ("primaryKey") ) ; @@ -529,10 +449,10 @@ CREATE TABLE "LegoPanelAngle" "primaryKey" RAW(16) NOT NULL, - "Name" NVARCHAR2(255) NULL, - "Angle" NUMBER(10) NULL, + "Name" NVARCHAR2(255) NULL, + PRIMARY KEY ("primaryKey") ) ; @@ -627,10 +547,10 @@ CREATE TABLE "ТипПороды" "primaryKey" RAW(16) NOT NULL, - "Название" NVARCHAR2(255) NULL, - "ДатаРегистрации" DATE NULL, + "Название" NVARCHAR2(255) NULL, + PRIMARY KEY ("primaryKey") ) ; @@ -640,10 +560,10 @@ CREATE TABLE "LegoBlockTopPanel" "primaryKey" RAW(16) NOT NULL, - "WidthCount" NUMBER(10) NULL, - "HeightCount" NUMBER(10) NULL, + "WidthCount" NUMBER(10) NULL, + "SocketStandard" RAW(16) NULL, "Block" RAW(16) NOT NULL, @@ -717,10 +637,10 @@ CREATE TABLE "LegoDevice" "Electricity" NUMBER(1) NULL, - "Name" NVARCHAR2(255) NULL, - "BlockId" NUMBER(10) NULL, + "Name" NVARCHAR2(255) NULL, + "Color" RAW(16) NULL, PRIMARY KEY ("primaryKey") @@ -738,10 +658,10 @@ CREATE TABLE "Наследник" "Свойство2" NUMBER(10) NULL, - "Master" RAW(16) NULL, - "Мастер" RAW(16) NULL, + "Master" RAW(16) NULL, + PRIMARY KEY ("primaryKey") ) ; @@ -751,10 +671,10 @@ CREATE TABLE "LegoBlockBottomPanel" "primaryKey" RAW(16) NOT NULL, - "WidthCount" NUMBER(10) NULL, - "HeightCount" NUMBER(10) NULL, + "WidthCount" NUMBER(10) NULL, + "Block" RAW(16) NOT NULL, PRIMARY KEY ("primaryKey") @@ -768,55 +688,136 @@ CREATE TABLE "ДочернийКласс" "ChildProperty" NVARCHAR2(255) NULL, - "PropertyGeography" CLOB NULL, + "PropertyBool" NUMBER(1) NULL, + + "PropertyDateTime" DATE NULL, + + "PropertyDecimal" NUMBER(38) NULL, + + "PropertyDouble" FLOAT(126) NULL, "PropertyEnum" NVARCHAR2(6) NULL, - "PropertyBool" NUMBER(1) NULL, + "PropertyFloat" FLOAT(53) NULL, + + "PropertyGeography" CLOB NULL, "PropertyInt" NUMBER(10) NULL, - "PropertyDateTime" DATE NULL, + "PropertyStormnetBlob" CLOB NULL, - "PropertyString" NVARCHAR2(255) NULL, + "PropertyStormnetContact" CLOB NULL, - "PropertyFloat" FLOAT(53) NULL, + "PropertyStormnetEvent" CLOB NULL, - "PropertyDouble" FLOAT(126) NULL, + "PropertyStormnetFile" CLOB NULL, - "PropertyDecimal" NUMBER(38) NULL, + "PropertyStormnetGeoData" CLOB NULL, + + "PropertyStormnetImage" CLOB NULL, + + "PropertyStormnetKeyGuid" RAW(16) NULL, + + "PropStormnetNullableDateTime" DATE NULL, + + "PropStormnetNullableDecimal" NUMBER(38) NULL, + + "PropertyStormnetNullableInt" NUMBER(10) NULL, + + "PropertyStormnetPartliedDate" NVARCHAR2(255) NULL, + + "PropertyStormnetWebFile" CLOB NULL, + + "PropertyString" NVARCHAR2(255) NULL, "PropertySystemNullableDateTime" DATE NULL, - "PropertySystemNullableInt" NUMBER(10) NULL, + "PropertySystemNullableDecimal" NUMBER(38) NULL, "PropertySystemNullableGuid" RAW(16) NULL, - "PropertySystemNullableDecimal" NUMBER(38) NULL, + "PropertySystemNullableInt" NUMBER(10) NULL, - "PropStormnetNullableDateTime" DATE NULL, + PRIMARY KEY ("primaryKey") +) ; - "PropertyStormnetNullableInt" NUMBER(10) NULL, - "PropertyStormnetKeyGuid" RAW(16) NULL, +CREATE TABLE "Медведь" +( - "PropStormnetNullableDecimal" NUMBER(38) NULL, + "primaryKey" RAW(16) NOT NULL, - "PropertyStormnetPartliedDate" NVARCHAR2(255) NULL, + "Вес" NUMBER(10) NULL, - "PropertyStormnetContact" CLOB NULL, + "ДатаРождения" DATE NULL, - "PropertyStormnetBlob" CLOB NULL, + "Пол" NVARCHAR2(9) NULL, - "PropertyStormnetEvent" CLOB NULL, + "ПолеБС" NVARCHAR2(255) NULL, - "PropertyStormnetGeoData" CLOB NULL, + "ПорядковыйНомер" NUMBER(10) NULL, - "PropertyStormnetImage" CLOB NULL, + "ЦветГлаз" NVARCHAR2(255) NULL, - "PropertyStormnetWebFile" CLOB NULL, + "CreateTime" DATE NULL, - "PropertyStormnetFile" CLOB NULL, + "Creator" NVARCHAR2(255) NULL, + + "Editor" NVARCHAR2(255) NULL, + + "EditTime" DATE NULL, + + "ЛесОбитания" RAW(16) NULL, + + "Мама" RAW(16) NULL, + + "Папа" RAW(16) NULL, + + "Страна" RAW(16) NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "Берлога" +( + + "primaryKey" RAW(16) NOT NULL, + + "Заброшена" NUMBER(1) NULL, + + "Комфортность" NUMBER(10) NULL, + + "Наименование" NVARCHAR2(255) NULL, + + "ПолеБС" NVARCHAR2(255) NULL, + + "Сертификат" CLOB NULL, + + "CertString" CLOB NULL, + + "ЛесРасположения" RAW(16) NULL, + + "ДляКакойПороды" RAW(16) NULL, + + "Медведь" RAW(16) NOT NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "Car" +( + + "primaryKey" RAW(16) NOT NULL, + + "Model" NVARCHAR2(255) NULL, + + "Number" NVARCHAR2(255) NULL, + + "TipCar" NVARCHAR2(9) NULL, + + "driver" RAW(16) NOT NULL, PRIMARY KEY ("primaryKey") ) ; @@ -836,28 +837,29 @@ CREATE TABLE "Перелом" PRIMARY KEY ("primaryKey") ) ; + CREATE TABLE "Лапа" ( "primaryKey" RAW(16) NOT NULL, - "Цвет" NVARCHAR2(255) NULL, - - "Размер" NUMBER(10) NULL, + "БылиЛиПереломы" NUMBER(1) NULL, "ДатаРождения" DATE NULL, - "БылиЛиПереломы" NUMBER(1) NULL, + "Номер" NUMBER(10) NULL, - "Сторона" NVARCHAR2(11) NULL, + "Размер" NUMBER(10) NULL, - "Номер" NUMBER(10) NULL, + "РазмерDecimal" NUMBER(38) NULL, "РазмерDouble" FLOAT(126) NULL, "РазмерFloat" FLOAT(53) NULL, - "РазмерDecimal" NUMBER(38) NULL, + "Сторона" NVARCHAR2(11) NULL, + + "Цвет" NVARCHAR2(255) NULL, "ТипЛапы_m0" RAW(16) NULL, @@ -872,25 +874,52 @@ CREATE TABLE "Кошка" "primaryKey" RAW(16) NOT NULL, - "Кличка" NVARCHAR2(255) NULL, + "Агрессивная" NUMBER(1) NULL, "ДатаРождения" DATE NULL, - "Тип" NVARCHAR2(11) NULL, - - "ПородаСтрокой" NVARCHAR2(255) NULL, - "Агрессивная" NUMBER(1) NULL, + "Кличка" NVARCHAR2(255) NULL, "УсыСлева" NUMBER(10) NULL, "УсыСправа" NUMBER(10) NULL, + "ПородаСтрокой" NVARCHAR2(255) NULL, + + "Тип" NVARCHAR2(11) NULL, + "Порода_m0" RAW(16) NOT NULL, PRIMARY KEY ("primaryKey") ) ; +CREATE TABLE "AgregatorSameMD" +( + + "primaryKey" RAW(16) NOT NULL, + + "Name" NVARCHAR2(255) NULL, + + "Master" RAW(16) NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "DetailAndMaster" +( + + "primaryKey" RAW(16) NOT NULL, + + "Name" NVARCHAR2(255) NULL, + + "Agregator" RAW(16) NOT NULL, + + PRIMARY KEY ("primaryKey") +) ; + + CREATE TABLE "STORMNETLOCKDATA" ( @@ -1240,7 +1269,6 @@ CREATE INDEX "TestDetailWithCicle_ITest_3425" on "TestDetailWithCicle" ("TestMas ALTER TABLE "Детейл" ADD CONSTRAINT "Детейл_FБазов_7676" FOREIGN KEY ("БазовыйКласс_m0") REFERENCES "БазовыйКласс" ("primaryKey"); - CREATE INDEX "Детейл_IБазов_4616" on "Детейл" ("БазовыйКласс_m0"); ALTER TABLE "Детейл" @@ -1258,26 +1286,6 @@ ALTER TABLE "Журнал" CREATE INDEX "Журнал_IБибли_1176" on "Журнал" ("Библиотека2"); -ALTER TABLE "Медведь" - ADD CONSTRAINT "Медведь_FЛес_0" FOREIGN KEY ("ЛесОбитания") REFERENCES "Лес" ("primaryKey"); - -CREATE INDEX "Медведь_IЛесО_5757" on "Медведь" ("ЛесОбитания"); - -ALTER TABLE "Медведь" - ADD CONSTRAINT "Медведь_FМедв_4334" FOREIGN KEY ("Папа") REFERENCES "Медведь" ("primaryKey"); - -CREATE INDEX "Медведь_IПапа" on "Медведь" ("Папа"); - -ALTER TABLE "Медведь" - ADD CONSTRAINT "Медведь_FСтрана_0" FOREIGN KEY ("Страна") REFERENCES "Страна" ("primaryKey"); - -CREATE INDEX "Медведь_IСтрана" on "Медведь" ("Страна"); - -ALTER TABLE "Медведь" - ADD CONSTRAINT "Медведь_FМедв_4335" FOREIGN KEY ("Мама") REFERENCES "Медведь" ("primaryKey"); - -CREATE INDEX "Медведь_IМама" on "Медведь" ("Мама"); - ALTER TABLE "MainClass" ADD CONSTRAINT "MainClass_FAgrClass1_0" FOREIGN KEY ("AgrClass1") REFERENCES "AgrClass1" ("primaryKey"); @@ -1303,21 +1311,6 @@ ALTER TABLE "LegoBlock" CREATE INDEX "LegoBlock_IColor" on "LegoBlock" ("Color"); -ALTER TABLE "Берлога" - ADD CONSTRAINT "Берлога_FЛес_0" FOREIGN KEY ("ЛесРасположения") REFERENCES "Лес" ("primaryKey"); - -CREATE INDEX "Берлога_IЛесР_1411" on "Берлога" ("ЛесРасположения"); - -ALTER TABLE "Берлога" - ADD CONSTRAINT "Берлога_FПорода_0" FOREIGN KEY ("ДляКакойПороды") REFERENCES "Порода" ("primaryKey"); - -CREATE INDEX "Берлога_IДляК_2329" on "Берлога" ("ДляКакойПороды"); - -ALTER TABLE "Берлога" - ADD CONSTRAINT "Берлога_FМедв_5600" FOREIGN KEY ("Медведь") REFERENCES "Медведь" ("primaryKey"); - -CREATE INDEX "Берлога_IМедведь" on "Берлога" ("Медведь"); - ALTER TABLE "Котенок" ADD CONSTRAINT "Котенок_FКошка_0" FOREIGN KEY ("Кошка_m0") REFERENCES "Кошка" ("primaryKey"); @@ -1343,11 +1336,6 @@ ALTER TABLE "DetailsClass1" CREATE INDEX "DetailsClass1_IAgrClass1" on "DetailsClass1" ("AgrClass1"); -ALTER TABLE "Car" - ADD CONSTRAINT "Car_FDriver_0" FOREIGN KEY ("driver") REFERENCES "Driver" ("primaryKey"); - -CREATE INDEX "Car_Idriver" on "Car" ("driver"); - ALTER TABLE "LegoBlockCustomPanel" ADD CONSTRAINT "LegoBlockCustomPanel_FLeg_5205" FOREIGN KEY ("PanelAngle") REFERENCES "LegoPanelAngle" ("primaryKey"); @@ -1383,7 +1371,6 @@ ALTER TABLE "LegoBlockTopPanel" CREATE INDEX "LegoBlockTopPanel_IBlock" on "LegoBlockTopPanel" ("Block"); - ALTER TABLE "ДетейлНаследник" ADD CONSTRAINT "ДетейлНаслед_2684" FOREIGN KEY ("БазовыйКласс_m0") REFERENCES "БазовыйКласс" ("primaryKey"); @@ -1415,20 +1402,60 @@ ALTER TABLE "LegoDevice" CREATE INDEX "LegoDevice_IColor" on "LegoDevice" ("Color"); ALTER TABLE "Наследник" - ADD CONSTRAINT "Наследник_FMaster_0" FOREIGN KEY ("Master") REFERENCES "Master" ("primaryKey"); + ADD CONSTRAINT "Наследник_FМас_278" FOREIGN KEY ("Мастер") REFERENCES "Мастер" ("primaryKey"); -CREATE INDEX "Наследник_IMaster" on "Наследник" ("Master"); +CREATE INDEX "Наследник_IМа_7239" on "Наследник" ("Мастер"); ALTER TABLE "Наследник" - ADD CONSTRAINT "Наследник_FМас_278" FOREIGN KEY ("Мастер") REFERENCES "Мастер" ("primaryKey"); + ADD CONSTRAINT "Наследник_FMaster_0" FOREIGN KEY ("Master") REFERENCES "Master" ("primaryKey"); -CREATE INDEX "Наследник_IМа_7239" on "Наследник" ("Мастер"); +CREATE INDEX "Наследник_IMaster" on "Наследник" ("Master"); ALTER TABLE "LegoBlockBottomPanel" ADD CONSTRAINT "LegoBlockBottomPanel_FLeg_6473" FOREIGN KEY ("Block") REFERENCES "LegoBlock" ("primaryKey"); CREATE INDEX "LegoBlockBottomPanel_IBlock" on "LegoBlockBottomPanel" ("Block"); +ALTER TABLE "Медведь" + ADD CONSTRAINT "Медведь_FЛес_0" FOREIGN KEY ("ЛесОбитания") REFERENCES "Лес" ("primaryKey"); + +CREATE INDEX "Медведь_IЛесО_5757" on "Медведь" ("ЛесОбитания"); + +ALTER TABLE "Медведь" + ADD CONSTRAINT "Медведь_FМедв_4334" FOREIGN KEY ("Мама") REFERENCES "Медведь" ("primaryKey"); + +CREATE INDEX "Медведь_IМама" on "Медведь" ("Мама"); + +ALTER TABLE "Медведь" + ADD CONSTRAINT "Медведь_FМедв_4335" FOREIGN KEY ("Папа") REFERENCES "Медведь" ("primaryKey"); + +CREATE INDEX "Медведь_IПапа" on "Медведь" ("Папа"); + +ALTER TABLE "Медведь" + ADD CONSTRAINT "Медведь_FСтрана_0" FOREIGN KEY ("Страна") REFERENCES "Страна" ("primaryKey"); + +CREATE INDEX "Медведь_IСтрана" on "Медведь" ("Страна"); + +ALTER TABLE "Берлога" + ADD CONSTRAINT "Берлога_FЛес_0" FOREIGN KEY ("ЛесРасположения") REFERENCES "Лес" ("primaryKey"); + +CREATE INDEX "Берлога_IЛесР_1411" on "Берлога" ("ЛесРасположения"); + +ALTER TABLE "Берлога" + ADD CONSTRAINT "Берлога_FПорода_0" FOREIGN KEY ("ДляКакойПороды") REFERENCES "Порода" ("primaryKey"); + +CREATE INDEX "Берлога_IДляК_2329" on "Берлога" ("ДляКакойПороды"); + +ALTER TABLE "Берлога" + ADD CONSTRAINT "Берлога_FМедв_5600" FOREIGN KEY ("Медведь") REFERENCES "Медведь" ("primaryKey"); + +CREATE INDEX "Берлога_IМедведь" on "Берлога" ("Медведь"); + +ALTER TABLE "Car" + ADD CONSTRAINT "Car_FDriver_0" FOREIGN KEY ("driver") REFERENCES "Driver" ("primaryKey"); + +CREATE INDEX "Car_Idriver" on "Car" ("driver"); + ALTER TABLE "Перелом" ADD CONSTRAINT "Перелом_FЛапа_0" FOREIGN KEY ("Лапа_m0") REFERENCES "Лапа" ("primaryKey"); @@ -1449,6 +1476,16 @@ ALTER TABLE "Кошка" CREATE INDEX "Кошка_IПорода_m0" on "Кошка" ("Порода_m0"); +ALTER TABLE "AgregatorSameMD" + ADD CONSTRAINT "AgregatorSameMD_FDe_217" FOREIGN KEY ("Master") REFERENCES "DetailAndMaster" ("primaryKey"); + +CREATE INDEX "AgregatorSameMD_IMaster" on "AgregatorSameMD" ("Master"); + +ALTER TABLE "DetailAndMaster" + ADD CONSTRAINT "DetailAndMaster_FAgregator_188" FOREIGN KEY ("Agregator") REFERENCES "AgregatorSameMD" ("primaryKey"); + +CREATE INDEX "DetailAndMaster_IAgregator" on "DetailAndMaster" ("Agregator"); + ALTER TABLE "STORMWEBSEARCH" ADD CONSTRAINT "STORMWEBSEARCH_FSTORMFILT_6521" FOREIGN KEY ("FilterSetting_m0") REFERENCES "STORMFILTERSETTING" ("primaryKey"); diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/PostgreSql.create.sql b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/PostgreSql.create.sql index c1c08a94..cec8f225 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/PostgreSql.create.sql +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/PostgreSql.create.sql @@ -3,43 +3,33 @@ -CREATE TABLE Лес ( - primaryKey UUID NOT NULL, - Название VARCHAR(255) NULL, - Площадь INT NULL, - Заповедник BOOLEAN NULL, - ДатаПослОсмотра TIMESTAMP(3) NULL, - Страна UUID NULL, - PRIMARY KEY (primaryKey)); - - CREATE TABLE КлассСМножТипов ( primaryKey UUID NOT NULL, - PropertyGeography GEOMETRY NULL, - PropertyEnum VARCHAR(6) NULL, PropertyBool BOOLEAN NULL, - PropertyInt INT NULL, PropertyDateTime TIMESTAMP(3) NULL, - PropertyString VARCHAR(255) NULL, - PropertyFloat REAL NULL, - PropertyDouble DOUBLE PRECISION NULL, PropertyDecimal DECIMAL NULL, - PropertySystemNullableDateTime TIMESTAMP(3) NULL, - PropertySystemNullableInt INT NULL, - PropertySystemNullableGuid UUID NULL, - PropertySystemNullableDecimal DECIMAL NULL, - PropStormnetNullableDateTime TIMESTAMP(3) NULL, - PropertyStormnetNullableInt INT NULL, - PropertyStormnetKeyGuid UUID NULL, - PropStormnetNullableDecimal DECIMAL NULL, - PropertyStormnetPartliedDate VARCHAR(255) NULL, - PropertyStormnetContact TEXT NULL, + PropertyDouble DOUBLE PRECISION NULL, + PropertyEnum VARCHAR(6) NULL, + PropertyFloat REAL NULL, + PropertyGeography GEOMETRY NULL, + PropertyInt INT NULL, PropertyStormnetBlob TEXT NULL, + PropertyStormnetContact TEXT NULL, PropertyStormnetEvent TEXT NULL, + PropertyStormnetFile TEXT NULL, PropertyStormnetGeoData TEXT NULL, PropertyStormnetImage TEXT NULL, + PropertyStormnetKeyGuid UUID NULL, + PropStormnetNullableDateTime TIMESTAMP(3) NULL, + PropStormnetNullableDecimal DECIMAL NULL, + PropertyStormnetNullableInt INT NULL, + PropertyStormnetPartliedDate VARCHAR(255) NULL, PropertyStormnetWebFile TEXT NULL, - PropertyStormnetFile TEXT NULL, + PropertyString VARCHAR(255) NULL, + PropertySystemNullableDateTime TIMESTAMP(3) NULL, + PropertySystemNullableDecimal DECIMAL NULL, + PropertySystemNullableGuid UUID NULL, + PropertySystemNullableInt INT NULL, PRIMARY KEY (primaryKey)); @@ -49,12 +39,22 @@ CREATE TABLE Master ( PRIMARY KEY (primaryKey)); +CREATE TABLE Лес ( + primaryKey UUID NOT NULL, + ДатаПослОсмотра TIMESTAMP(3) NULL, + Заповедник BOOLEAN NULL, + Название VARCHAR(255) NULL, + Площадь INT NULL, + Страна UUID NULL, + PRIMARY KEY (primaryKey)); + + CREATE TABLE LegoPatent ( primaryKey UUID NOT NULL, - Name VARCHAR(255) NULL, - Date TIMESTAMP(3) NULL, Authors VARCHAR(255) NULL, + Date TIMESTAMP(3) NULL, Description VARCHAR(255) NULL, + Name VARCHAR(255) NULL, LegoBlock UUID NULL, LegoDevice UUID NULL, PRIMARY KEY (primaryKey)); @@ -117,9 +117,9 @@ CREATE TABLE Детейл ( CREATE TABLE Driver ( primaryKey UUID NOT NULL, - Name VARCHAR(255) NULL, CarCount INT NULL, Documents BOOLEAN NULL, + Name VARCHAR(255) NULL, PRIMARY KEY (primaryKey)); @@ -138,25 +138,6 @@ CREATE TABLE Журнал ( PRIMARY KEY (primaryKey)); -CREATE TABLE Медведь ( - primaryKey UUID NOT NULL, - ПолеБС VARCHAR(255) NULL, - ПорядковыйНомер INT NULL, - Вес INT NULL, - ЦветГлаз VARCHAR(255) NULL, - Пол VARCHAR(9) NULL, - ДатаРождения TIMESTAMP(3) NULL, - CreateTime TIMESTAMP(3) NULL, - Creator VARCHAR(255) NULL, - EditTime TIMESTAMP(3) NULL, - Editor VARCHAR(255) NULL, - ЛесОбитания UUID NULL, - Папа UUID NULL, - Страна UUID NULL, - Мама UUID NULL, - PRIMARY KEY (primaryKey)); - - CREATE TABLE TestMaster ( primaryKey UUID NOT NULL, TestMasterName VARCHAR(255) NULL, @@ -180,35 +161,21 @@ CREATE TABLE Порода ( CREATE TABLE LegoBlock ( primaryKey UUID NOT NULL, - Width INT NULL, - Height INT NULL, - Depth INT NULL, Configuration VARCHAR(255) NULL, - Name VARCHAR(255) NULL, + Depth INT NULL, + Height INT NULL, + Width INT NULL, BlockId INT NULL, + Name VARCHAR(255) NULL, Material UUID NULL, Color UUID NULL, PRIMARY KEY (primaryKey)); -CREATE TABLE Берлога ( - primaryKey UUID NOT NULL, - ПолеБС VARCHAR(255) NULL, - Наименование VARCHAR(255) NULL, - Комфортность INT NULL, - Заброшена BOOLEAN NULL, - Сертификат TEXT NULL, - CertString TEXT NULL, - ЛесРасположения UUID NULL, - ДляКакойПороды UUID NULL, - Медведь UUID NOT NULL, - PRIMARY KEY (primaryKey)); - - CREATE TABLE LegoBlockColor ( primaryKey UUID NOT NULL, - Name VARCHAR(255) NULL, ColorNumber INT NULL, + Name VARCHAR(255) NULL, PRIMARY KEY (primaryKey)); @@ -220,8 +187,8 @@ CREATE TABLE ПоставщикКниг ( CREATE TABLE Котенок ( primaryKey UUID NOT NULL, - КличкаКотенка VARCHAR(255) NULL, Глупость INT NULL, + КличкаКотенка VARCHAR(255) NULL, Кошка_m0 UUID NOT NULL, PRIMARY KEY (primaryKey)); @@ -249,15 +216,6 @@ CREATE TABLE DetailsClass1 ( PRIMARY KEY (primaryKey)); -CREATE TABLE Car ( - primaryKey UUID NOT NULL, - Number VARCHAR(255) NULL, - Model VARCHAR(255) NULL, - TipCar VARCHAR(9) NULL, - driver UUID NOT NULL, - PRIMARY KEY (primaryKey)); - - CREATE TABLE LegoBlockCustomPanel ( primaryKey UUID NOT NULL, Orientation VARCHAR(255) NULL, @@ -269,8 +227,8 @@ CREATE TABLE LegoBlockCustomPanel ( CREATE TABLE ТипЛапы ( primaryKey UUID NOT NULL, - Название VARCHAR(255) NULL, Актуально BOOLEAN NULL, + Название VARCHAR(255) NULL, PRIMARY KEY (primaryKey)); @@ -282,8 +240,8 @@ CREATE TABLE AgrClass1 ( CREATE TABLE LegoPanelAngle ( primaryKey UUID NOT NULL, - Name VARCHAR(255) NULL, Angle INT NULL, + Name VARCHAR(255) NULL, PRIMARY KEY (primaryKey)); @@ -335,15 +293,15 @@ CREATE TABLE AgrClass2 ( CREATE TABLE ТипПороды ( primaryKey UUID NOT NULL, - Название VARCHAR(255) NULL, ДатаРегистрации TIMESTAMP(3) NULL, + Название VARCHAR(255) NULL, PRIMARY KEY (primaryKey)); CREATE TABLE LegoBlockTopPanel ( primaryKey UUID NOT NULL, - WidthCount INT NULL, HeightCount INT NULL, + WidthCount INT NULL, SocketStandard UUID NULL, Block UUID NOT NULL, PRIMARY KEY (primaryKey)); @@ -383,8 +341,8 @@ CREATE TABLE LegoDevice ( primaryKey UUID NOT NULL, Description VARCHAR(255) NULL, Electricity BOOLEAN NULL, - Name VARCHAR(255) NULL, BlockId INT NULL, + Name VARCHAR(255) NULL, Color UUID NULL, PRIMARY KEY (primaryKey)); @@ -394,15 +352,15 @@ CREATE TABLE Наследник ( Свойство DOUBLE PRECISION NULL, Свойство1 VARCHAR(255) NULL, Свойство2 INT NULL, - Master UUID NULL, Мастер UUID NULL, + Master UUID NULL, PRIMARY KEY (primaryKey)); CREATE TABLE LegoBlockBottomPanel ( primaryKey UUID NOT NULL, - WidthCount INT NULL, HeightCount INT NULL, + WidthCount INT NULL, Block UUID NOT NULL, PRIMARY KEY (primaryKey)); @@ -410,31 +368,73 @@ CREATE TABLE LegoBlockBottomPanel ( CREATE TABLE ДочернийКласс ( primaryKey UUID NOT NULL, ChildProperty VARCHAR(255) NULL, - PropertyGeography GEOMETRY NULL, - PropertyEnum VARCHAR(6) NULL, PropertyBool BOOLEAN NULL, - PropertyInt INT NULL, PropertyDateTime TIMESTAMP(3) NULL, - PropertyString VARCHAR(255) NULL, - PropertyFloat REAL NULL, - PropertyDouble DOUBLE PRECISION NULL, PropertyDecimal DECIMAL NULL, - PropertySystemNullableDateTime TIMESTAMP(3) NULL, - PropertySystemNullableInt INT NULL, - PropertySystemNullableGuid UUID NULL, - PropertySystemNullableDecimal DECIMAL NULL, - PropStormnetNullableDateTime TIMESTAMP(3) NULL, - PropertyStormnetNullableInt INT NULL, - PropertyStormnetKeyGuid UUID NULL, - PropStormnetNullableDecimal DECIMAL NULL, - PropertyStormnetPartliedDate VARCHAR(255) NULL, - PropertyStormnetContact TEXT NULL, + PropertyDouble DOUBLE PRECISION NULL, + PropertyEnum VARCHAR(6) NULL, + PropertyFloat REAL NULL, + PropertyGeography GEOMETRY NULL, + PropertyInt INT NULL, PropertyStormnetBlob TEXT NULL, + PropertyStormnetContact TEXT NULL, PropertyStormnetEvent TEXT NULL, + PropertyStormnetFile TEXT NULL, PropertyStormnetGeoData TEXT NULL, PropertyStormnetImage TEXT NULL, + PropertyStormnetKeyGuid UUID NULL, + PropStormnetNullableDateTime TIMESTAMP(3) NULL, + PropStormnetNullableDecimal DECIMAL NULL, + PropertyStormnetNullableInt INT NULL, + PropertyStormnetPartliedDate VARCHAR(255) NULL, PropertyStormnetWebFile TEXT NULL, - PropertyStormnetFile TEXT NULL, + PropertyString VARCHAR(255) NULL, + PropertySystemNullableDateTime TIMESTAMP(3) NULL, + PropertySystemNullableDecimal DECIMAL NULL, + PropertySystemNullableGuid UUID NULL, + PropertySystemNullableInt INT NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE Медведь ( + primaryKey UUID NOT NULL, + Вес INT NULL, + ДатаРождения TIMESTAMP(3) NULL, + Пол VARCHAR(9) NULL, + ПолеБС VARCHAR(255) NULL, + ПорядковыйНомер INT NULL, + ЦветГлаз VARCHAR(255) NULL, + CreateTime TIMESTAMP(3) NULL, + Creator VARCHAR(255) NULL, + Editor VARCHAR(255) NULL, + EditTime TIMESTAMP(3) NULL, + ЛесОбитания UUID NULL, + Мама UUID NULL, + Папа UUID NULL, + Страна UUID NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE Берлога ( + primaryKey UUID NOT NULL, + Заброшена BOOLEAN NULL, + Комфортность INT NULL, + Наименование VARCHAR(255) NULL, + ПолеБС VARCHAR(255) NULL, + Сертификат TEXT NULL, + CertString TEXT NULL, + ЛесРасположения UUID NULL, + ДляКакойПороды UUID NULL, + Медведь UUID NOT NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE Car ( + primaryKey UUID NOT NULL, + Model VARCHAR(255) NULL, + Number VARCHAR(255) NULL, + TipCar VARCHAR(9) NULL, + driver UUID NOT NULL, PRIMARY KEY (primaryKey)); @@ -448,15 +448,15 @@ CREATE TABLE Перелом ( CREATE TABLE Лапа ( primaryKey UUID NOT NULL, - Цвет VARCHAR(255) NULL, - Размер INT NULL, - ДатаРождения TIMESTAMP(3) NULL, БылиЛиПереломы BOOLEAN NULL, - Сторона VARCHAR(11) NULL, + ДатаРождения TIMESTAMP(3) NULL, Номер INT NULL, + Размер INT NULL, + РазмерDecimal DECIMAL NULL, РазмерDouble DOUBLE PRECISION NULL, РазмерFloat REAL NULL, - РазмерDecimal DECIMAL NULL, + Сторона VARCHAR(11) NULL, + Цвет VARCHAR(255) NULL, ТипЛапы_m0 UUID NULL, Кошка_m0 UUID NOT NULL, PRIMARY KEY (primaryKey)); @@ -464,17 +464,31 @@ CREATE TABLE Лапа ( CREATE TABLE Кошка ( primaryKey UUID NOT NULL, - Кличка VARCHAR(255) NULL, - ДатаРождения TIMESTAMP(3) NULL, - Тип VARCHAR(11) NULL, - ПородаСтрокой VARCHAR(255) NULL, Агрессивная BOOLEAN NULL, + ДатаРождения TIMESTAMP(3) NULL, + Кличка VARCHAR(255) NULL, УсыСлева INT NULL, УсыСправа INT NULL, + ПородаСтрокой VARCHAR(255) NULL, + Тип VARCHAR(11) NULL, Порода_m0 UUID NOT NULL, PRIMARY KEY (primaryKey)); +CREATE TABLE AgregatorSameMD ( + primaryKey UUID NOT NULL, + Name VARCHAR(255) NULL, + Master UUID NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE DetailAndMaster ( + primaryKey UUID NOT NULL, + Name VARCHAR(255) NULL, + Agregator UUID NOT NULL, + PRIMARY KEY (primaryKey)); + + CREATE TABLE STORMNETLOCKDATA ( LockKey VARCHAR(300) NOT NULL, UserName VARCHAR(300) NOT NULL, @@ -607,10 +621,10 @@ CREATE TABLE STORMAuField ( PRIMARY KEY (primaryKey)); +CREATE INDEX Indexc5f9d71c0704ea7b966afcfdc89dc7eabe2d0c43 on КлассСМножТипов USING gist (PropertyGeography); ALTER TABLE Лес ADD CONSTRAINT FKd3bd1222072f531605e73e66656fe58296c8bfd2 FOREIGN KEY (Страна) REFERENCES Страна; CREATE INDEX Indexd3bd1222072f531605e73e66656fe58296c8bfd2 on Лес (Страна); -CREATE INDEX Indexc5f9d71c0704ea7b966afcfdc89dc7eabe2d0c43 on КлассСМножТипов USING gist (PropertyGeography); ALTER TABLE LegoPatent ADD CONSTRAINT FK849bc80cb1cf2d804429cfd10a756cb914e3fece FOREIGN KEY (LegoBlock) REFERENCES LegoBlock; CREATE INDEX Index849bc80cb1cf2d804429cfd10a756cb914e3fece on LegoPatent (LegoBlock); @@ -642,18 +656,6 @@ CREATE INDEX Index51fce8ede8f7716be28b6975505b1f9e738cc71c on Журнал (Ав ALTER TABLE Журнал ADD CONSTRAINT FK93c8f6bdc15c74cea64c3d56754d8263c4f0ceb5 FOREIGN KEY (Библиотека2) REFERENCES Библиотека; CREATE INDEX Index93c8f6bdc15c74cea64c3d56754d8263c4f0ceb5 on Журнал (Библиотека2); - ALTER TABLE Медведь ADD CONSTRAINT FK93be01a32cae64dc4b18705ade6683f41a32c367 FOREIGN KEY (ЛесОбитания) REFERENCES Лес; -CREATE INDEX Index93be01a32cae64dc4b18705ade6683f41a32c367 on Медведь (ЛесОбитания); - - ALTER TABLE Медведь ADD CONSTRAINT FK0ca403a899ac5a709a19bbb9ada47b0060e5b819 FOREIGN KEY (Папа) REFERENCES Медведь; -CREATE INDEX Index0ca403a899ac5a709a19bbb9ada47b0060e5b819 on Медведь (Папа); - - ALTER TABLE Медведь ADD CONSTRAINT FK6d8033494746b0bb87ba367c83d273dfa11b8f59 FOREIGN KEY (Страна) REFERENCES Страна; -CREATE INDEX Index6d8033494746b0bb87ba367c83d273dfa11b8f59 on Медведь (Страна); - - ALTER TABLE Медведь ADD CONSTRAINT FK0b9f6ad0caded1971696ef6602e8a2831fa941b1 FOREIGN KEY (Мама) REFERENCES Медведь; -CREATE INDEX Index0b9f6ad0caded1971696ef6602e8a2831fa941b1 on Медведь (Мама); - ALTER TABLE MainClass ADD CONSTRAINT FK685ab69befdffb9de6fa545fb70cd50905f15ac0 FOREIGN KEY (AgrClass1) REFERENCES AgrClass1; CREATE INDEX Index685ab69befdffb9de6fa545fb70cd50905f15ac0 on MainClass (AgrClass1); @@ -669,15 +671,6 @@ CREATE INDEX Index4cfb6296b76f57183c4e2ee17b66be5bed463d0f on LegoBlock (Materia ALTER TABLE LegoBlock ADD CONSTRAINT FK9f2f5e18e6674969f5e82da37bf4b5a2a1d4713a FOREIGN KEY (Color) REFERENCES LegoBlockColor; CREATE INDEX Index9f2f5e18e6674969f5e82da37bf4b5a2a1d4713a on LegoBlock (Color); - ALTER TABLE Берлога ADD CONSTRAINT FKa74603e81cb82d318a92d5d3e374895fe242d80e FOREIGN KEY (ЛесРасположения) REFERENCES Лес; -CREATE INDEX Indexa74603e81cb82d318a92d5d3e374895fe242d80e on Берлога (ЛесРасположения); - - ALTER TABLE Берлога ADD CONSTRAINT FKd55a7fa30b428d1be64b1b8e2ac5b525597ef56b FOREIGN KEY (ДляКакойПороды) REFERENCES Порода; -CREATE INDEX Indexd55a7fa30b428d1be64b1b8e2ac5b525597ef56b on Берлога (ДляКакойПороды); - - ALTER TABLE Берлога ADD CONSTRAINT FK838e30a686c4f1dcfbb02e55d47218e48ddbe7a2 FOREIGN KEY (Медведь) REFERENCES Медведь; -CREATE INDEX Index838e30a686c4f1dcfbb02e55d47218e48ddbe7a2 on Берлога (Медведь); - ALTER TABLE Котенок ADD CONSTRAINT FK79a0f583830fea7f95d716cc96a27d0967a2d537 FOREIGN KEY (Кошка_m0) REFERENCES Кошка; CREATE INDEX Index79a0f583830fea7f95d716cc96a27d0967a2d537 on Котенок (Кошка_m0); @@ -693,9 +686,6 @@ CREATE INDEX Indexfb36ebac9beeb237cccb40b7be9cf2d25e9247b9 on DetailsClass1 (Det ALTER TABLE DetailsClass1 ADD CONSTRAINT FK10455ebe27fd31555ad2502ede3706a815784321 FOREIGN KEY (AgrClass1) REFERENCES AgrClass1; CREATE INDEX Index10455ebe27fd31555ad2502ede3706a815784321 on DetailsClass1 (AgrClass1); - ALTER TABLE Car ADD CONSTRAINT FKe86a1d047f4df342bf39a5af864aec2b40a3547a FOREIGN KEY (driver) REFERENCES Driver; -CREATE INDEX Indexe86a1d047f4df342bf39a5af864aec2b40a3547a on Car (driver); - ALTER TABLE LegoBlockCustomPanel ADD CONSTRAINT FK53e2141b982788b2970c50d23073a5847e47d81c FOREIGN KEY (PanelAngle) REFERENCES LegoPanelAngle; CREATE INDEX Index53e2141b982788b2970c50d23073a5847e47d81c on LegoBlockCustomPanel (PanelAngle); @@ -735,16 +725,40 @@ CREATE INDEX Index84e4d9d5b6adc4bec48541216f15f396dd2b602c on Книга (Биб ALTER TABLE LegoDevice ADD CONSTRAINT FKafee67e1a41c2550c0f3df3724edf1b0be74db9f FOREIGN KEY (Color) REFERENCES LegoBlockColor; CREATE INDEX Indexafee67e1a41c2550c0f3df3724edf1b0be74db9f on LegoDevice (Color); - ALTER TABLE Наследник ADD CONSTRAINT FK0cb9ac2b0e7896223ed63c0c888c23aa86682b1e FOREIGN KEY (Master) REFERENCES Master; -CREATE INDEX Index0cb9ac2b0e7896223ed63c0c888c23aa86682b1e on Наследник (Master); - ALTER TABLE Наследник ADD CONSTRAINT FK28ac1d61524a43a59e67af57a855ad487d1f8141 FOREIGN KEY (Мастер) REFERENCES Мастер; CREATE INDEX Index28ac1d61524a43a59e67af57a855ad487d1f8141 on Наследник (Мастер); + ALTER TABLE Наследник ADD CONSTRAINT FK0cb9ac2b0e7896223ed63c0c888c23aa86682b1e FOREIGN KEY (Master) REFERENCES Master; +CREATE INDEX Index0cb9ac2b0e7896223ed63c0c888c23aa86682b1e on Наследник (Master); + ALTER TABLE LegoBlockBottomPanel ADD CONSTRAINT FKba0e912f138a900a9d416b459d0b38e70871f043 FOREIGN KEY (Block) REFERENCES LegoBlock; CREATE INDEX Indexba0e912f138a900a9d416b459d0b38e70871f043 on LegoBlockBottomPanel (Block); CREATE INDEX Index10d981ac5288ea278311b6a711b43fa954b635a8 on ДочернийКласс USING gist (PropertyGeography); + ALTER TABLE Медведь ADD CONSTRAINT FK93be01a32cae64dc4b18705ade6683f41a32c367 FOREIGN KEY (ЛесОбитания) REFERENCES Лес; +CREATE INDEX Index93be01a32cae64dc4b18705ade6683f41a32c367 on Медведь (ЛесОбитания); + + ALTER TABLE Медведь ADD CONSTRAINT FK0b9f6ad0caded1971696ef6602e8a2831fa941b1 FOREIGN KEY (Мама) REFERENCES Медведь; +CREATE INDEX Index0b9f6ad0caded1971696ef6602e8a2831fa941b1 on Медведь (Мама); + + ALTER TABLE Медведь ADD CONSTRAINT FK0ca403a899ac5a709a19bbb9ada47b0060e5b819 FOREIGN KEY (Папа) REFERENCES Медведь; +CREATE INDEX Index0ca403a899ac5a709a19bbb9ada47b0060e5b819 on Медведь (Папа); + + ALTER TABLE Медведь ADD CONSTRAINT FK6d8033494746b0bb87ba367c83d273dfa11b8f59 FOREIGN KEY (Страна) REFERENCES Страна; +CREATE INDEX Index6d8033494746b0bb87ba367c83d273dfa11b8f59 on Медведь (Страна); + + ALTER TABLE Берлога ADD CONSTRAINT FKa74603e81cb82d318a92d5d3e374895fe242d80e FOREIGN KEY (ЛесРасположения) REFERENCES Лес; +CREATE INDEX Indexa74603e81cb82d318a92d5d3e374895fe242d80e on Берлога (ЛесРасположения); + + ALTER TABLE Берлога ADD CONSTRAINT FKd55a7fa30b428d1be64b1b8e2ac5b525597ef56b FOREIGN KEY (ДляКакойПороды) REFERENCES Порода; +CREATE INDEX Indexd55a7fa30b428d1be64b1b8e2ac5b525597ef56b on Берлога (ДляКакойПороды); + + ALTER TABLE Берлога ADD CONSTRAINT FK838e30a686c4f1dcfbb02e55d47218e48ddbe7a2 FOREIGN KEY (Медведь) REFERENCES Медведь; +CREATE INDEX Index838e30a686c4f1dcfbb02e55d47218e48ddbe7a2 on Берлога (Медведь); + + ALTER TABLE Car ADD CONSTRAINT FKe86a1d047f4df342bf39a5af864aec2b40a3547a FOREIGN KEY (driver) REFERENCES Driver; +CREATE INDEX Indexe86a1d047f4df342bf39a5af864aec2b40a3547a on Car (driver); + ALTER TABLE Перелом ADD CONSTRAINT FK6dee404d2bb9702d8d72537c5ae42a7c97dfb5fa FOREIGN KEY (Лапа_m0) REFERENCES Лапа; CREATE INDEX Index6dee404d2bb9702d8d72537c5ae42a7c97dfb5fa on Перелом (Лапа_m0); @@ -757,6 +771,12 @@ CREATE INDEX Indexd2c2995f4deb3767b25fa4ca17d61bf9bff3d562 on Лапа (Кошк ALTER TABLE Кошка ADD CONSTRAINT FK271599c8f6730bbff77fe5e9bf61dbfd89e661c6 FOREIGN KEY (Порода_m0) REFERENCES Порода; CREATE INDEX Index271599c8f6730bbff77fe5e9bf61dbfd89e661c6 on Кошка (Порода_m0); + ALTER TABLE AgregatorSameMD ADD CONSTRAINT FK8b53b11c59bd038385b48bae2e4c94deed6a1407 FOREIGN KEY (Master) REFERENCES DetailAndMaster; +CREATE INDEX Index8b53b11c59bd038385b48bae2e4c94deed6a1407 on AgregatorSameMD (Master); + + ALTER TABLE DetailAndMaster ADD CONSTRAINT FK0c88fee611c8abca27c4c3da5367b44eee5fc8e5 FOREIGN KEY (Agregator) REFERENCES AgregatorSameMD; +CREATE INDEX Index0c88fee611c8abca27c4c3da5367b44eee5fc8e5 on DetailAndMaster (Agregator); + ALTER TABLE STORMWEBSEARCH ADD CONSTRAINT FKc4378e39870eb056aec84088683297a01d2a6200 FOREIGN KEY (FilterSetting_m0) REFERENCES STORMFILTERSETTING; ALTER TABLE STORMFILTERDETAIL ADD CONSTRAINT FK921d16269835017e2a0d0e29ad6fb175454a70d0 FOREIGN KEY (FilterSetting_m0) REFERENCES STORMFILTERSETTING; diff --git a/Tests/Objects/AgregatorWithSameMAndD.cs b/Tests/Objects/AgregatorWithSameMAndD.cs new file mode 100644 index 00000000..c1173b52 --- /dev/null +++ b/Tests/Objects/AgregatorWithSameMAndD.cs @@ -0,0 +1,143 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// AgregatorSameMD. + /// + // *** Start programmer edit section *** (AgregatorSameMD CustomAttributes) + + // *** End programmer edit section *** (AgregatorSameMD CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class AgregatorSameMD : ICSSoft.STORMNET.DataObject + { + + private string fName; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMaster fMaster; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailAndMaster fDetails; + + // *** Start programmer edit section *** (AgregatorSameMD CustomMembers) + + // *** End programmer edit section *** (AgregatorSameMD CustomMembers) + + + /// + /// Name. + /// + // *** Start programmer edit section *** (AgregatorSameMD.Name CustomAttributes) + + // *** End programmer edit section *** (AgregatorSameMD.Name CustomAttributes) + [StrLen(255)] + public virtual string Name + { + get + { + // *** Start programmer edit section *** (AgregatorSameMD.Name Get start) + + // *** End programmer edit section *** (AgregatorSameMD.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (AgregatorSameMD.Name Get end) + + // *** End programmer edit section *** (AgregatorSameMD.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (AgregatorSameMD.Name Set start) + + // *** End programmer edit section *** (AgregatorSameMD.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (AgregatorSameMD.Name Set end) + + // *** End programmer edit section *** (AgregatorSameMD.Name Set end) + } + } + + /// + /// AgregatorSameMD. + /// + // *** Start programmer edit section *** (AgregatorSameMD.Master CustomAttributes) + + // *** End programmer edit section *** (AgregatorSameMD.Master CustomAttributes) + [PropertyStorage(new string[] { + "Master"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMaster Master + { + get + { + // *** Start programmer edit section *** (AgregatorSameMD.Master Get start) + + // *** End programmer edit section *** (AgregatorSameMD.Master Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMaster result = this.fMaster; + // *** Start programmer edit section *** (AgregatorSameMD.Master Get end) + + // *** End programmer edit section *** (AgregatorSameMD.Master Get end) + return result; + } + set + { + // *** Start programmer edit section *** (AgregatorSameMD.Master Set start) + + // *** End programmer edit section *** (AgregatorSameMD.Master Set start) + this.fMaster = value; + // *** Start programmer edit section *** (AgregatorSameMD.Master Set end) + + // *** End programmer edit section *** (AgregatorSameMD.Master Set end) + } + } + + /// + /// AgregatorSameMD. + /// + // *** Start programmer edit section *** (AgregatorSameMD.Details CustomAttributes) + + // *** End programmer edit section *** (AgregatorSameMD.Details CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailAndMaster Details + { + get + { + // *** Start programmer edit section *** (AgregatorSameMD.Details Get start) + + // *** End programmer edit section *** (AgregatorSameMD.Details Get start) + if ((this.fDetails == null)) + { + this.fDetails = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailAndMaster(this); + } + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailAndMaster result = this.fDetails; + // *** Start programmer edit section *** (AgregatorSameMD.Details Get end) + + // *** End programmer edit section *** (AgregatorSameMD.Details Get end) + return result; + } + set + { + // *** Start programmer edit section *** (AgregatorSameMD.Details Set start) + + // *** End programmer edit section *** (AgregatorSameMD.Details Set start) + this.fDetails = value; + // *** Start programmer edit section *** (AgregatorSameMD.Details Set end) + + // *** End programmer edit section *** (AgregatorSameMD.Details Set end) + } + } + } +} + diff --git a/Tests/Objects/DetailAndMaster.cs b/Tests/Objects/DetailAndMaster.cs new file mode 100644 index 00000000..1cf7cbb2 --- /dev/null +++ b/Tests/Objects/DetailAndMaster.cs @@ -0,0 +1,150 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// DetailAndMaster. + /// + // *** Start programmer edit section *** (DetailAndMaster CustomAttributes) + + // *** End programmer edit section *** (DetailAndMaster CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class DetailAndMaster : ICSSoft.STORMNET.DataObject + { + + private string fName; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.AgregatorSameMD fAgregator; + + // *** Start programmer edit section *** (DetailAndMaster CustomMembers) + + // *** End programmer edit section *** (DetailAndMaster CustomMembers) + + + /// + /// Name. + /// + // *** Start programmer edit section *** (DetailAndMaster.Name CustomAttributes) + + // *** End programmer edit section *** (DetailAndMaster.Name CustomAttributes) + [StrLen(255)] + public virtual string Name + { + get + { + // *** Start programmer edit section *** (DetailAndMaster.Name Get start) + + // *** End programmer edit section *** (DetailAndMaster.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (DetailAndMaster.Name Get end) + + // *** End programmer edit section *** (DetailAndMaster.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (DetailAndMaster.Name Set start) + + // *** End programmer edit section *** (DetailAndMaster.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (DetailAndMaster.Name Set end) + + // *** End programmer edit section *** (DetailAndMaster.Name Set end) + } + } + + /// + /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.AgregatorSameMD. + /// + // *** Start programmer edit section *** (DetailAndMaster.Agregator CustomAttributes) + + // *** End programmer edit section *** (DetailAndMaster.Agregator CustomAttributes) + [Agregator()] + [NotNull()] + [PropertyStorage(new string[] { + "Agregator"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.AgregatorSameMD Agregator + { + get + { + // *** Start programmer edit section *** (DetailAndMaster.Agregator Get start) + + // *** End programmer edit section *** (DetailAndMaster.Agregator Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.AgregatorSameMD result = this.fAgregator; + // *** Start programmer edit section *** (DetailAndMaster.Agregator Get end) + + // *** End programmer edit section *** (DetailAndMaster.Agregator Get end) + return result; + } + set + { + // *** Start programmer edit section *** (DetailAndMaster.Agregator Set start) + + // *** End programmer edit section *** (DetailAndMaster.Agregator Set start) + this.fAgregator = value; + // *** Start programmer edit section *** (DetailAndMaster.Agregator Set end) + + // *** End programmer edit section *** (DetailAndMaster.Agregator Set end) + } + } + } + + /// + /// Detail array of DetailAndMaster. + /// + // *** Start programmer edit section *** (DetailArrayDetailArrayOfDetailAndMaster CustomAttributes) + + // *** End programmer edit section *** (DetailArrayDetailArrayOfDetailAndMaster CustomAttributes) + public class DetailArrayOfDetailAndMaster : ICSSoft.STORMNET.DetailArray + { + + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailAndMaster members) + + // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailAndMaster members) + + + /// + /// Construct detail array. + /// + /// + /// Returns object with type DetailAndMaster by index. + /// + /// + /// Adds object with type DetailAndMaster. + /// + public DetailArrayOfDetailAndMaster(NewPlatform.Flexberry.ORM.ODataService.Tests.AgregatorSameMD fAgregatorSameMD) : + base(typeof(DetailAndMaster), ((ICSSoft.STORMNET.DataObject)(fAgregatorSameMD))) + { + } + + public NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMaster this[int index] + { + get + { + return ((NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMaster)(this.ItemByIndex(index))); + } + } + + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMaster dataobject) + { + this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); + } + } +} + From b1d19cd766f66097190efbd5ffcfff535bfc48de Mon Sep 17 00:00:00 2001 From: tosotova Date: Wed, 7 Feb 2024 16:32:55 +0500 Subject: [PATCH 45/77] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B4=D0=BE=D0=B3=D1=80=D1=83=D0=B7=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D1=81=D0=BB=D0=BE=D0=B6=D0=BD=D0=BE=D0=B9=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B5=20(TODO:?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=B1=D0=B5=D0=B7=D0=BE=D0=BF=D0=B0=D1=81?= =?UTF-8?q?=D0=BD=D1=83=D1=8E=20=D0=B4=D0=BE=D0=B3=D1=80=D1=83=D0=B7=D0=BA?= =?UTF-8?q?=D1=83)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataObjectController.ModifyData.cs | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs index 074b815d..36b8e591 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs @@ -50,6 +50,10 @@ public partial class DataObjectController /// private List _removingFileDescriptions = new List(); + private List _typesWithSameDetailAndMaster = new List(); + + private List _typesWithNotSameDetailAndMaster = new List(); + /// /// Создание сущности и всех связанных. При существовании в БД произойдёт обновление. /// @@ -254,7 +258,38 @@ private NoContentResult DeleteEntity(object key) } Init(); - var obj = DataObjectCache.CreateDataObject(type, key); + + /* В ситуации, когда мастер и детейл одного типа, ORM без подгрузки копии данных не может корректно разобрать порядок, + * в котором объекты должны быть удалены. + */ + bool needDataCopyLoad = _typesWithSameDetailAndMaster.Contains(type); + if (!_typesWithNotSameDetailAndMaster.Contains(type) && !needDataCopyLoad) + { + string[] props = Information.GetAllPropertyNames(type); + int length = props.Length; + int index = 0; + + while(!needDataCopyLoad && index < length) + { + string prop = props[index]; + Type propType = Information.GetPropertyType(type, prop); + needDataCopyLoad = propType.IsSubclassOf(typeof(DataObject)) && Information.GetDetailArrayPropertyName(type, propType) != null; + + index++; + } + } + + DataObject obj = null; + if (!needDataCopyLoad) + { + obj = DataObjectCache.CreateDataObject(type, key); + _typesWithNotSameDetailAndMaster.Add(type); + } + else + { + obj = LoadObject(type, key.ToString()); + _typesWithSameDetailAndMaster.Add(type); + } // Удаляем объект с заданным ключем. // Детейлы удалятся вместе с агрегатором автоматически. From 5b434b8288f18adfa9ed256a5450183f4a24737a Mon Sep 17 00:00:00 2001 From: tosotova Date: Tue, 13 Feb 2024 10:49:12 +0500 Subject: [PATCH 46/77] Added new objects for tests --- ...tform.Flexberry.ORM.ODataService.Tests.crp | 1156 ++++++++++------- .../SqlScripts/MSSql.create.sql | 621 ++++----- .../SqlScripts/Oracle.create.sql | 644 +++++---- .../SqlScripts/PostgreSql.create.sql | 381 ++++-- Tests/Objects/AgregatorWithSameMAndD.cs | 143 ++ Tests/Objects/DetailAndMaster.cs | 150 +++ Tests/Objects/FirstLevel.cs | 230 ++++ Tests/Objects/SecondLevel1.cs | 150 +++ Tests/Objects/SecondLevel2.cs | 188 +++ Tests/Objects/TestAssociation.cs | 71 + Tests/Objects/TestClass.cs | 106 ++ Tests/Objects/TestConfiguration.cs | 108 ++ Tests/Objects/TestMaster.cs | 30 +- Tests/Objects/ThirdLevel.cs | 150 +++ 14 files changed, 2922 insertions(+), 1206 deletions(-) create mode 100644 Tests/Objects/AgregatorWithSameMAndD.cs create mode 100644 Tests/Objects/DetailAndMaster.cs create mode 100644 Tests/Objects/FirstLevel.cs create mode 100644 Tests/Objects/SecondLevel1.cs create mode 100644 Tests/Objects/SecondLevel2.cs create mode 100644 Tests/Objects/TestAssociation.cs create mode 100644 Tests/Objects/TestClass.cs create mode 100644 Tests/Objects/TestConfiguration.cs create mode 100644 Tests/Objects/ThirdLevel.cs diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp index ebb6a638..9160c98b 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp @@ -1,1130 +1,1316 @@ - + - - + + + + + + + + + + + + + + + + + - + - + - + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - + - + - + - + + + + + + + - + + + + - + - - - - + + + + - + - + - + - + - + + + - + - + - + - + - + - + - + - + - + + + + + + + + + + - + - + - + - - + + - + - + - + - - + + - + - + - + - + - - - + + + - + - + - + - - - - - - - - + - + + - + - + + + - + - + - + - - - + + + - + - - + + + - - - + - + - - - - - - - - - - - - - + + - - - - - - + - + - + - - + + - + - + - + - + - + - + - + - + - - - - + + + + - - - - - - - - + - + - - - - - - - + + + + + + + + + + - - - - + - + - + - - + + - + - + - - + + - + - + + + + - + - + - + - + - + - + - - - - - - - - - - - + - - - + - + - - + + - + - + + + + - + - + - + - + - + + + - + - + - - + + - + - + - + + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + + + - + - - + + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - + - + + + - + - + - + - + - + - + - - + + - + - + - + - + + + + + - + - + - - + + - + - + - + - + - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - - - - - - - + + + + + + + + + + + - + - + - + - - - - - - - - + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + + - - - + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + + + + - + - + - + - - + + @@ -1133,15 +1319,15 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/MSSql.create.sql b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/MSSql.create.sql index 672b66b2..738274d8 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/MSSql.create.sql +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/MSSql.create.sql @@ -2,75 +2,59 @@ -CREATE TABLE [Лес] ( +CREATE TABLE [КлассСМножТипов] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Название] VARCHAR(255) NULL, - - [Площадь] INT NULL, - - [Заповедник] BIT NULL, + [PropertyBool] BIT NULL, - [ДатаПослОсмотра] DATETIME NULL, + [PropertyDateTime] DATETIME NULL, - [Страна] UNIQUEIDENTIFIER NULL, + [PropertyDecimal] DECIMAL NULL, - PRIMARY KEY ([primaryKey])) + [PropertyDouble] FLOAT NULL, -CREATE TABLE [КлассСМножТипов] ( + [PropertyEnum] VARCHAR(6) NULL, - [primaryKey] UNIQUEIDENTIFIER NOT NULL, + [PropertyFloat] REAL NULL, [PropertyGeography] geography NULL, - [PropertyEnum] VARCHAR(6) NULL, - - [PropertyBool] BIT NULL, - [PropertyInt] INT NULL, - [PropertyDateTime] DATETIME NULL, - - [PropertyString] VARCHAR(255) NULL, - - [PropertyFloat] REAL NULL, + [PropertyStormnetBlob] NVARCHAR(MAX) NULL, - [PropertyDouble] FLOAT NULL, + [PropertyStormnetContact] NVARCHAR(MAX) NULL, - [PropertyDecimal] DECIMAL NULL, + [PropertyStormnetEvent] NVARCHAR(MAX) NULL, - [PropertySystemNullableDateTime] DATETIME NULL, + [PropertyStormnetFile] NVARCHAR(MAX) NULL, - [PropertySystemNullableInt] INT NULL, + [PropertyStormnetGeoData] NVARCHAR(MAX) NULL, - [PropertySystemNullableGuid] UNIQUEIDENTIFIER NULL, + [PropertyStormnetImage] NVARCHAR(MAX) NULL, - [PropertySystemNullableDecimal] DECIMAL NULL, + [PropertyStormnetKeyGuid] UNIQUEIDENTIFIER NULL, [PropStormnetNullableDateTime] DATETIME NULL, - [PropertyStormnetNullableInt] INT NULL, - - [PropertyStormnetKeyGuid] UNIQUEIDENTIFIER NULL, - [PropStormnetNullableDecimal] DECIMAL NULL, - [PropertyStormnetPartliedDate] VARCHAR(255) NULL, + [PropertyStormnetNullableInt] INT NULL, - [PropertyStormnetContact] NVARCHAR(MAX) NULL, + [PropertyStormnetPartliedDate] VARCHAR(255) NULL, - [PropertyStormnetBlob] NVARCHAR(MAX) NULL, + [PropertyStormnetWebFile] NVARCHAR(MAX) NULL, - [PropertyStormnetEvent] NVARCHAR(MAX) NULL, + [PropertyString] VARCHAR(255) NULL, - [PropertyStormnetGeoData] NVARCHAR(MAX) NULL, + [PropertySystemNullableDateTime] DATETIME NULL, - [PropertyStormnetImage] NVARCHAR(MAX) NULL, + [PropertySystemNullableDecimal] DECIMAL NULL, - [PropertyStormnetWebFile] NVARCHAR(MAX) NULL, + [PropertySystemNullableGuid] UNIQUEIDENTIFIER NULL, - [PropertyStormnetFile] NVARCHAR(MAX) NULL, + [PropertySystemNullableInt] INT NULL, PRIMARY KEY ([primaryKey])) @@ -84,18 +68,35 @@ CREATE TABLE [Master] ( PRIMARY KEY ([primaryKey])) -CREATE TABLE [LegoPatent] ( +CREATE TABLE [Лес] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Name] VARCHAR(255) NULL, + [ДатаПослОсмотра] DATETIME NULL, - [Date] DATETIME NULL, + [Заповедник] BIT NULL, + + [Название] VARCHAR(255) NULL, + + [Площадь] INT NULL, + + [Страна] UNIQUEIDENTIFIER NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [LegoPatent] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, [Authors] VARCHAR(255) NULL, + [Date] DATETIME NULL, + [Description] VARCHAR(255) NULL, + [Name] VARCHAR(255) NULL, + [LegoBlock] UNIQUEIDENTIFIER NULL, [LegoDevice] UNIQUEIDENTIFIER NULL, @@ -193,12 +194,12 @@ CREATE TABLE [Driver] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Name] VARCHAR(255) NULL, - [CarCount] INT NULL, [Documents] BIT NULL, + [Name] VARCHAR(255) NULL, + PRIMARY KEY ([primaryKey])) @@ -226,41 +227,6 @@ CREATE TABLE [Журнал] ( PRIMARY KEY ([primaryKey])) -CREATE TABLE [Медведь] ( - - [primaryKey] UNIQUEIDENTIFIER NOT NULL, - - [ПолеБС] VARCHAR(255) NULL, - - [ПорядковыйНомер] INT NULL, - - [Вес] INT NULL, - - [ЦветГлаз] VARCHAR(255) NULL, - - [Пол] VARCHAR(9) NULL, - - [ДатаРождения] DATETIME NULL, - - [CreateTime] DATETIME NULL, - - [Creator] VARCHAR(255) NULL, - - [EditTime] DATETIME NULL, - - [Editor] VARCHAR(255) NULL, - - [ЛесОбитания] UNIQUEIDENTIFIER NULL, - - [Папа] UNIQUEIDENTIFIER NULL, - - [Страна] UNIQUEIDENTIFIER NULL, - - [Мама] UNIQUEIDENTIFIER NULL, - - PRIMARY KEY ([primaryKey])) - - CREATE TABLE [TestMaster] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, @@ -298,18 +264,18 @@ CREATE TABLE [LegoBlock] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Width] INT NULL, - - [Height] INT NULL, + [Configuration] VARCHAR(255) NULL, [Depth] INT NULL, - [Configuration] VARCHAR(255) NULL, + [Height] INT NULL, - [Name] VARCHAR(255) NULL, + [Width] INT NULL, [BlockId] INT NULL, + [Name] VARCHAR(255) NULL, + [Material] UNIQUEIDENTIFIER NULL, [Color] UNIQUEIDENTIFIER NULL, @@ -317,39 +283,14 @@ CREATE TABLE [LegoBlock] ( PRIMARY KEY ([primaryKey])) -CREATE TABLE [Берлога] ( - - [primaryKey] UNIQUEIDENTIFIER NOT NULL, - - [ПолеБС] VARCHAR(255) NULL, - - [Наименование] VARCHAR(255) NULL, - - [Комфортность] INT NULL, - - [Заброшена] BIT NULL, - - [Сертификат] NVARCHAR(MAX) NULL, - - [CertString] NVARCHAR(MAX) NULL, - - [ЛесРасположения] UNIQUEIDENTIFIER NULL, - - [ДляКакойПороды] UNIQUEIDENTIFIER NULL, - - [Медведь] UNIQUEIDENTIFIER NOT NULL, - - PRIMARY KEY ([primaryKey])) - - CREATE TABLE [LegoBlockColor] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Name] VARCHAR(255) NULL, - [ColorNumber] INT NULL, + [Name] VARCHAR(255) NULL, + PRIMARY KEY ([primaryKey])) @@ -366,10 +307,10 @@ CREATE TABLE [Котенок] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [КличкаКотенка] VARCHAR(255) NULL, - [Глупость] INT NULL, + [КличкаКотенка] VARCHAR(255) NULL, + [Кошка_m0] UNIQUEIDENTIFIER NOT NULL, PRIMARY KEY ([primaryKey])) @@ -412,21 +353,6 @@ CREATE TABLE [DetailsClass1] ( PRIMARY KEY ([primaryKey])) -CREATE TABLE [Car] ( - - [primaryKey] UNIQUEIDENTIFIER NOT NULL, - - [Number] VARCHAR(255) NULL, - - [Model] VARCHAR(255) NULL, - - [TipCar] VARCHAR(9) NULL, - - [driver] UNIQUEIDENTIFIER NOT NULL, - - PRIMARY KEY ([primaryKey])) - - CREATE TABLE [LegoBlockCustomPanel] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, @@ -446,10 +372,10 @@ CREATE TABLE [ТипЛапы] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Название] VARCHAR(255) NULL, - [Актуально] BIT NULL, + [Название] VARCHAR(255) NULL, + PRIMARY KEY ([primaryKey])) @@ -466,10 +392,10 @@ CREATE TABLE [LegoPanelAngle] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Name] VARCHAR(255) NULL, - [Angle] INT NULL, + [Name] VARCHAR(255) NULL, + PRIMARY KEY ([primaryKey])) @@ -548,10 +474,10 @@ CREATE TABLE [ТипПороды] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Название] VARCHAR(255) NULL, - [ДатаРегистрации] DATETIME NULL, + [Название] VARCHAR(255) NULL, + PRIMARY KEY ([primaryKey])) @@ -559,10 +485,10 @@ CREATE TABLE [LegoBlockTopPanel] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [WidthCount] INT NULL, - [HeightCount] INT NULL, + [WidthCount] INT NULL, + [SocketStandard] UNIQUEIDENTIFIER NULL, [Block] UNIQUEIDENTIFIER NOT NULL, @@ -626,10 +552,10 @@ CREATE TABLE [LegoDevice] ( [Electricity] BIT NULL, - [Name] VARCHAR(255) NULL, - [BlockId] INT NULL, + [Name] VARCHAR(255) NULL, + [Color] UNIQUEIDENTIFIER NULL, PRIMARY KEY ([primaryKey])) @@ -645,10 +571,10 @@ CREATE TABLE [Наследник] ( [Свойство2] INT NULL, - [Master] UNIQUEIDENTIFIER NULL, - [Мастер] UNIQUEIDENTIFIER NULL, + [Master] UNIQUEIDENTIFIER NULL, + PRIMARY KEY ([primaryKey])) @@ -656,10 +582,10 @@ CREATE TABLE [LegoBlockBottomPanel] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [WidthCount] INT NULL, - [HeightCount] INT NULL, + [WidthCount] INT NULL, + [Block] UNIQUEIDENTIFIER NOT NULL, PRIMARY KEY ([primaryKey])) @@ -671,55 +597,130 @@ CREATE TABLE [ДочернийКласс] ( [ChildProperty] VARCHAR(255) NULL, - [PropertyGeography] geography NULL, + [PropertyBool] BIT NULL, + + [PropertyDateTime] DATETIME NULL, + + [PropertyDecimal] DECIMAL NULL, + + [PropertyDouble] FLOAT NULL, [PropertyEnum] VARCHAR(6) NULL, - [PropertyBool] BIT NULL, + [PropertyFloat] REAL NULL, + + [PropertyGeography] geography NULL, [PropertyInt] INT NULL, - [PropertyDateTime] DATETIME NULL, + [PropertyStormnetBlob] NVARCHAR(MAX) NULL, - [PropertyString] VARCHAR(255) NULL, + [PropertyStormnetContact] NVARCHAR(MAX) NULL, - [PropertyFloat] REAL NULL, + [PropertyStormnetEvent] NVARCHAR(MAX) NULL, - [PropertyDouble] FLOAT NULL, + [PropertyStormnetFile] NVARCHAR(MAX) NULL, - [PropertyDecimal] DECIMAL NULL, + [PropertyStormnetGeoData] NVARCHAR(MAX) NULL, + + [PropertyStormnetImage] NVARCHAR(MAX) NULL, + + [PropertyStormnetKeyGuid] UNIQUEIDENTIFIER NULL, + + [PropStormnetNullableDateTime] DATETIME NULL, + + [PropStormnetNullableDecimal] DECIMAL NULL, + + [PropertyStormnetNullableInt] INT NULL, + + [PropertyStormnetPartliedDate] VARCHAR(255) NULL, + + [PropertyStormnetWebFile] NVARCHAR(MAX) NULL, + + [PropertyString] VARCHAR(255) NULL, [PropertySystemNullableDateTime] DATETIME NULL, - [PropertySystemNullableInt] INT NULL, + [PropertySystemNullableDecimal] DECIMAL NULL, [PropertySystemNullableGuid] UNIQUEIDENTIFIER NULL, - [PropertySystemNullableDecimal] DECIMAL NULL, + [PropertySystemNullableInt] INT NULL, - [PropStormnetNullableDateTime] DATETIME NULL, + PRIMARY KEY ([primaryKey])) - [PropertyStormnetNullableInt] INT NULL, - [PropertyStormnetKeyGuid] UNIQUEIDENTIFIER NULL, +CREATE TABLE [Медведь] ( - [PropStormnetNullableDecimal] DECIMAL NULL, + [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [PropertyStormnetPartliedDate] VARCHAR(255) NULL, + [Вес] INT NULL, - [PropertyStormnetContact] NVARCHAR(MAX) NULL, + [ДатаРождения] DATETIME NULL, - [PropertyStormnetBlob] NVARCHAR(MAX) NULL, + [Пол] VARCHAR(9) NULL, - [PropertyStormnetEvent] NVARCHAR(MAX) NULL, + [ПолеБС] VARCHAR(255) NULL, - [PropertyStormnetGeoData] NVARCHAR(MAX) NULL, + [ПорядковыйНомер] INT NULL, - [PropertyStormnetImage] NVARCHAR(MAX) NULL, + [ЦветГлаз] VARCHAR(255) NULL, - [PropertyStormnetWebFile] NVARCHAR(MAX) NULL, + [CreateTime] DATETIME NULL, - [PropertyStormnetFile] NVARCHAR(MAX) NULL, + [Creator] VARCHAR(255) NULL, + + [Editor] VARCHAR(255) NULL, + + [EditTime] DATETIME NULL, + + [ЛесОбитания] UNIQUEIDENTIFIER NULL, + + [Мама] UNIQUEIDENTIFIER NULL, + + [Папа] UNIQUEIDENTIFIER NULL, + + [Страна] UNIQUEIDENTIFIER NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [Берлога] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Заброшена] BIT NULL, + + [Комфортность] INT NULL, + + [Наименование] VARCHAR(255) NULL, + + [ПолеБС] VARCHAR(255) NULL, + + [Сертификат] NVARCHAR(MAX) NULL, + + [CertString] NVARCHAR(MAX) NULL, + + [ЛесРасположения] UNIQUEIDENTIFIER NULL, + + [ДляКакойПороды] UNIQUEIDENTIFIER NULL, + + [Медведь] UNIQUEIDENTIFIER NOT NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [Car] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Model] VARCHAR(255) NULL, + + [Number] VARCHAR(255) NULL, + + [TipCar] VARCHAR(9) NULL, + + [driver] UNIQUEIDENTIFIER NOT NULL, PRIMARY KEY ([primaryKey])) @@ -736,27 +737,28 @@ CREATE TABLE [Перелом] ( PRIMARY KEY ([primaryKey])) + CREATE TABLE [Лапа] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Цвет] VARCHAR(255) NULL, - - [Размер] INT NULL, + [БылиЛиПереломы] BIT NULL, [ДатаРождения] DATETIME NULL, - [БылиЛиПереломы] BIT NULL, + [Номер] INT NULL, - [Сторона] VARCHAR(11) NULL, + [Размер] INT NULL, - [Номер] INT NULL, + [РазмерDecimal] DECIMAL NULL, [РазмерDouble] FLOAT NULL, [РазмерFloat] REAL NULL, - [РазмерDecimal] DECIMAL NULL, + [Сторона] VARCHAR(11) NULL, + + [Цвет] VARCHAR(255) NULL, [ТипЛапы_m0] UNIQUEIDENTIFIER NULL, @@ -769,25 +771,132 @@ CREATE TABLE [Кошка] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, - [Кличка] VARCHAR(255) NULL, + [Агрессивная] BIT NULL, [ДатаРождения] DATETIME NULL, - [Тип] VARCHAR(11) NULL, - - [ПородаСтрокой] VARCHAR(255) NULL, - - [Агрессивная] BIT NULL, + [Кличка] VARCHAR(255) NULL, [УсыСлева] INT NULL, [УсыСправа] INT NULL, + [ПородаСтрокой] VARCHAR(255) NULL, + + [Тип] VARCHAR(11) NULL, + [Порода_m0] UNIQUEIDENTIFIER NOT NULL, PRIMARY KEY ([primaryKey])) +CREATE TABLE [AgregatorWithSameMAndD] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Name] VARCHAR(255) NULL, + + [Master] UNIQUEIDENTIFIER NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [DetailAndMaster] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Name] VARCHAR(255) NULL, + + [Agregator] UNIQUEIDENTIFIER NOT NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [TestConfiguration] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Name] VARCHAR(255) NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [TestClass] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Name] VARCHAR(255) NULL, + + [FirstLevel] UNIQUEIDENTIFIER NOT NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [ThirdLevel] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Name] VARCHAR(255) NULL, + + [TestClass] UNIQUEIDENTIFIER NOT NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [SecondLevel1] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Name] VARCHAR(255) NULL, + + [FirstLevel] UNIQUEIDENTIFIER NOT NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [FirstLevel] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Name] VARCHAR(255) NULL, + + [TestConfiguration] UNIQUEIDENTIFIER NOT NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [SecondLevel2] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Name] VARCHAR(255) NULL, + + [SecondLevel1_m0] UNIQUEIDENTIFIER NULL, + + [SecondLevel1_m1] UNIQUEIDENTIFIER NULL, + + [FirstLevel] UNIQUEIDENTIFIER NOT NULL, + + PRIMARY KEY ([primaryKey])) + + +CREATE TABLE [TestAssociation] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Name2] VARCHAR(255) NULL, + + [Name] VARCHAR(255) NULL, + + [SecondLevel1_m0] UNIQUEIDENTIFIER NULL, + + [SecondLevel1_m1] UNIQUEIDENTIFIER NULL, + + [FirstLevel] UNIQUEIDENTIFIER NOT NULL, + + PRIMARY KEY ([primaryKey])) + + CREATE TABLE [STORMNETLOCKDATA] ( [LockKey] VARCHAR(300) NOT NULL, @@ -1069,168 +1178,6 @@ CREATE TABLE [STORMAuField] ( PRIMARY KEY ([primaryKey])) - ALTER TABLE [Лес] ADD CONSTRAINT [Лес_FСтрана_0] FOREIGN KEY ([Страна]) REFERENCES [Страна] -CREATE INDEX Лес_IСтрана on [Лес] ([Страна]) - - ALTER TABLE [LegoPatent] ADD CONSTRAINT [LegoPatent_FLegoBlock_0] FOREIGN KEY ([LegoBlock]) REFERENCES [LegoBlock] -CREATE INDEX LegoPatent_ILegoBlock on [LegoPatent] ([LegoBlock]) - - ALTER TABLE [LegoPatent] ADD CONSTRAINT [LegoPatent_FLegoDevice_0] FOREIGN KEY ([LegoDevice]) REFERENCES [LegoDevice] -CREATE INDEX LegoPatent_ILegoDevice on [LegoPatent] ([LegoDevice]) - - ALTER TABLE [Мастер] ADD CONSTRAINT [Мастер_FМастер2_0] FOREIGN KEY ([Мастер2]) REFERENCES [Мастер2] -CREATE INDEX Мастер_IМастер2 on [Мастер] ([Мастер2]) - - ALTER TABLE [Блоха] ADD CONSTRAINT [Блоха_FМедведь_0] FOREIGN KEY ([МедведьОбитания]) REFERENCES [Медведь] -CREATE INDEX Блоха_IМедведьОбитания on [Блоха] ([МедведьОбитания]) - - ALTER TABLE [TestDetailWithCicle] ADD CONSTRAINT [TestDetailWithCicle_FTestDetailWithCicle_0] FOREIGN KEY ([Parent]) REFERENCES [TestDetailWithCicle] -CREATE INDEX TestDetailWithCicle_IParent on [TestDetailWithCicle] ([Parent]) - - ALTER TABLE [TestDetailWithCicle] ADD CONSTRAINT [TestDetailWithCicle_FTestMaster_0] FOREIGN KEY ([TestMaster]) REFERENCES [TestMaster] -CREATE INDEX TestDetailWithCicle_ITestMaster on [TestDetailWithCicle] ([TestMaster]) - - ALTER TABLE [Детейл] ADD CONSTRAINT [Детейл_FБазовыйКласс_0] FOREIGN KEY ([БазовыйКласс_m0]) REFERENCES [БазовыйКласс] -CREATE INDEX Детейл_IБазовыйКласс_m0 on [Детейл] ([БазовыйКласс_m0]) - - ALTER TABLE [Детейл] ADD CONSTRAINT [Детейл_FНаследник_0] FOREIGN KEY ([БазовыйКласс_m1]) REFERENCES [Наследник] -CREATE INDEX Детейл_IБазовыйКласс_m1 on [Детейл] ([БазовыйКласс_m1]) - - ALTER TABLE [Журнал] ADD CONSTRAINT [Журнал_FАвтор_0] FOREIGN KEY ([Автор2]) REFERENCES [Автор] -CREATE INDEX Журнал_IАвтор2 on [Журнал] ([Автор2]) - - ALTER TABLE [Журнал] ADD CONSTRAINT [Журнал_FБиблиотека_0] FOREIGN KEY ([Библиотека2]) REFERENCES [Библиотека] -CREATE INDEX Журнал_IБиблиотека2 on [Журнал] ([Библиотека2]) - - ALTER TABLE [Медведь] ADD CONSTRAINT [Медведь_FЛес_0] FOREIGN KEY ([ЛесОбитания]) REFERENCES [Лес] -CREATE INDEX Медведь_IЛесОбитания on [Медведь] ([ЛесОбитания]) - - ALTER TABLE [Медведь] ADD CONSTRAINT [Медведь_FМедведь_0] FOREIGN KEY ([Папа]) REFERENCES [Медведь] -CREATE INDEX Медведь_IПапа on [Медведь] ([Папа]) - - ALTER TABLE [Медведь] ADD CONSTRAINT [Медведь_FСтрана_0] FOREIGN KEY ([Страна]) REFERENCES [Страна] -CREATE INDEX Медведь_IСтрана on [Медведь] ([Страна]) - - ALTER TABLE [Медведь] ADD CONSTRAINT [Медведь_FМедведь_1] FOREIGN KEY ([Мама]) REFERENCES [Медведь] -CREATE INDEX Медведь_IМама on [Медведь] ([Мама]) - - ALTER TABLE [MainClass] ADD CONSTRAINT [MainClass_FAgrClass1_0] FOREIGN KEY ([AgrClass1]) REFERENCES [AgrClass1] -CREATE INDEX MainClass_IAgrClass1 on [MainClass] ([AgrClass1]) - - ALTER TABLE [Порода] ADD CONSTRAINT [Порода_FПорода_0] FOREIGN KEY ([Иерархия_m0]) REFERENCES [Порода] -CREATE INDEX Порода_IИерархия_m0 on [Порода] ([Иерархия_m0]) - - ALTER TABLE [Порода] ADD CONSTRAINT [Порода_FТипПороды_0] FOREIGN KEY ([ТипПороды_m0]) REFERENCES [ТипПороды] -CREATE INDEX Порода_IТипПороды_m0 on [Порода] ([ТипПороды_m0]) - - ALTER TABLE [LegoBlock] ADD CONSTRAINT [LegoBlock_FLegoMaterial_0] FOREIGN KEY ([Material]) REFERENCES [LegoMaterial] -CREATE INDEX LegoBlock_IMaterial on [LegoBlock] ([Material]) - - ALTER TABLE [LegoBlock] ADD CONSTRAINT [LegoBlock_FLegoBlockColor_0] FOREIGN KEY ([Color]) REFERENCES [LegoBlockColor] -CREATE INDEX LegoBlock_IColor on [LegoBlock] ([Color]) - - ALTER TABLE [Берлога] ADD CONSTRAINT [Берлога_FЛес_0] FOREIGN KEY ([ЛесРасположения]) REFERENCES [Лес] -CREATE INDEX Берлога_IЛесРасположения on [Берлога] ([ЛесРасположения]) - - ALTER TABLE [Берлога] ADD CONSTRAINT [Берлога_FПорода_0] FOREIGN KEY ([ДляКакойПороды]) REFERENCES [Порода] -CREATE INDEX Берлога_IДляКакойПороды on [Берлога] ([ДляКакойПороды]) - - ALTER TABLE [Берлога] ADD CONSTRAINT [Берлога_FМедведь_0] FOREIGN KEY ([Медведь]) REFERENCES [Медведь] -CREATE INDEX Берлога_IМедведь on [Берлога] ([Медведь]) - - ALTER TABLE [Котенок] ADD CONSTRAINT [Котенок_FКошка_0] FOREIGN KEY ([Кошка_m0]) REFERENCES [Кошка] -CREATE INDEX Котенок_IКошка_m0 on [Котенок] ([Кошка_m0]) - - ALTER TABLE [Daughter] ADD CONSTRAINT [Daughter_FPerson_0] FOREIGN KEY ([Parent]) REFERENCES [Person] -CREATE INDEX Daughter_IParent on [Daughter] ([Parent]) - - ALTER TABLE [LegoBlockTopPanelHole] ADD CONSTRAINT [LegoBlockTopPanelHole_FLegoBlockTopPanel_0] FOREIGN KEY ([TopPanel]) REFERENCES [LegoBlockTopPanel] -CREATE INDEX LegoBlockTopPanelHole_ITopPanel on [LegoBlockTopPanelHole] ([TopPanel]) - - ALTER TABLE [DetailsClass1] ADD CONSTRAINT [DetailsClass1_FDetailsClass2_0] FOREIGN KEY ([DetailsClass2]) REFERENCES [DetailsClass2] -CREATE INDEX DetailsClass1_IDetailsClass2 on [DetailsClass1] ([DetailsClass2]) - - ALTER TABLE [DetailsClass1] ADD CONSTRAINT [DetailsClass1_FAgrClass1_0] FOREIGN KEY ([AgrClass1]) REFERENCES [AgrClass1] -CREATE INDEX DetailsClass1_IAgrClass1 on [DetailsClass1] ([AgrClass1]) - - ALTER TABLE [Car] ADD CONSTRAINT [Car_FDriver_0] FOREIGN KEY ([driver]) REFERENCES [Driver] -CREATE INDEX Car_Idriver on [Car] ([driver]) - - ALTER TABLE [LegoBlockCustomPanel] ADD CONSTRAINT [LegoBlockCustomPanel_FLegoPanelAngle_0] FOREIGN KEY ([PanelAngle]) REFERENCES [LegoPanelAngle] -CREATE INDEX LegoBlockCustomPanel_IPanelAngle on [LegoBlockCustomPanel] ([PanelAngle]) - - ALTER TABLE [LegoBlockCustomPanel] ADD CONSTRAINT [LegoBlockCustomPanel_FLegoBlock_0] FOREIGN KEY ([Block]) REFERENCES [LegoBlock] -CREATE INDEX LegoBlockCustomPanel_IBlock on [LegoBlockCustomPanel] ([Block]) - - ALTER TABLE [Детейл2] ADD CONSTRAINT [Детейл2_FДетейл_0] FOREIGN KEY ([Детейл_m0]) REFERENCES [Детейл] -CREATE INDEX Детейл2_IДетейл_m0 on [Детейл2] ([Детейл_m0]) - - ALTER TABLE [Детейл2] ADD CONSTRAINT [Детейл2_FДетейлНаследник_0] FOREIGN KEY ([Детейл_m1]) REFERENCES [ДетейлНаследник] -CREATE INDEX Детейл2_IДетейл_m1 on [Детейл2] ([Детейл_m1]) - - ALTER TABLE [Son] ADD CONSTRAINT [Son_FPerson_0] FOREIGN KEY ([Parent]) REFERENCES [Person] -CREATE INDEX Son_IParent on [Son] ([Parent]) - - ALTER TABLE [LegoBlockTopPanel] ADD CONSTRAINT [LegoBlockTopPanel_FLegoSocketStandard_0] FOREIGN KEY ([SocketStandard]) REFERENCES [LegoSocketStandard] -CREATE INDEX LegoBlockTopPanel_ISocketStandard on [LegoBlockTopPanel] ([SocketStandard]) - - ALTER TABLE [LegoBlockTopPanel] ADD CONSTRAINT [LegoBlockTopPanel_FLegoBlock_0] FOREIGN KEY ([Block]) REFERENCES [LegoBlock] -CREATE INDEX LegoBlockTopPanel_IBlock on [LegoBlockTopPanel] ([Block]) - - ALTER TABLE [ДетейлНаследник] ADD CONSTRAINT [ДетейлНаследник_FБазовыйКласс_0] FOREIGN KEY ([БазовыйКласс_m0]) REFERENCES [БазовыйКласс] -CREATE INDEX ДетейлНаследник_IБазовыйКласс_m0 on [ДетейлНаследник] ([БазовыйКласс_m0]) - - ALTER TABLE [ДетейлНаследник] ADD CONSTRAINT [ДетейлНаследник_FНаследник_0] FOREIGN KEY ([БазовыйКласс_m1]) REFERENCES [Наследник] -CREATE INDEX ДетейлНаследник_IБазовыйКласс_m1 on [ДетейлНаследник] ([БазовыйКласс_m1]) - - ALTER TABLE [DetailsClass2] ADD CONSTRAINT [DetailsClass2_FAgrClass2_0] FOREIGN KEY ([AgrClass2]) REFERENCES [AgrClass2] -CREATE INDEX DetailsClass2_IAgrClass2 on [DetailsClass2] ([AgrClass2]) - - ALTER TABLE [Книга] ADD CONSTRAINT [Книга_FАвтор_0] FOREIGN KEY ([Автор1]) REFERENCES [Автор] -CREATE INDEX Книга_IАвтор1 on [Книга] ([Автор1]) - - ALTER TABLE [Книга] ADD CONSTRAINT [Книга_FБиблиотека_0] FOREIGN KEY ([Библиотека1]) REFERENCES [Библиотека] -CREATE INDEX Книга_IБиблиотека1 on [Книга] ([Библиотека1]) - - ALTER TABLE [LegoDevice] ADD CONSTRAINT [LegoDevice_FLegoBlockColor_0] FOREIGN KEY ([Color]) REFERENCES [LegoBlockColor] -CREATE INDEX LegoDevice_IColor on [LegoDevice] ([Color]) - - ALTER TABLE [Наследник] ADD CONSTRAINT [Наследник_FMaster_0] FOREIGN KEY ([Master]) REFERENCES [Master] -CREATE INDEX Наследник_IMaster on [Наследник] ([Master]) - - ALTER TABLE [Наследник] ADD CONSTRAINT [Наследник_FМастер_0] FOREIGN KEY ([Мастер]) REFERENCES [Мастер] -CREATE INDEX Наследник_IМастер on [Наследник] ([Мастер]) - - ALTER TABLE [LegoBlockBottomPanel] ADD CONSTRAINT [LegoBlockBottomPanel_FLegoBlock_0] FOREIGN KEY ([Block]) REFERENCES [LegoBlock] -CREATE INDEX LegoBlockBottomPanel_IBlock on [LegoBlockBottomPanel] ([Block]) - - ALTER TABLE [Перелом] ADD CONSTRAINT [Перелом_FЛапа_0] FOREIGN KEY ([Лапа_m0]) REFERENCES [Лапа] -CREATE INDEX Перелом_IЛапа_m0 on [Перелом] ([Лапа_m0]) - - ALTER TABLE [Лапа] ADD CONSTRAINT [Лапа_FТипЛапы_0] FOREIGN KEY ([ТипЛапы_m0]) REFERENCES [ТипЛапы] -CREATE INDEX Лапа_IТипЛапы_m0 on [Лапа] ([ТипЛапы_m0]) - - ALTER TABLE [Лапа] ADD CONSTRAINT [Лапа_FКошка_0] FOREIGN KEY ([Кошка_m0]) REFERENCES [Кошка] -CREATE INDEX Лапа_IКошка_m0 on [Лапа] ([Кошка_m0]) - - ALTER TABLE [Кошка] ADD CONSTRAINT [Кошка_FПорода_0] FOREIGN KEY ([Порода_m0]) REFERENCES [Порода] -CREATE INDEX Кошка_IПорода_m0 on [Кошка] ([Порода_m0]) - - ALTER TABLE [STORMWEBSEARCH] ADD CONSTRAINT [STORMWEBSEARCH_FSTORMFILTERSETTING_0] FOREIGN KEY ([FilterSetting_m0]) REFERENCES [STORMFILTERSETTING] - - ALTER TABLE [STORMFILTERDETAIL] ADD CONSTRAINT [STORMFILTERDETAIL_FSTORMFILTERSETTING_0] FOREIGN KEY ([FilterSetting_m0]) REFERENCES [STORMFILTERSETTING] - - ALTER TABLE [STORMFILTERLOOKUP] ADD CONSTRAINT [STORMFILTERLOOKUP_FSTORMFILTERSETTING_0] FOREIGN KEY ([FilterSetting_m0]) REFERENCES [STORMFILTERSETTING] - - ALTER TABLE [STORMLG] ADD CONSTRAINT [STORMLG_FSTORMAG_0] FOREIGN KEY ([Group_m0]) REFERENCES [STORMAG] - - ALTER TABLE [STORMLG] ADD CONSTRAINT [STORMLG_FSTORMAG_1] FOREIGN KEY ([User_m0]) REFERENCES [STORMAG] - - ALTER TABLE [STORMAuEntity] ADD CONSTRAINT [STORMAuEntity_FSTORMAG_0] FOREIGN KEY ([User_m0]) REFERENCES [STORMAG] - - ALTER TABLE [STORMAuEntity] ADD CONSTRAINT [STORMAuEntity_FSTORMAuObjType_0] FOREIGN KEY ([ObjectType_m0]) REFERENCES [STORMAuObjType] - ALTER TABLE [STORMAuField] ADD CONSTRAINT [STORMAuField_FSTORMAuField_0] FOREIGN KEY ([MainChange_m0]) REFERENCES [STORMAuField] - ALTER TABLE [STORMAuField] ADD CONSTRAINT [STORMAuField_FSTORMAuEntity_0] FOREIGN KEY ([AuditEntity_m0]) REFERENCES [STORMAuEntity] diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/Oracle.create.sql b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/Oracle.create.sql index 6f1691e3..94a39ba0 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/Oracle.create.sql +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/Oracle.create.sql @@ -2,78 +2,60 @@ -CREATE TABLE "Лес" +CREATE TABLE "КлассСМножТипов" ( "primaryKey" RAW(16) NOT NULL, - "Название" NVARCHAR2(255) NULL, - - "Площадь" NUMBER(10) NULL, - - "Заповедник" NUMBER(1) NULL, + "PropertyBool" NUMBER(1) NULL, - "ДатаПослОсмотра" DATE NULL, + "PropertyDateTime" DATE NULL, - "Страна" RAW(16) NULL, + "PropertyDecimal" NUMBER(38) NULL, - PRIMARY KEY ("primaryKey") -) ; + "PropertyDouble" FLOAT(126) NULL, -CREATE TABLE "КлассСМножТипов" -( + "PropertyEnum" NVARCHAR2(6) NULL, - "primaryKey" RAW(16) NOT NULL, + "PropertyFloat" FLOAT(53) NULL, "PropertyGeography" CLOB NULL, - "PropertyEnum" NVARCHAR2(6) NULL, - - "PropertyBool" NUMBER(1) NULL, - "PropertyInt" NUMBER(10) NULL, - "PropertyDateTime" DATE NULL, - - "PropertyString" NVARCHAR2(255) NULL, - - "PropertyFloat" FLOAT(53) NULL, + "PropertyStormnetBlob" CLOB NULL, - "PropertyDouble" FLOAT(126) NULL, + "PropertyStormnetContact" CLOB NULL, - "PropertyDecimal" NUMBER(38) NULL, + "PropertyStormnetEvent" CLOB NULL, - "PropertySystemNullableDateTime" DATE NULL, + "PropertyStormnetFile" CLOB NULL, - "PropertySystemNullableInt" NUMBER(10) NULL, + "PropertyStormnetGeoData" CLOB NULL, - "PropertySystemNullableGuid" RAW(16) NULL, + "PropertyStormnetImage" CLOB NULL, - "PropertySystemNullableDecimal" NUMBER(38) NULL, + "PropertyStormnetKeyGuid" RAW(16) NULL, "PropStormnetNullableDateTime" DATE NULL, - "PropertyStormnetNullableInt" NUMBER(10) NULL, - - "PropertyStormnetKeyGuid" RAW(16) NULL, - "PropStormnetNullableDecimal" NUMBER(38) NULL, - "PropertyStormnetPartliedDate" NVARCHAR2(255) NULL, + "PropertyStormnetNullableInt" NUMBER(10) NULL, - "PropertyStormnetContact" CLOB NULL, + "PropertyStormnetPartliedDate" NVARCHAR2(255) NULL, - "PropertyStormnetBlob" CLOB NULL, + "PropertyStormnetWebFile" CLOB NULL, - "PropertyStormnetEvent" CLOB NULL, + "PropertyString" NVARCHAR2(255) NULL, - "PropertyStormnetGeoData" CLOB NULL, + "PropertySystemNullableDateTime" DATE NULL, - "PropertyStormnetImage" CLOB NULL, + "PropertySystemNullableDecimal" NUMBER(38) NULL, - "PropertyStormnetWebFile" CLOB NULL, + "PropertySystemNullableGuid" RAW(16) NULL, - "PropertyStormnetFile" CLOB NULL, + "PropertySystemNullableInt" NUMBER(10) NULL, PRIMARY KEY ("primaryKey") ) ; @@ -90,19 +72,38 @@ CREATE TABLE "Master" ) ; -CREATE TABLE "LegoPatent" +CREATE TABLE "Лес" ( "primaryKey" RAW(16) NOT NULL, - "Name" NVARCHAR2(255) NULL, + "ДатаПослОсмотра" DATE NULL, - "Date" DATE NULL, + "Заповедник" NUMBER(1) NULL, + + "Название" NVARCHAR2(255) NULL, + + "Площадь" NUMBER(10) NULL, + + "Страна" RAW(16) NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "LegoPatent" +( + + "primaryKey" RAW(16) NOT NULL, "Authors" NVARCHAR2(255) NULL, + "Date" DATE NULL, + "Description" NVARCHAR2(255) NULL, + "Name" NVARCHAR2(255) NULL, + "LegoBlock" RAW(16) NULL, "LegoDevice" RAW(16) NULL, @@ -218,12 +219,12 @@ CREATE TABLE "Driver" "primaryKey" RAW(16) NOT NULL, - "Name" NVARCHAR2(255) NULL, - "CarCount" NUMBER(10) NULL, "Documents" NUMBER(1) NULL, + "Name" NVARCHAR2(255) NULL, + PRIMARY KEY ("primaryKey") ) ; @@ -256,43 +257,6 @@ CREATE TABLE "Журнал" ) ; -CREATE TABLE "Медведь" -( - - "primaryKey" RAW(16) NOT NULL, - - "ПолеБС" NVARCHAR2(255) NULL, - - "ПорядковыйНомер" NUMBER(10) NULL, - - "Вес" NUMBER(10) NULL, - - "ЦветГлаз" NVARCHAR2(255) NULL, - - "Пол" NVARCHAR2(9) NULL, - - "ДатаРождения" DATE NULL, - - "CreateTime" DATE NULL, - - "Creator" NVARCHAR2(255) NULL, - - "EditTime" DATE NULL, - - "Editor" NVARCHAR2(255) NULL, - - "ЛесОбитания" RAW(16) NULL, - - "Папа" RAW(16) NULL, - - "Страна" RAW(16) NULL, - - "Мама" RAW(16) NULL, - - PRIMARY KEY ("primaryKey") -) ; - - CREATE TABLE "TestMaster" ( @@ -337,18 +301,18 @@ CREATE TABLE "LegoBlock" "primaryKey" RAW(16) NOT NULL, - "Width" NUMBER(10) NULL, - - "Height" NUMBER(10) NULL, + "Configuration" NVARCHAR2(255) NULL, "Depth" NUMBER(10) NULL, - "Configuration" NVARCHAR2(255) NULL, + "Height" NUMBER(10) NULL, - "Name" NVARCHAR2(255) NULL, + "Width" NUMBER(10) NULL, "BlockId" NUMBER(10) NULL, + "Name" NVARCHAR2(255) NULL, + "Material" RAW(16) NULL, "Color" RAW(16) NULL, @@ -357,42 +321,15 @@ CREATE TABLE "LegoBlock" ) ; -CREATE TABLE "Берлога" -( - - "primaryKey" RAW(16) NOT NULL, - - "ПолеБС" NVARCHAR2(255) NULL, - - "Наименование" NVARCHAR2(255) NULL, - - "Комфортность" NUMBER(10) NULL, - - "Заброшена" NUMBER(1) NULL, - - "Сертификат" CLOB NULL, - - "CertString" CLOB NULL, - - "ЛесРасположения" RAW(16) NULL, - - "ДляКакойПороды" RAW(16) NULL, - - "Медведь" RAW(16) NOT NULL, - - PRIMARY KEY ("primaryKey") -) ; - - CREATE TABLE "LegoBlockColor" ( "primaryKey" RAW(16) NOT NULL, - "Name" NVARCHAR2(255) NULL, - "ColorNumber" NUMBER(10) NULL, + "Name" NVARCHAR2(255) NULL, + PRIMARY KEY ("primaryKey") ) ; @@ -413,10 +350,10 @@ CREATE TABLE "Котенок" "primaryKey" RAW(16) NOT NULL, - "КличкаКотенка" NVARCHAR2(255) NULL, - "Глупость" NUMBER(10) NULL, + "КличкаКотенка" NVARCHAR2(255) NULL, + "Кошка_m0" RAW(16) NOT NULL, PRIMARY KEY ("primaryKey") @@ -466,23 +403,6 @@ CREATE TABLE "DetailsClass1" ) ; -CREATE TABLE "Car" -( - - "primaryKey" RAW(16) NOT NULL, - - "Number" NVARCHAR2(255) NULL, - - "Model" NVARCHAR2(255) NULL, - - "TipCar" NVARCHAR2(9) NULL, - - "driver" RAW(16) NOT NULL, - - PRIMARY KEY ("primaryKey") -) ; - - CREATE TABLE "LegoBlockCustomPanel" ( @@ -505,10 +425,10 @@ CREATE TABLE "ТипЛапы" "primaryKey" RAW(16) NOT NULL, - "Название" NVARCHAR2(255) NULL, - "Актуально" NUMBER(1) NULL, + "Название" NVARCHAR2(255) NULL, + PRIMARY KEY ("primaryKey") ) ; @@ -529,10 +449,10 @@ CREATE TABLE "LegoPanelAngle" "primaryKey" RAW(16) NOT NULL, - "Name" NVARCHAR2(255) NULL, - "Angle" NUMBER(10) NULL, + "Name" NVARCHAR2(255) NULL, + PRIMARY KEY ("primaryKey") ) ; @@ -627,10 +547,10 @@ CREATE TABLE "ТипПороды" "primaryKey" RAW(16) NOT NULL, - "Название" NVARCHAR2(255) NULL, - "ДатаРегистрации" DATE NULL, + "Название" NVARCHAR2(255) NULL, + PRIMARY KEY ("primaryKey") ) ; @@ -640,10 +560,10 @@ CREATE TABLE "LegoBlockTopPanel" "primaryKey" RAW(16) NOT NULL, - "WidthCount" NUMBER(10) NULL, - "HeightCount" NUMBER(10) NULL, + "WidthCount" NUMBER(10) NULL, + "SocketStandard" RAW(16) NULL, "Block" RAW(16) NOT NULL, @@ -717,10 +637,10 @@ CREATE TABLE "LegoDevice" "Electricity" NUMBER(1) NULL, - "Name" NVARCHAR2(255) NULL, - "BlockId" NUMBER(10) NULL, + "Name" NVARCHAR2(255) NULL, + "Color" RAW(16) NULL, PRIMARY KEY ("primaryKey") @@ -738,10 +658,10 @@ CREATE TABLE "Наследник" "Свойство2" NUMBER(10) NULL, - "Master" RAW(16) NULL, - "Мастер" RAW(16) NULL, + "Master" RAW(16) NULL, + PRIMARY KEY ("primaryKey") ) ; @@ -751,10 +671,10 @@ CREATE TABLE "LegoBlockBottomPanel" "primaryKey" RAW(16) NOT NULL, - "WidthCount" NUMBER(10) NULL, - "HeightCount" NUMBER(10) NULL, + "WidthCount" NUMBER(10) NULL, + "Block" RAW(16) NOT NULL, PRIMARY KEY ("primaryKey") @@ -768,55 +688,136 @@ CREATE TABLE "ДочернийКласс" "ChildProperty" NVARCHAR2(255) NULL, - "PropertyGeography" CLOB NULL, - - "PropertyEnum" NVARCHAR2(6) NULL, - "PropertyBool" NUMBER(1) NULL, - "PropertyInt" NUMBER(10) NULL, - "PropertyDateTime" DATE NULL, - "PropertyString" NVARCHAR2(255) NULL, + "PropertyDecimal" NUMBER(38) NULL, + + "PropertyDouble" FLOAT(126) NULL, + + "PropertyEnum" NVARCHAR2(6) NULL, "PropertyFloat" FLOAT(53) NULL, - "PropertyDouble" FLOAT(126) NULL, + "PropertyGeography" CLOB NULL, - "PropertyDecimal" NUMBER(38) NULL, + "PropertyInt" NUMBER(10) NULL, - "PropertySystemNullableDateTime" DATE NULL, + "PropertyStormnetBlob" CLOB NULL, - "PropertySystemNullableInt" NUMBER(10) NULL, + "PropertyStormnetContact" CLOB NULL, - "PropertySystemNullableGuid" RAW(16) NULL, + "PropertyStormnetEvent" CLOB NULL, - "PropertySystemNullableDecimal" NUMBER(38) NULL, + "PropertyStormnetFile" CLOB NULL, - "PropStormnetNullableDateTime" DATE NULL, + "PropertyStormnetGeoData" CLOB NULL, - "PropertyStormnetNullableInt" NUMBER(10) NULL, + "PropertyStormnetImage" CLOB NULL, "PropertyStormnetKeyGuid" RAW(16) NULL, + "PropStormnetNullableDateTime" DATE NULL, + "PropStormnetNullableDecimal" NUMBER(38) NULL, + "PropertyStormnetNullableInt" NUMBER(10) NULL, + "PropertyStormnetPartliedDate" NVARCHAR2(255) NULL, - "PropertyStormnetContact" CLOB NULL, + "PropertyStormnetWebFile" CLOB NULL, - "PropertyStormnetBlob" CLOB NULL, + "PropertyString" NVARCHAR2(255) NULL, - "PropertyStormnetEvent" CLOB NULL, + "PropertySystemNullableDateTime" DATE NULL, - "PropertyStormnetGeoData" CLOB NULL, + "PropertySystemNullableDecimal" NUMBER(38) NULL, - "PropertyStormnetImage" CLOB NULL, + "PropertySystemNullableGuid" RAW(16) NULL, - "PropertyStormnetWebFile" CLOB NULL, + "PropertySystemNullableInt" NUMBER(10) NULL, - "PropertyStormnetFile" CLOB NULL, + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "Медведь" +( + + "primaryKey" RAW(16) NOT NULL, + + "Вес" NUMBER(10) NULL, + + "ДатаРождения" DATE NULL, + + "Пол" NVARCHAR2(9) NULL, + + "ПолеБС" NVARCHAR2(255) NULL, + + "ПорядковыйНомер" NUMBER(10) NULL, + + "ЦветГлаз" NVARCHAR2(255) NULL, + + "CreateTime" DATE NULL, + + "Creator" NVARCHAR2(255) NULL, + + "Editor" NVARCHAR2(255) NULL, + + "EditTime" DATE NULL, + + "ЛесОбитания" RAW(16) NULL, + + "Мама" RAW(16) NULL, + + "Папа" RAW(16) NULL, + + "Страна" RAW(16) NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "Берлога" +( + + "primaryKey" RAW(16) NOT NULL, + + "Заброшена" NUMBER(1) NULL, + + "Комфортность" NUMBER(10) NULL, + + "Наименование" NVARCHAR2(255) NULL, + + "ПолеБС" NVARCHAR2(255) NULL, + + "Сертификат" CLOB NULL, + + "CertString" CLOB NULL, + + "ЛесРасположения" RAW(16) NULL, + + "ДляКакойПороды" RAW(16) NULL, + + "Медведь" RAW(16) NOT NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "Car" +( + + "primaryKey" RAW(16) NOT NULL, + + "Model" NVARCHAR2(255) NULL, + + "Number" NVARCHAR2(255) NULL, + + "TipCar" NVARCHAR2(9) NULL, + + "driver" RAW(16) NOT NULL, PRIMARY KEY ("primaryKey") ) ; @@ -836,28 +837,29 @@ CREATE TABLE "Перелом" PRIMARY KEY ("primaryKey") ) ; + CREATE TABLE "Лапа" ( "primaryKey" RAW(16) NOT NULL, - "Цвет" NVARCHAR2(255) NULL, - - "Размер" NUMBER(10) NULL, + "БылиЛиПереломы" NUMBER(1) NULL, "ДатаРождения" DATE NULL, - "БылиЛиПереломы" NUMBER(1) NULL, + "Номер" NUMBER(10) NULL, - "Сторона" NVARCHAR2(11) NULL, + "Размер" NUMBER(10) NULL, - "Номер" NUMBER(10) NULL, + "РазмерDecimal" NUMBER(38) NULL, "РазмерDouble" FLOAT(126) NULL, "РазмерFloat" FLOAT(53) NULL, - "РазмерDecimal" NUMBER(38) NULL, + "Сторона" NVARCHAR2(11) NULL, + + "Цвет" NVARCHAR2(255) NULL, "ТипЛапы_m0" RAW(16) NULL, @@ -872,25 +874,151 @@ CREATE TABLE "Кошка" "primaryKey" RAW(16) NOT NULL, - "Кличка" NVARCHAR2(255) NULL, + "Агрессивная" NUMBER(1) NULL, "ДатаРождения" DATE NULL, - "Тип" NVARCHAR2(11) NULL, - - "ПородаСтрокой" NVARCHAR2(255) NULL, - "Агрессивная" NUMBER(1) NULL, + "Кличка" NVARCHAR2(255) NULL, "УсыСлева" NUMBER(10) NULL, "УсыСправа" NUMBER(10) NULL, + "ПородаСтрокой" NVARCHAR2(255) NULL, + + "Тип" NVARCHAR2(11) NULL, + "Порода_m0" RAW(16) NOT NULL, PRIMARY KEY ("primaryKey") ) ; +CREATE TABLE "AgregatorWithSameMAndD" +( + + "primaryKey" RAW(16) NOT NULL, + + "Name" NVARCHAR2(255) NULL, + + "Master" RAW(16) NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "DetailAndMaster" +( + + "primaryKey" RAW(16) NOT NULL, + + "Name" NVARCHAR2(255) NULL, + + "Agregator" RAW(16) NOT NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "TestConfiguration" +( + + "primaryKey" RAW(16) NOT NULL, + + "Name" NVARCHAR2(255) NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "TestClass" +( + + "primaryKey" RAW(16) NOT NULL, + + "Name" NVARCHAR2(255) NULL, + + "FirstLevel" RAW(16) NOT NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "ThirdLevel" +( + + "primaryKey" RAW(16) NOT NULL, + + "Name" NVARCHAR2(255) NULL, + + "TestClass" RAW(16) NOT NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "SecondLevel1" +( + + "primaryKey" RAW(16) NOT NULL, + + "Name" NVARCHAR2(255) NULL, + + "FirstLevel" RAW(16) NOT NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "FirstLevel" +( + + "primaryKey" RAW(16) NOT NULL, + + "Name" NVARCHAR2(255) NULL, + + "TestConfiguration" RAW(16) NOT NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "SecondLevel2" +( + + "primaryKey" RAW(16) NOT NULL, + + "Name" NVARCHAR2(255) NULL, + + "SecondLevel1_m0" RAW(16) NULL, + + "SecondLevel1_m1" RAW(16) NULL, + + "FirstLevel" RAW(16) NOT NULL, + + PRIMARY KEY ("primaryKey") +) ; + + +CREATE TABLE "TestAssociation" +( + + "primaryKey" RAW(16) NOT NULL, + + "Name2" NVARCHAR2(255) NULL, + + "Name" NVARCHAR2(255) NULL, + + "SecondLevel1_m0" RAW(16) NULL, + + "SecondLevel1_m1" RAW(16) NULL, + + "FirstLevel" RAW(16) NOT NULL, + + PRIMARY KEY ("primaryKey") +) ; + + CREATE TABLE "STORMNETLOCKDATA" ( @@ -1240,7 +1368,6 @@ CREATE INDEX "TestDetailWithCicle_ITest_3425" on "TestDetailWithCicle" ("TestMas ALTER TABLE "Детейл" ADD CONSTRAINT "Детейл_FБазов_7676" FOREIGN KEY ("БазовыйКласс_m0") REFERENCES "БазовыйКласс" ("primaryKey"); - CREATE INDEX "Детейл_IБазов_4616" on "Детейл" ("БазовыйКласс_m0"); ALTER TABLE "Детейл" @@ -1258,26 +1385,6 @@ ALTER TABLE "Журнал" CREATE INDEX "Журнал_IБибли_1176" on "Журнал" ("Библиотека2"); -ALTER TABLE "Медведь" - ADD CONSTRAINT "Медведь_FЛес_0" FOREIGN KEY ("ЛесОбитания") REFERENCES "Лес" ("primaryKey"); - -CREATE INDEX "Медведь_IЛесО_5757" on "Медведь" ("ЛесОбитания"); - -ALTER TABLE "Медведь" - ADD CONSTRAINT "Медведь_FМедв_4334" FOREIGN KEY ("Папа") REFERENCES "Медведь" ("primaryKey"); - -CREATE INDEX "Медведь_IПапа" on "Медведь" ("Папа"); - -ALTER TABLE "Медведь" - ADD CONSTRAINT "Медведь_FСтрана_0" FOREIGN KEY ("Страна") REFERENCES "Страна" ("primaryKey"); - -CREATE INDEX "Медведь_IСтрана" on "Медведь" ("Страна"); - -ALTER TABLE "Медведь" - ADD CONSTRAINT "Медведь_FМедв_4335" FOREIGN KEY ("Мама") REFERENCES "Медведь" ("primaryKey"); - -CREATE INDEX "Медведь_IМама" on "Медведь" ("Мама"); - ALTER TABLE "MainClass" ADD CONSTRAINT "MainClass_FAgrClass1_0" FOREIGN KEY ("AgrClass1") REFERENCES "AgrClass1" ("primaryKey"); @@ -1303,21 +1410,6 @@ ALTER TABLE "LegoBlock" CREATE INDEX "LegoBlock_IColor" on "LegoBlock" ("Color"); -ALTER TABLE "Берлога" - ADD CONSTRAINT "Берлога_FЛес_0" FOREIGN KEY ("ЛесРасположения") REFERENCES "Лес" ("primaryKey"); - -CREATE INDEX "Берлога_IЛесР_1411" on "Берлога" ("ЛесРасположения"); - -ALTER TABLE "Берлога" - ADD CONSTRAINT "Берлога_FПорода_0" FOREIGN KEY ("ДляКакойПороды") REFERENCES "Порода" ("primaryKey"); - -CREATE INDEX "Берлога_IДляК_2329" on "Берлога" ("ДляКакойПороды"); - -ALTER TABLE "Берлога" - ADD CONSTRAINT "Берлога_FМедв_5600" FOREIGN KEY ("Медведь") REFERENCES "Медведь" ("primaryKey"); - -CREATE INDEX "Берлога_IМедведь" on "Берлога" ("Медведь"); - ALTER TABLE "Котенок" ADD CONSTRAINT "Котенок_FКошка_0" FOREIGN KEY ("Кошка_m0") REFERENCES "Кошка" ("primaryKey"); @@ -1343,11 +1435,6 @@ ALTER TABLE "DetailsClass1" CREATE INDEX "DetailsClass1_IAgrClass1" on "DetailsClass1" ("AgrClass1"); -ALTER TABLE "Car" - ADD CONSTRAINT "Car_FDriver_0" FOREIGN KEY ("driver") REFERENCES "Driver" ("primaryKey"); - -CREATE INDEX "Car_Idriver" on "Car" ("driver"); - ALTER TABLE "LegoBlockCustomPanel" ADD CONSTRAINT "LegoBlockCustomPanel_FLeg_5205" FOREIGN KEY ("PanelAngle") REFERENCES "LegoPanelAngle" ("primaryKey"); @@ -1383,7 +1470,6 @@ ALTER TABLE "LegoBlockTopPanel" CREATE INDEX "LegoBlockTopPanel_IBlock" on "LegoBlockTopPanel" ("Block"); - ALTER TABLE "ДетейлНаследник" ADD CONSTRAINT "ДетейлНаслед_2684" FOREIGN KEY ("БазовыйКласс_m0") REFERENCES "БазовыйКласс" ("primaryKey"); @@ -1415,20 +1501,60 @@ ALTER TABLE "LegoDevice" CREATE INDEX "LegoDevice_IColor" on "LegoDevice" ("Color"); ALTER TABLE "Наследник" - ADD CONSTRAINT "Наследник_FMaster_0" FOREIGN KEY ("Master") REFERENCES "Master" ("primaryKey"); + ADD CONSTRAINT "Наследник_FМас_278" FOREIGN KEY ("Мастер") REFERENCES "Мастер" ("primaryKey"); -CREATE INDEX "Наследник_IMaster" on "Наследник" ("Master"); +CREATE INDEX "Наследник_IМа_7239" on "Наследник" ("Мастер"); ALTER TABLE "Наследник" - ADD CONSTRAINT "Наследник_FМас_278" FOREIGN KEY ("Мастер") REFERENCES "Мастер" ("primaryKey"); + ADD CONSTRAINT "Наследник_FMaster_0" FOREIGN KEY ("Master") REFERENCES "Master" ("primaryKey"); -CREATE INDEX "Наследник_IМа_7239" on "Наследник" ("Мастер"); +CREATE INDEX "Наследник_IMaster" on "Наследник" ("Master"); ALTER TABLE "LegoBlockBottomPanel" ADD CONSTRAINT "LegoBlockBottomPanel_FLeg_6473" FOREIGN KEY ("Block") REFERENCES "LegoBlock" ("primaryKey"); CREATE INDEX "LegoBlockBottomPanel_IBlock" on "LegoBlockBottomPanel" ("Block"); +ALTER TABLE "Медведь" + ADD CONSTRAINT "Медведь_FЛес_0" FOREIGN KEY ("ЛесОбитания") REFERENCES "Лес" ("primaryKey"); + +CREATE INDEX "Медведь_IЛесО_5757" on "Медведь" ("ЛесОбитания"); + +ALTER TABLE "Медведь" + ADD CONSTRAINT "Медведь_FМедв_4334" FOREIGN KEY ("Мама") REFERENCES "Медведь" ("primaryKey"); + +CREATE INDEX "Медведь_IМама" on "Медведь" ("Мама"); + +ALTER TABLE "Медведь" + ADD CONSTRAINT "Медведь_FМедв_4335" FOREIGN KEY ("Папа") REFERENCES "Медведь" ("primaryKey"); + +CREATE INDEX "Медведь_IПапа" on "Медведь" ("Папа"); + +ALTER TABLE "Медведь" + ADD CONSTRAINT "Медведь_FСтрана_0" FOREIGN KEY ("Страна") REFERENCES "Страна" ("primaryKey"); + +CREATE INDEX "Медведь_IСтрана" on "Медведь" ("Страна"); + +ALTER TABLE "Берлога" + ADD CONSTRAINT "Берлога_FЛес_0" FOREIGN KEY ("ЛесРасположения") REFERENCES "Лес" ("primaryKey"); + +CREATE INDEX "Берлога_IЛесР_1411" on "Берлога" ("ЛесРасположения"); + +ALTER TABLE "Берлога" + ADD CONSTRAINT "Берлога_FПорода_0" FOREIGN KEY ("ДляКакойПороды") REFERENCES "Порода" ("primaryKey"); + +CREATE INDEX "Берлога_IДляК_2329" on "Берлога" ("ДляКакойПороды"); + +ALTER TABLE "Берлога" + ADD CONSTRAINT "Берлога_FМедв_5600" FOREIGN KEY ("Медведь") REFERENCES "Медведь" ("primaryKey"); + +CREATE INDEX "Берлога_IМедведь" on "Берлога" ("Медведь"); + +ALTER TABLE "Car" + ADD CONSTRAINT "Car_FDriver_0" FOREIGN KEY ("driver") REFERENCES "Driver" ("primaryKey"); + +CREATE INDEX "Car_Idriver" on "Car" ("driver"); + ALTER TABLE "Перелом" ADD CONSTRAINT "Перелом_FЛапа_0" FOREIGN KEY ("Лапа_m0") REFERENCES "Лапа" ("primaryKey"); @@ -1449,6 +1575,66 @@ ALTER TABLE "Кошка" CREATE INDEX "Кошка_IПорода_m0" on "Кошка" ("Порода_m0"); +ALTER TABLE "AgregatorWithSameMAndD" + ADD CONSTRAINT "AgregatorWithSameMAndD_FDe_217" FOREIGN KEY ("Master") REFERENCES "DetailAndMaster" ("primaryKey"); + +CREATE INDEX "AgregatorWithSameMAndD_IMaster" on "AgregatorWithSameMAndD" ("Master"); + +ALTER TABLE "DetailAndMaster" + ADD CONSTRAINT "DetailAndMaster_FAgregator_188" FOREIGN KEY ("Agregator") REFERENCES "AgregatorWithSameMAndD" ("primaryKey"); + +CREATE INDEX "DetailAndMaster_IAgregator" on "DetailAndMaster" ("Agregator"); + +ALTER TABLE "TestClass" + ADD CONSTRAINT "TestClass_FFirstLevel_0" FOREIGN KEY ("FirstLevel") REFERENCES "FirstLevel" ("primaryKey"); + +CREATE INDEX "TestClass_IFirstLevel" on "TestClass" ("FirstLevel"); + +ALTER TABLE "ThirdLevel" + ADD CONSTRAINT "ThirdLevel_FTestClass_0" FOREIGN KEY ("TestClass") REFERENCES "TestClass" ("primaryKey"); + +CREATE INDEX "ThirdLevel_ITestClass" on "ThirdLevel" ("TestClass"); + +ALTER TABLE "SecondLevel1" + ADD CONSTRAINT "SecondLevel1_FFirstLevel_0" FOREIGN KEY ("FirstLevel") REFERENCES "FirstLevel" ("primaryKey"); + +CREATE INDEX "SecondLevel1_IFirstLevel" on "SecondLevel1" ("FirstLevel"); + +ALTER TABLE "FirstLevel" + ADD CONSTRAINT "FirstLevel_FTestConfigura_1288" FOREIGN KEY ("TestConfiguration") REFERENCES "TestConfiguration" ("primaryKey"); + +CREATE INDEX "FirstLevel_ITestConfiguration" on "FirstLevel" ("TestConfiguration"); + +ALTER TABLE "SecondLevel2" + ADD CONSTRAINT "SecondLevel2_FSecondLevel1_0" FOREIGN KEY ("SecondLevel1_m0") REFERENCES "SecondLevel1" ("primaryKey"); + +CREATE INDEX "SecondLevel2_ISecondLevel1_m0" on "SecondLevel2" ("SecondLevel1_m0"); + +ALTER TABLE "SecondLevel2" + ADD CONSTRAINT "SecondLevel2_FTestClass_0" FOREIGN KEY ("SecondLevel1_m1") REFERENCES "TestClass" ("primaryKey"); + +CREATE INDEX "SecondLevel2_ISecondLevel1_m1" on "SecondLevel2" ("SecondLevel1_m1"); + +ALTER TABLE "SecondLevel2" + ADD CONSTRAINT "SecondLevel2_FFirstLevel_0" FOREIGN KEY ("FirstLevel") REFERENCES "FirstLevel" ("primaryKey"); + +CREATE INDEX "SecondLevel2_IFirstLevel" on "SecondLevel2" ("FirstLevel"); + +ALTER TABLE "TestAssociation" + ADD CONSTRAINT "TestAssociation_FSecondLe_2905" FOREIGN KEY ("SecondLevel1_m0") REFERENCES "SecondLevel1" ("primaryKey"); + +CREATE INDEX "TestAssociation_ISecondLe_6355" on "TestAssociation" ("SecondLevel1_m0"); + +ALTER TABLE "TestAssociation" + ADD CONSTRAINT "TestAssociation_FTestClass_0" FOREIGN KEY ("SecondLevel1_m1") REFERENCES "TestClass" ("primaryKey"); + +CREATE INDEX "TestAssociation_ISecondLe_6356" on "TestAssociation" ("SecondLevel1_m1"); + +ALTER TABLE "TestAssociation" + ADD CONSTRAINT "TestAssociation_FFirstLevel_0" FOREIGN KEY ("FirstLevel") REFERENCES "FirstLevel" ("primaryKey"); + +CREATE INDEX "TestAssociation_IFirstLevel" on "TestAssociation" ("FirstLevel"); + ALTER TABLE "STORMWEBSEARCH" ADD CONSTRAINT "STORMWEBSEARCH_FSTORMFILT_6521" FOREIGN KEY ("FilterSetting_m0") REFERENCES "STORMFILTERSETTING" ("primaryKey"); diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/PostgreSql.create.sql b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/PostgreSql.create.sql index c1c08a94..dba4887b 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/PostgreSql.create.sql +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/PostgreSql.create.sql @@ -3,43 +3,33 @@ -CREATE TABLE Лес ( - primaryKey UUID NOT NULL, - Название VARCHAR(255) NULL, - Площадь INT NULL, - Заповедник BOOLEAN NULL, - ДатаПослОсмотра TIMESTAMP(3) NULL, - Страна UUID NULL, - PRIMARY KEY (primaryKey)); - - CREATE TABLE КлассСМножТипов ( primaryKey UUID NOT NULL, - PropertyGeography GEOMETRY NULL, - PropertyEnum VARCHAR(6) NULL, PropertyBool BOOLEAN NULL, - PropertyInt INT NULL, PropertyDateTime TIMESTAMP(3) NULL, - PropertyString VARCHAR(255) NULL, - PropertyFloat REAL NULL, - PropertyDouble DOUBLE PRECISION NULL, PropertyDecimal DECIMAL NULL, - PropertySystemNullableDateTime TIMESTAMP(3) NULL, - PropertySystemNullableInt INT NULL, - PropertySystemNullableGuid UUID NULL, - PropertySystemNullableDecimal DECIMAL NULL, - PropStormnetNullableDateTime TIMESTAMP(3) NULL, - PropertyStormnetNullableInt INT NULL, - PropertyStormnetKeyGuid UUID NULL, - PropStormnetNullableDecimal DECIMAL NULL, - PropertyStormnetPartliedDate VARCHAR(255) NULL, - PropertyStormnetContact TEXT NULL, + PropertyDouble DOUBLE PRECISION NULL, + PropertyEnum VARCHAR(6) NULL, + PropertyFloat REAL NULL, + PropertyGeography GEOMETRY NULL, + PropertyInt INT NULL, PropertyStormnetBlob TEXT NULL, + PropertyStormnetContact TEXT NULL, PropertyStormnetEvent TEXT NULL, + PropertyStormnetFile TEXT NULL, PropertyStormnetGeoData TEXT NULL, PropertyStormnetImage TEXT NULL, + PropertyStormnetKeyGuid UUID NULL, + PropStormnetNullableDateTime TIMESTAMP(3) NULL, + PropStormnetNullableDecimal DECIMAL NULL, + PropertyStormnetNullableInt INT NULL, + PropertyStormnetPartliedDate VARCHAR(255) NULL, PropertyStormnetWebFile TEXT NULL, - PropertyStormnetFile TEXT NULL, + PropertyString VARCHAR(255) NULL, + PropertySystemNullableDateTime TIMESTAMP(3) NULL, + PropertySystemNullableDecimal DECIMAL NULL, + PropertySystemNullableGuid UUID NULL, + PropertySystemNullableInt INT NULL, PRIMARY KEY (primaryKey)); @@ -49,12 +39,22 @@ CREATE TABLE Master ( PRIMARY KEY (primaryKey)); +CREATE TABLE Лес ( + primaryKey UUID NOT NULL, + ДатаПослОсмотра TIMESTAMP(3) NULL, + Заповедник BOOLEAN NULL, + Название VARCHAR(255) NULL, + Площадь INT NULL, + Страна UUID NULL, + PRIMARY KEY (primaryKey)); + + CREATE TABLE LegoPatent ( primaryKey UUID NOT NULL, - Name VARCHAR(255) NULL, - Date TIMESTAMP(3) NULL, Authors VARCHAR(255) NULL, + Date TIMESTAMP(3) NULL, Description VARCHAR(255) NULL, + Name VARCHAR(255) NULL, LegoBlock UUID NULL, LegoDevice UUID NULL, PRIMARY KEY (primaryKey)); @@ -117,9 +117,9 @@ CREATE TABLE Детейл ( CREATE TABLE Driver ( primaryKey UUID NOT NULL, - Name VARCHAR(255) NULL, CarCount INT NULL, Documents BOOLEAN NULL, + Name VARCHAR(255) NULL, PRIMARY KEY (primaryKey)); @@ -138,25 +138,6 @@ CREATE TABLE Журнал ( PRIMARY KEY (primaryKey)); -CREATE TABLE Медведь ( - primaryKey UUID NOT NULL, - ПолеБС VARCHAR(255) NULL, - ПорядковыйНомер INT NULL, - Вес INT NULL, - ЦветГлаз VARCHAR(255) NULL, - Пол VARCHAR(9) NULL, - ДатаРождения TIMESTAMP(3) NULL, - CreateTime TIMESTAMP(3) NULL, - Creator VARCHAR(255) NULL, - EditTime TIMESTAMP(3) NULL, - Editor VARCHAR(255) NULL, - ЛесОбитания UUID NULL, - Папа UUID NULL, - Страна UUID NULL, - Мама UUID NULL, - PRIMARY KEY (primaryKey)); - - CREATE TABLE TestMaster ( primaryKey UUID NOT NULL, TestMasterName VARCHAR(255) NULL, @@ -180,35 +161,21 @@ CREATE TABLE Порода ( CREATE TABLE LegoBlock ( primaryKey UUID NOT NULL, - Width INT NULL, - Height INT NULL, - Depth INT NULL, Configuration VARCHAR(255) NULL, - Name VARCHAR(255) NULL, + Depth INT NULL, + Height INT NULL, + Width INT NULL, BlockId INT NULL, + Name VARCHAR(255) NULL, Material UUID NULL, Color UUID NULL, PRIMARY KEY (primaryKey)); -CREATE TABLE Берлога ( - primaryKey UUID NOT NULL, - ПолеБС VARCHAR(255) NULL, - Наименование VARCHAR(255) NULL, - Комфортность INT NULL, - Заброшена BOOLEAN NULL, - Сертификат TEXT NULL, - CertString TEXT NULL, - ЛесРасположения UUID NULL, - ДляКакойПороды UUID NULL, - Медведь UUID NOT NULL, - PRIMARY KEY (primaryKey)); - - CREATE TABLE LegoBlockColor ( primaryKey UUID NOT NULL, - Name VARCHAR(255) NULL, ColorNumber INT NULL, + Name VARCHAR(255) NULL, PRIMARY KEY (primaryKey)); @@ -220,8 +187,8 @@ CREATE TABLE ПоставщикКниг ( CREATE TABLE Котенок ( primaryKey UUID NOT NULL, - КличкаКотенка VARCHAR(255) NULL, Глупость INT NULL, + КличкаКотенка VARCHAR(255) NULL, Кошка_m0 UUID NOT NULL, PRIMARY KEY (primaryKey)); @@ -249,15 +216,6 @@ CREATE TABLE DetailsClass1 ( PRIMARY KEY (primaryKey)); -CREATE TABLE Car ( - primaryKey UUID NOT NULL, - Number VARCHAR(255) NULL, - Model VARCHAR(255) NULL, - TipCar VARCHAR(9) NULL, - driver UUID NOT NULL, - PRIMARY KEY (primaryKey)); - - CREATE TABLE LegoBlockCustomPanel ( primaryKey UUID NOT NULL, Orientation VARCHAR(255) NULL, @@ -269,8 +227,8 @@ CREATE TABLE LegoBlockCustomPanel ( CREATE TABLE ТипЛапы ( primaryKey UUID NOT NULL, - Название VARCHAR(255) NULL, Актуально BOOLEAN NULL, + Название VARCHAR(255) NULL, PRIMARY KEY (primaryKey)); @@ -282,8 +240,8 @@ CREATE TABLE AgrClass1 ( CREATE TABLE LegoPanelAngle ( primaryKey UUID NOT NULL, - Name VARCHAR(255) NULL, Angle INT NULL, + Name VARCHAR(255) NULL, PRIMARY KEY (primaryKey)); @@ -335,15 +293,15 @@ CREATE TABLE AgrClass2 ( CREATE TABLE ТипПороды ( primaryKey UUID NOT NULL, - Название VARCHAR(255) NULL, ДатаРегистрации TIMESTAMP(3) NULL, + Название VARCHAR(255) NULL, PRIMARY KEY (primaryKey)); CREATE TABLE LegoBlockTopPanel ( primaryKey UUID NOT NULL, - WidthCount INT NULL, HeightCount INT NULL, + WidthCount INT NULL, SocketStandard UUID NULL, Block UUID NOT NULL, PRIMARY KEY (primaryKey)); @@ -383,8 +341,8 @@ CREATE TABLE LegoDevice ( primaryKey UUID NOT NULL, Description VARCHAR(255) NULL, Electricity BOOLEAN NULL, - Name VARCHAR(255) NULL, BlockId INT NULL, + Name VARCHAR(255) NULL, Color UUID NULL, PRIMARY KEY (primaryKey)); @@ -394,15 +352,15 @@ CREATE TABLE Наследник ( Свойство DOUBLE PRECISION NULL, Свойство1 VARCHAR(255) NULL, Свойство2 INT NULL, - Master UUID NULL, Мастер UUID NULL, + Master UUID NULL, PRIMARY KEY (primaryKey)); CREATE TABLE LegoBlockBottomPanel ( primaryKey UUID NOT NULL, - WidthCount INT NULL, HeightCount INT NULL, + WidthCount INT NULL, Block UUID NOT NULL, PRIMARY KEY (primaryKey)); @@ -410,31 +368,73 @@ CREATE TABLE LegoBlockBottomPanel ( CREATE TABLE ДочернийКласс ( primaryKey UUID NOT NULL, ChildProperty VARCHAR(255) NULL, - PropertyGeography GEOMETRY NULL, - PropertyEnum VARCHAR(6) NULL, PropertyBool BOOLEAN NULL, - PropertyInt INT NULL, PropertyDateTime TIMESTAMP(3) NULL, - PropertyString VARCHAR(255) NULL, - PropertyFloat REAL NULL, - PropertyDouble DOUBLE PRECISION NULL, PropertyDecimal DECIMAL NULL, - PropertySystemNullableDateTime TIMESTAMP(3) NULL, - PropertySystemNullableInt INT NULL, - PropertySystemNullableGuid UUID NULL, - PropertySystemNullableDecimal DECIMAL NULL, - PropStormnetNullableDateTime TIMESTAMP(3) NULL, - PropertyStormnetNullableInt INT NULL, - PropertyStormnetKeyGuid UUID NULL, - PropStormnetNullableDecimal DECIMAL NULL, - PropertyStormnetPartliedDate VARCHAR(255) NULL, - PropertyStormnetContact TEXT NULL, + PropertyDouble DOUBLE PRECISION NULL, + PropertyEnum VARCHAR(6) NULL, + PropertyFloat REAL NULL, + PropertyGeography GEOMETRY NULL, + PropertyInt INT NULL, PropertyStormnetBlob TEXT NULL, + PropertyStormnetContact TEXT NULL, PropertyStormnetEvent TEXT NULL, + PropertyStormnetFile TEXT NULL, PropertyStormnetGeoData TEXT NULL, PropertyStormnetImage TEXT NULL, + PropertyStormnetKeyGuid UUID NULL, + PropStormnetNullableDateTime TIMESTAMP(3) NULL, + PropStormnetNullableDecimal DECIMAL NULL, + PropertyStormnetNullableInt INT NULL, + PropertyStormnetPartliedDate VARCHAR(255) NULL, PropertyStormnetWebFile TEXT NULL, - PropertyStormnetFile TEXT NULL, + PropertyString VARCHAR(255) NULL, + PropertySystemNullableDateTime TIMESTAMP(3) NULL, + PropertySystemNullableDecimal DECIMAL NULL, + PropertySystemNullableGuid UUID NULL, + PropertySystemNullableInt INT NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE Медведь ( + primaryKey UUID NOT NULL, + Вес INT NULL, + ДатаРождения TIMESTAMP(3) NULL, + Пол VARCHAR(9) NULL, + ПолеБС VARCHAR(255) NULL, + ПорядковыйНомер INT NULL, + ЦветГлаз VARCHAR(255) NULL, + CreateTime TIMESTAMP(3) NULL, + Creator VARCHAR(255) NULL, + Editor VARCHAR(255) NULL, + EditTime TIMESTAMP(3) NULL, + ЛесОбитания UUID NULL, + Мама UUID NULL, + Папа UUID NULL, + Страна UUID NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE Берлога ( + primaryKey UUID NOT NULL, + Заброшена BOOLEAN NULL, + Комфортность INT NULL, + Наименование VARCHAR(255) NULL, + ПолеБС VARCHAR(255) NULL, + Сертификат TEXT NULL, + CertString TEXT NULL, + ЛесРасположения UUID NULL, + ДляКакойПороды UUID NULL, + Медведь UUID NOT NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE Car ( + primaryKey UUID NOT NULL, + Model VARCHAR(255) NULL, + Number VARCHAR(255) NULL, + TipCar VARCHAR(9) NULL, + driver UUID NOT NULL, PRIMARY KEY (primaryKey)); @@ -448,15 +448,15 @@ CREATE TABLE Перелом ( CREATE TABLE Лапа ( primaryKey UUID NOT NULL, - Цвет VARCHAR(255) NULL, - Размер INT NULL, - ДатаРождения TIMESTAMP(3) NULL, БылиЛиПереломы BOOLEAN NULL, - Сторона VARCHAR(11) NULL, + ДатаРождения TIMESTAMP(3) NULL, Номер INT NULL, + Размер INT NULL, + РазмерDecimal DECIMAL NULL, РазмерDouble DOUBLE PRECISION NULL, РазмерFloat REAL NULL, - РазмерDecimal DECIMAL NULL, + Сторона VARCHAR(11) NULL, + Цвет VARCHAR(255) NULL, ТипЛапы_m0 UUID NULL, Кошка_m0 UUID NOT NULL, PRIMARY KEY (primaryKey)); @@ -464,17 +464,84 @@ CREATE TABLE Лапа ( CREATE TABLE Кошка ( primaryKey UUID NOT NULL, - Кличка VARCHAR(255) NULL, - ДатаРождения TIMESTAMP(3) NULL, - Тип VARCHAR(11) NULL, - ПородаСтрокой VARCHAR(255) NULL, Агрессивная BOOLEAN NULL, + ДатаРождения TIMESTAMP(3) NULL, + Кличка VARCHAR(255) NULL, УсыСлева INT NULL, УсыСправа INT NULL, + ПородаСтрокой VARCHAR(255) NULL, + Тип VARCHAR(11) NULL, Порода_m0 UUID NOT NULL, PRIMARY KEY (primaryKey)); +CREATE TABLE AgregatorWithSameMAndD ( + primaryKey UUID NOT NULL, + Name VARCHAR(255) NULL, + Master UUID NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE DetailAndMaster ( + primaryKey UUID NOT NULL, + Name VARCHAR(255) NULL, + Agregator UUID NOT NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE TestConfiguration ( + primaryKey UUID NOT NULL, + Name VARCHAR(255) NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE TestClass ( + primaryKey UUID NOT NULL, + Name VARCHAR(255) NULL, + FirstLevel UUID NOT NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE ThirdLevel ( + primaryKey UUID NOT NULL, + Name VARCHAR(255) NULL, + TestClass UUID NOT NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE SecondLevel1 ( + primaryKey UUID NOT NULL, + Name VARCHAR(255) NULL, + FirstLevel UUID NOT NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE FirstLevel ( + primaryKey UUID NOT NULL, + Name VARCHAR(255) NULL, + TestConfiguration UUID NOT NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE SecondLevel2 ( + primaryKey UUID NOT NULL, + Name VARCHAR(255) NULL, + SecondLevel1_m0 UUID NULL, + SecondLevel1_m1 UUID NULL, + FirstLevel UUID NOT NULL, + PRIMARY KEY (primaryKey)); + + +CREATE TABLE TestAssociation ( + primaryKey UUID NOT NULL, + Name2 VARCHAR(255) NULL, + Name VARCHAR(255) NULL, + SecondLevel1_m0 UUID NULL, + SecondLevel1_m1 UUID NULL, + FirstLevel UUID NOT NULL, + PRIMARY KEY (primaryKey)); + + CREATE TABLE STORMNETLOCKDATA ( LockKey VARCHAR(300) NOT NULL, UserName VARCHAR(300) NOT NULL, @@ -607,10 +674,10 @@ CREATE TABLE STORMAuField ( PRIMARY KEY (primaryKey)); +CREATE INDEX Indexc5f9d71c0704ea7b966afcfdc89dc7eabe2d0c43 on КлассСМножТипов USING gist (PropertyGeography); ALTER TABLE Лес ADD CONSTRAINT FKd3bd1222072f531605e73e66656fe58296c8bfd2 FOREIGN KEY (Страна) REFERENCES Страна; CREATE INDEX Indexd3bd1222072f531605e73e66656fe58296c8bfd2 on Лес (Страна); -CREATE INDEX Indexc5f9d71c0704ea7b966afcfdc89dc7eabe2d0c43 on КлассСМножТипов USING gist (PropertyGeography); ALTER TABLE LegoPatent ADD CONSTRAINT FK849bc80cb1cf2d804429cfd10a756cb914e3fece FOREIGN KEY (LegoBlock) REFERENCES LegoBlock; CREATE INDEX Index849bc80cb1cf2d804429cfd10a756cb914e3fece on LegoPatent (LegoBlock); @@ -642,18 +709,6 @@ CREATE INDEX Index51fce8ede8f7716be28b6975505b1f9e738cc71c on Журнал (Ав ALTER TABLE Журнал ADD CONSTRAINT FK93c8f6bdc15c74cea64c3d56754d8263c4f0ceb5 FOREIGN KEY (Библиотека2) REFERENCES Библиотека; CREATE INDEX Index93c8f6bdc15c74cea64c3d56754d8263c4f0ceb5 on Журнал (Библиотека2); - ALTER TABLE Медведь ADD CONSTRAINT FK93be01a32cae64dc4b18705ade6683f41a32c367 FOREIGN KEY (ЛесОбитания) REFERENCES Лес; -CREATE INDEX Index93be01a32cae64dc4b18705ade6683f41a32c367 on Медведь (ЛесОбитания); - - ALTER TABLE Медведь ADD CONSTRAINT FK0ca403a899ac5a709a19bbb9ada47b0060e5b819 FOREIGN KEY (Папа) REFERENCES Медведь; -CREATE INDEX Index0ca403a899ac5a709a19bbb9ada47b0060e5b819 on Медведь (Папа); - - ALTER TABLE Медведь ADD CONSTRAINT FK6d8033494746b0bb87ba367c83d273dfa11b8f59 FOREIGN KEY (Страна) REFERENCES Страна; -CREATE INDEX Index6d8033494746b0bb87ba367c83d273dfa11b8f59 on Медведь (Страна); - - ALTER TABLE Медведь ADD CONSTRAINT FK0b9f6ad0caded1971696ef6602e8a2831fa941b1 FOREIGN KEY (Мама) REFERENCES Медведь; -CREATE INDEX Index0b9f6ad0caded1971696ef6602e8a2831fa941b1 on Медведь (Мама); - ALTER TABLE MainClass ADD CONSTRAINT FK685ab69befdffb9de6fa545fb70cd50905f15ac0 FOREIGN KEY (AgrClass1) REFERENCES AgrClass1; CREATE INDEX Index685ab69befdffb9de6fa545fb70cd50905f15ac0 on MainClass (AgrClass1); @@ -669,15 +724,6 @@ CREATE INDEX Index4cfb6296b76f57183c4e2ee17b66be5bed463d0f on LegoBlock (Materia ALTER TABLE LegoBlock ADD CONSTRAINT FK9f2f5e18e6674969f5e82da37bf4b5a2a1d4713a FOREIGN KEY (Color) REFERENCES LegoBlockColor; CREATE INDEX Index9f2f5e18e6674969f5e82da37bf4b5a2a1d4713a on LegoBlock (Color); - ALTER TABLE Берлога ADD CONSTRAINT FKa74603e81cb82d318a92d5d3e374895fe242d80e FOREIGN KEY (ЛесРасположения) REFERENCES Лес; -CREATE INDEX Indexa74603e81cb82d318a92d5d3e374895fe242d80e on Берлога (ЛесРасположения); - - ALTER TABLE Берлога ADD CONSTRAINT FKd55a7fa30b428d1be64b1b8e2ac5b525597ef56b FOREIGN KEY (ДляКакойПороды) REFERENCES Порода; -CREATE INDEX Indexd55a7fa30b428d1be64b1b8e2ac5b525597ef56b on Берлога (ДляКакойПороды); - - ALTER TABLE Берлога ADD CONSTRAINT FK838e30a686c4f1dcfbb02e55d47218e48ddbe7a2 FOREIGN KEY (Медведь) REFERENCES Медведь; -CREATE INDEX Index838e30a686c4f1dcfbb02e55d47218e48ddbe7a2 on Берлога (Медведь); - ALTER TABLE Котенок ADD CONSTRAINT FK79a0f583830fea7f95d716cc96a27d0967a2d537 FOREIGN KEY (Кошка_m0) REFERENCES Кошка; CREATE INDEX Index79a0f583830fea7f95d716cc96a27d0967a2d537 on Котенок (Кошка_m0); @@ -693,9 +739,6 @@ CREATE INDEX Indexfb36ebac9beeb237cccb40b7be9cf2d25e9247b9 on DetailsClass1 (Det ALTER TABLE DetailsClass1 ADD CONSTRAINT FK10455ebe27fd31555ad2502ede3706a815784321 FOREIGN KEY (AgrClass1) REFERENCES AgrClass1; CREATE INDEX Index10455ebe27fd31555ad2502ede3706a815784321 on DetailsClass1 (AgrClass1); - ALTER TABLE Car ADD CONSTRAINT FKe86a1d047f4df342bf39a5af864aec2b40a3547a FOREIGN KEY (driver) REFERENCES Driver; -CREATE INDEX Indexe86a1d047f4df342bf39a5af864aec2b40a3547a on Car (driver); - ALTER TABLE LegoBlockCustomPanel ADD CONSTRAINT FK53e2141b982788b2970c50d23073a5847e47d81c FOREIGN KEY (PanelAngle) REFERENCES LegoPanelAngle; CREATE INDEX Index53e2141b982788b2970c50d23073a5847e47d81c on LegoBlockCustomPanel (PanelAngle); @@ -735,16 +778,40 @@ CREATE INDEX Index84e4d9d5b6adc4bec48541216f15f396dd2b602c on Книга (Биб ALTER TABLE LegoDevice ADD CONSTRAINT FKafee67e1a41c2550c0f3df3724edf1b0be74db9f FOREIGN KEY (Color) REFERENCES LegoBlockColor; CREATE INDEX Indexafee67e1a41c2550c0f3df3724edf1b0be74db9f on LegoDevice (Color); - ALTER TABLE Наследник ADD CONSTRAINT FK0cb9ac2b0e7896223ed63c0c888c23aa86682b1e FOREIGN KEY (Master) REFERENCES Master; -CREATE INDEX Index0cb9ac2b0e7896223ed63c0c888c23aa86682b1e on Наследник (Master); - ALTER TABLE Наследник ADD CONSTRAINT FK28ac1d61524a43a59e67af57a855ad487d1f8141 FOREIGN KEY (Мастер) REFERENCES Мастер; CREATE INDEX Index28ac1d61524a43a59e67af57a855ad487d1f8141 on Наследник (Мастер); + ALTER TABLE Наследник ADD CONSTRAINT FK0cb9ac2b0e7896223ed63c0c888c23aa86682b1e FOREIGN KEY (Master) REFERENCES Master; +CREATE INDEX Index0cb9ac2b0e7896223ed63c0c888c23aa86682b1e on Наследник (Master); + ALTER TABLE LegoBlockBottomPanel ADD CONSTRAINT FKba0e912f138a900a9d416b459d0b38e70871f043 FOREIGN KEY (Block) REFERENCES LegoBlock; CREATE INDEX Indexba0e912f138a900a9d416b459d0b38e70871f043 on LegoBlockBottomPanel (Block); CREATE INDEX Index10d981ac5288ea278311b6a711b43fa954b635a8 on ДочернийКласс USING gist (PropertyGeography); + ALTER TABLE Медведь ADD CONSTRAINT FK93be01a32cae64dc4b18705ade6683f41a32c367 FOREIGN KEY (ЛесОбитания) REFERENCES Лес; +CREATE INDEX Index93be01a32cae64dc4b18705ade6683f41a32c367 on Медведь (ЛесОбитания); + + ALTER TABLE Медведь ADD CONSTRAINT FK0b9f6ad0caded1971696ef6602e8a2831fa941b1 FOREIGN KEY (Мама) REFERENCES Медведь; +CREATE INDEX Index0b9f6ad0caded1971696ef6602e8a2831fa941b1 on Медведь (Мама); + + ALTER TABLE Медведь ADD CONSTRAINT FK0ca403a899ac5a709a19bbb9ada47b0060e5b819 FOREIGN KEY (Папа) REFERENCES Медведь; +CREATE INDEX Index0ca403a899ac5a709a19bbb9ada47b0060e5b819 on Медведь (Папа); + + ALTER TABLE Медведь ADD CONSTRAINT FK6d8033494746b0bb87ba367c83d273dfa11b8f59 FOREIGN KEY (Страна) REFERENCES Страна; +CREATE INDEX Index6d8033494746b0bb87ba367c83d273dfa11b8f59 on Медведь (Страна); + + ALTER TABLE Берлога ADD CONSTRAINT FKa74603e81cb82d318a92d5d3e374895fe242d80e FOREIGN KEY (ЛесРасположения) REFERENCES Лес; +CREATE INDEX Indexa74603e81cb82d318a92d5d3e374895fe242d80e on Берлога (ЛесРасположения); + + ALTER TABLE Берлога ADD CONSTRAINT FKd55a7fa30b428d1be64b1b8e2ac5b525597ef56b FOREIGN KEY (ДляКакойПороды) REFERENCES Порода; +CREATE INDEX Indexd55a7fa30b428d1be64b1b8e2ac5b525597ef56b on Берлога (ДляКакойПороды); + + ALTER TABLE Берлога ADD CONSTRAINT FK838e30a686c4f1dcfbb02e55d47218e48ddbe7a2 FOREIGN KEY (Медведь) REFERENCES Медведь; +CREATE INDEX Index838e30a686c4f1dcfbb02e55d47218e48ddbe7a2 on Берлога (Медведь); + + ALTER TABLE Car ADD CONSTRAINT FKe86a1d047f4df342bf39a5af864aec2b40a3547a FOREIGN KEY (driver) REFERENCES Driver; +CREATE INDEX Indexe86a1d047f4df342bf39a5af864aec2b40a3547a on Car (driver); + ALTER TABLE Перелом ADD CONSTRAINT FK6dee404d2bb9702d8d72537c5ae42a7c97dfb5fa FOREIGN KEY (Лапа_m0) REFERENCES Лапа; CREATE INDEX Index6dee404d2bb9702d8d72537c5ae42a7c97dfb5fa on Перелом (Лапа_m0); @@ -757,6 +824,42 @@ CREATE INDEX Indexd2c2995f4deb3767b25fa4ca17d61bf9bff3d562 on Лапа (Кошк ALTER TABLE Кошка ADD CONSTRAINT FK271599c8f6730bbff77fe5e9bf61dbfd89e661c6 FOREIGN KEY (Порода_m0) REFERENCES Порода; CREATE INDEX Index271599c8f6730bbff77fe5e9bf61dbfd89e661c6 on Кошка (Порода_m0); + ALTER TABLE AgregatorWithSameMAndD ADD CONSTRAINT FK8b53b11c59bd038385b48bae2e4c94deed6a1407 FOREIGN KEY (Master) REFERENCES DetailAndMaster; +CREATE INDEX Index8b53b11c59bd038385b48bae2e4c94deed6a1407 on AgregatorWithSameMAndD (Master); + + ALTER TABLE DetailAndMaster ADD CONSTRAINT FK0c88fee611c8abca27c4c3da5367b44eee5fc8e5 FOREIGN KEY (Agregator) REFERENCES AgregatorWithSameMAndD; +CREATE INDEX Index0c88fee611c8abca27c4c3da5367b44eee5fc8e5 on DetailAndMaster (Agregator); + + ALTER TABLE TestClass ADD CONSTRAINT FK19773cb98a250f476592752b07236351a92e0459 FOREIGN KEY (FirstLevel) REFERENCES FirstLevel; +CREATE INDEX Index19773cb98a250f476592752b07236351a92e0459 on TestClass (FirstLevel); + + ALTER TABLE ThirdLevel ADD CONSTRAINT FK984d4e99324a5c45442934f0ab98b220f32de93a FOREIGN KEY (TestClass) REFERENCES TestClass; +CREATE INDEX Index984d4e99324a5c45442934f0ab98b220f32de93a on ThirdLevel (TestClass); + + ALTER TABLE SecondLevel1 ADD CONSTRAINT FKfd7eab05fadb3cdc2d524a4e44a7e9180d6fb17a FOREIGN KEY (FirstLevel) REFERENCES FirstLevel; +CREATE INDEX Indexfd7eab05fadb3cdc2d524a4e44a7e9180d6fb17a on SecondLevel1 (FirstLevel); + + ALTER TABLE FirstLevel ADD CONSTRAINT FK7b6f1cb3f01146be11a3378612a4fb0be742e10d FOREIGN KEY (TestConfiguration) REFERENCES TestConfiguration; +CREATE INDEX Index7b6f1cb3f01146be11a3378612a4fb0be742e10d on FirstLevel (TestConfiguration); + + ALTER TABLE SecondLevel2 ADD CONSTRAINT FK22e45e92a053d7e929e24654ac8c10aba4fa49b0 FOREIGN KEY (SecondLevel1_m0) REFERENCES SecondLevel1; +CREATE INDEX Index22e45e92a053d7e929e24654ac8c10aba4fa49b0 on SecondLevel2 (SecondLevel1_m0); + + ALTER TABLE SecondLevel2 ADD CONSTRAINT FK34d92026b39c8d9b4ae1c6b730803be60ba832af FOREIGN KEY (SecondLevel1_m1) REFERENCES TestClass; +CREATE INDEX Index34d92026b39c8d9b4ae1c6b730803be60ba832af on SecondLevel2 (SecondLevel1_m1); + + ALTER TABLE SecondLevel2 ADD CONSTRAINT FKe2843f3145fc62736d407262ab698b69e37abc7a FOREIGN KEY (FirstLevel) REFERENCES FirstLevel; +CREATE INDEX Indexe2843f3145fc62736d407262ab698b69e37abc7a on SecondLevel2 (FirstLevel); + + ALTER TABLE TestAssociation ADD CONSTRAINT FK75ff68881ab55589c4860bf07c4d70899aeba780 FOREIGN KEY (SecondLevel1_m0) REFERENCES SecondLevel1; +CREATE INDEX Index75ff68881ab55589c4860bf07c4d70899aeba780 on TestAssociation (SecondLevel1_m0); + + ALTER TABLE TestAssociation ADD CONSTRAINT FK33293a87ee605ad37917bdfcc64e848d124c4458 FOREIGN KEY (SecondLevel1_m1) REFERENCES TestClass; +CREATE INDEX Index33293a87ee605ad37917bdfcc64e848d124c4458 on TestAssociation (SecondLevel1_m1); + + ALTER TABLE TestAssociation ADD CONSTRAINT FK2c1bef67ce5243233fabd0b55b2f07496ce332d0 FOREIGN KEY (FirstLevel) REFERENCES FirstLevel; +CREATE INDEX Index2c1bef67ce5243233fabd0b55b2f07496ce332d0 on TestAssociation (FirstLevel); + ALTER TABLE STORMWEBSEARCH ADD CONSTRAINT FKc4378e39870eb056aec84088683297a01d2a6200 FOREIGN KEY (FilterSetting_m0) REFERENCES STORMFILTERSETTING; ALTER TABLE STORMFILTERDETAIL ADD CONSTRAINT FK921d16269835017e2a0d0e29ad6fb175454a70d0 FOREIGN KEY (FilterSetting_m0) REFERENCES STORMFILTERSETTING; diff --git a/Tests/Objects/AgregatorWithSameMAndD.cs b/Tests/Objects/AgregatorWithSameMAndD.cs new file mode 100644 index 00000000..c4ef0479 --- /dev/null +++ b/Tests/Objects/AgregatorWithSameMAndD.cs @@ -0,0 +1,143 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// AgregatorWithSameMAndD. + /// + // *** Start programmer edit section *** (AgregatorWithSameMAndD CustomAttributes) + + // *** End programmer edit section *** (AgregatorWithSameMAndD CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class AgregatorWithSameMAndD : ICSSoft.STORMNET.DataObject + { + + private string fName; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMaster fMaster; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailAndMaster fDetails; + + // *** Start programmer edit section *** (AgregatorWithSameMAndD CustomMembers) + + // *** End programmer edit section *** (AgregatorWithSameMAndD CustomMembers) + + + /// + /// Name. + /// + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Name CustomAttributes) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Name CustomAttributes) + [StrLen(255)] + public virtual string Name + { + get + { + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Name Get start) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Name Get end) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Name Set start) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Name Set end) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Name Set end) + } + } + + /// + /// AgregatorWithSameMAndD. + /// + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Master CustomAttributes) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Master CustomAttributes) + [PropertyStorage(new string[] { + "Master"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMaster Master + { + get + { + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Master Get start) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Master Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMaster result = this.fMaster; + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Master Get end) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Master Get end) + return result; + } + set + { + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Master Set start) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Master Set start) + this.fMaster = value; + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Master Set end) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Master Set end) + } + } + + /// + /// AgregatorWithSameMAndD. + /// + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Details CustomAttributes) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Details CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailAndMaster Details + { + get + { + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Details Get start) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Details Get start) + if ((this.fDetails == null)) + { + this.fDetails = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailAndMaster(this); + } + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailAndMaster result = this.fDetails; + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Details Get end) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Details Get end) + return result; + } + set + { + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Details Set start) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Details Set start) + this.fDetails = value; + // *** Start programmer edit section *** (AgregatorWithSameMAndD.Details Set end) + + // *** End programmer edit section *** (AgregatorWithSameMAndD.Details Set end) + } + } + } +} + diff --git a/Tests/Objects/DetailAndMaster.cs b/Tests/Objects/DetailAndMaster.cs new file mode 100644 index 00000000..281f8ac7 --- /dev/null +++ b/Tests/Objects/DetailAndMaster.cs @@ -0,0 +1,150 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// DetailAndMaster. + /// + // *** Start programmer edit section *** (DetailAndMaster CustomAttributes) + + // *** End programmer edit section *** (DetailAndMaster CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class DetailAndMaster : ICSSoft.STORMNET.DataObject + { + + private string fName; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.AgregatorWithSameMAndD fAgregator; + + // *** Start programmer edit section *** (DetailAndMaster CustomMembers) + + // *** End programmer edit section *** (DetailAndMaster CustomMembers) + + + /// + /// Name. + /// + // *** Start programmer edit section *** (DetailAndMaster.Name CustomAttributes) + + // *** End programmer edit section *** (DetailAndMaster.Name CustomAttributes) + [StrLen(255)] + public virtual string Name + { + get + { + // *** Start programmer edit section *** (DetailAndMaster.Name Get start) + + // *** End programmer edit section *** (DetailAndMaster.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (DetailAndMaster.Name Get end) + + // *** End programmer edit section *** (DetailAndMaster.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (DetailAndMaster.Name Set start) + + // *** End programmer edit section *** (DetailAndMaster.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (DetailAndMaster.Name Set end) + + // *** End programmer edit section *** (DetailAndMaster.Name Set end) + } + } + + /// + /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.AgregatorWithSameMAndD. + /// + // *** Start programmer edit section *** (DetailAndMaster.Agregator CustomAttributes) + + // *** End programmer edit section *** (DetailAndMaster.Agregator CustomAttributes) + [Agregator()] + [NotNull()] + [PropertyStorage(new string[] { + "Agregator"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.AgregatorWithSameMAndD Agregator + { + get + { + // *** Start programmer edit section *** (DetailAndMaster.Agregator Get start) + + // *** End programmer edit section *** (DetailAndMaster.Agregator Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.AgregatorWithSameMAndD result = this.fAgregator; + // *** Start programmer edit section *** (DetailAndMaster.Agregator Get end) + + // *** End programmer edit section *** (DetailAndMaster.Agregator Get end) + return result; + } + set + { + // *** Start programmer edit section *** (DetailAndMaster.Agregator Set start) + + // *** End programmer edit section *** (DetailAndMaster.Agregator Set start) + this.fAgregator = value; + // *** Start programmer edit section *** (DetailAndMaster.Agregator Set end) + + // *** End programmer edit section *** (DetailAndMaster.Agregator Set end) + } + } + } + + /// + /// Detail array of DetailAndMaster. + /// + // *** Start programmer edit section *** (DetailArrayDetailArrayOfDetailAndMaster CustomAttributes) + + // *** End programmer edit section *** (DetailArrayDetailArrayOfDetailAndMaster CustomAttributes) + public class DetailArrayOfDetailAndMaster : ICSSoft.STORMNET.DetailArray + { + + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailAndMaster members) + + // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailAndMaster members) + + + /// + /// Construct detail array. + /// + /// + /// Returns object with type DetailAndMaster by index. + /// + /// + /// Adds object with type DetailAndMaster. + /// + public DetailArrayOfDetailAndMaster(NewPlatform.Flexberry.ORM.ODataService.Tests.AgregatorWithSameMAndD fAgregatorWithSameMAndD) : + base(typeof(DetailAndMaster), ((ICSSoft.STORMNET.DataObject)(fAgregatorWithSameMAndD))) + { + } + + public NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMaster this[int index] + { + get + { + return ((NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMaster)(this.ItemByIndex(index))); + } + } + + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMaster dataobject) + { + this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); + } + } +} + diff --git a/Tests/Objects/FirstLevel.cs b/Tests/Objects/FirstLevel.cs new file mode 100644 index 00000000..3d82efd9 --- /dev/null +++ b/Tests/Objects/FirstLevel.cs @@ -0,0 +1,230 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// FirstLevel. + /// + // *** Start programmer edit section *** (FirstLevel CustomAttributes) + + // *** End programmer edit section *** (FirstLevel CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class FirstLevel : ICSSoft.STORMNET.DataObject + { + + private string fName; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfSecondLevel1 fSecondLevel1; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfSecondLevel2 fSecondLevel2; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.TestConfiguration fTestConfiguration; + + // *** Start programmer edit section *** (FirstLevel CustomMembers) + + // *** End programmer edit section *** (FirstLevel CustomMembers) + + + /// + /// Name. + /// + // *** Start programmer edit section *** (FirstLevel.Name CustomAttributes) + + // *** End programmer edit section *** (FirstLevel.Name CustomAttributes) + [StrLen(255)] + public virtual string Name + { + get + { + // *** Start programmer edit section *** (FirstLevel.Name Get start) + + // *** End programmer edit section *** (FirstLevel.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (FirstLevel.Name Get end) + + // *** End programmer edit section *** (FirstLevel.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (FirstLevel.Name Set start) + + // *** End programmer edit section *** (FirstLevel.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (FirstLevel.Name Set end) + + // *** End programmer edit section *** (FirstLevel.Name Set end) + } + } + + /// + /// FirstLevel. + /// + // *** Start programmer edit section *** (FirstLevel.SecondLevel1 CustomAttributes) + + // *** End programmer edit section *** (FirstLevel.SecondLevel1 CustomAttributes) + [TypeUsage(new System.Type[] { + typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel1), + typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.TestClass)})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfSecondLevel1 SecondLevel1 + { + get + { + // *** Start programmer edit section *** (FirstLevel.SecondLevel1 Get start) + + // *** End programmer edit section *** (FirstLevel.SecondLevel1 Get start) + if ((this.fSecondLevel1 == null)) + { + this.fSecondLevel1 = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfSecondLevel1(this); + } + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfSecondLevel1 result = this.fSecondLevel1; + // *** Start programmer edit section *** (FirstLevel.SecondLevel1 Get end) + + // *** End programmer edit section *** (FirstLevel.SecondLevel1 Get end) + return result; + } + set + { + // *** Start programmer edit section *** (FirstLevel.SecondLevel1 Set start) + + // *** End programmer edit section *** (FirstLevel.SecondLevel1 Set start) + this.fSecondLevel1 = value; + // *** Start programmer edit section *** (FirstLevel.SecondLevel1 Set end) + + // *** End programmer edit section *** (FirstLevel.SecondLevel1 Set end) + } + } + + /// + /// FirstLevel. + /// + // *** Start programmer edit section *** (FirstLevel.SecondLevel2 CustomAttributes) + + // *** End programmer edit section *** (FirstLevel.SecondLevel2 CustomAttributes) + [TypeUsage(new System.Type[] { + typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel2), + typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.TestAssociation)})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfSecondLevel2 SecondLevel2 + { + get + { + // *** Start programmer edit section *** (FirstLevel.SecondLevel2 Get start) + + // *** End programmer edit section *** (FirstLevel.SecondLevel2 Get start) + if ((this.fSecondLevel2 == null)) + { + this.fSecondLevel2 = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfSecondLevel2(this); + } + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfSecondLevel2 result = this.fSecondLevel2; + // *** Start programmer edit section *** (FirstLevel.SecondLevel2 Get end) + + // *** End programmer edit section *** (FirstLevel.SecondLevel2 Get end) + return result; + } + set + { + // *** Start programmer edit section *** (FirstLevel.SecondLevel2 Set start) + + // *** End programmer edit section *** (FirstLevel.SecondLevel2 Set start) + this.fSecondLevel2 = value; + // *** Start programmer edit section *** (FirstLevel.SecondLevel2 Set end) + + // *** End programmer edit section *** (FirstLevel.SecondLevel2 Set end) + } + } + + /// + /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.TestConfiguration. + /// + // *** Start programmer edit section *** (FirstLevel.TestConfiguration CustomAttributes) + + // *** End programmer edit section *** (FirstLevel.TestConfiguration CustomAttributes) + [Agregator()] + [NotNull()] + [PropertyStorage(new string[] { + "TestConfiguration"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.TestConfiguration TestConfiguration + { + get + { + // *** Start programmer edit section *** (FirstLevel.TestConfiguration Get start) + + // *** End programmer edit section *** (FirstLevel.TestConfiguration Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.TestConfiguration result = this.fTestConfiguration; + // *** Start programmer edit section *** (FirstLevel.TestConfiguration Get end) + + // *** End programmer edit section *** (FirstLevel.TestConfiguration Get end) + return result; + } + set + { + // *** Start programmer edit section *** (FirstLevel.TestConfiguration Set start) + + // *** End programmer edit section *** (FirstLevel.TestConfiguration Set start) + this.fTestConfiguration = value; + // *** Start programmer edit section *** (FirstLevel.TestConfiguration Set end) + + // *** End programmer edit section *** (FirstLevel.TestConfiguration Set end) + } + } + } + + /// + /// Detail array of FirstLevel. + /// + // *** Start programmer edit section *** (DetailArrayDetailArrayOfFirstLevel CustomAttributes) + + // *** End programmer edit section *** (DetailArrayDetailArrayOfFirstLevel CustomAttributes) + public class DetailArrayOfFirstLevel : ICSSoft.STORMNET.DetailArray + { + + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfFirstLevel members) + + // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfFirstLevel members) + + + /// + /// Construct detail array. + /// + /// + /// Returns object with type FirstLevel by index. + /// + /// + /// Adds object with type FirstLevel. + /// + public DetailArrayOfFirstLevel(NewPlatform.Flexberry.ORM.ODataService.Tests.TestConfiguration fTestConfiguration) : + base(typeof(FirstLevel), ((ICSSoft.STORMNET.DataObject)(fTestConfiguration))) + { + } + + public NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel this[int index] + { + get + { + return ((NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel)(this.ItemByIndex(index))); + } + } + + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel dataobject) + { + this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); + } + } +} + diff --git a/Tests/Objects/SecondLevel1.cs b/Tests/Objects/SecondLevel1.cs new file mode 100644 index 00000000..3645355f --- /dev/null +++ b/Tests/Objects/SecondLevel1.cs @@ -0,0 +1,150 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// SecondLevel1. + /// + // *** Start programmer edit section *** (SecondLevel1 CustomAttributes) + + // *** End programmer edit section *** (SecondLevel1 CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class SecondLevel1 : ICSSoft.STORMNET.DataObject + { + + private string fName; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel fFirstLevel; + + // *** Start programmer edit section *** (SecondLevel1 CustomMembers) + + // *** End programmer edit section *** (SecondLevel1 CustomMembers) + + + /// + /// Name. + /// + // *** Start programmer edit section *** (SecondLevel1.Name CustomAttributes) + + // *** End programmer edit section *** (SecondLevel1.Name CustomAttributes) + [StrLen(255)] + public virtual string Name + { + get + { + // *** Start programmer edit section *** (SecondLevel1.Name Get start) + + // *** End programmer edit section *** (SecondLevel1.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (SecondLevel1.Name Get end) + + // *** End programmer edit section *** (SecondLevel1.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (SecondLevel1.Name Set start) + + // *** End programmer edit section *** (SecondLevel1.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (SecondLevel1.Name Set end) + + // *** End programmer edit section *** (SecondLevel1.Name Set end) + } + } + + /// + /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel. + /// + // *** Start programmer edit section *** (SecondLevel1.FirstLevel CustomAttributes) + + // *** End programmer edit section *** (SecondLevel1.FirstLevel CustomAttributes) + [Agregator()] + [NotNull()] + [PropertyStorage(new string[] { + "FirstLevel"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel FirstLevel + { + get + { + // *** Start programmer edit section *** (SecondLevel1.FirstLevel Get start) + + // *** End programmer edit section *** (SecondLevel1.FirstLevel Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel result = this.fFirstLevel; + // *** Start programmer edit section *** (SecondLevel1.FirstLevel Get end) + + // *** End programmer edit section *** (SecondLevel1.FirstLevel Get end) + return result; + } + set + { + // *** Start programmer edit section *** (SecondLevel1.FirstLevel Set start) + + // *** End programmer edit section *** (SecondLevel1.FirstLevel Set start) + this.fFirstLevel = value; + // *** Start programmer edit section *** (SecondLevel1.FirstLevel Set end) + + // *** End programmer edit section *** (SecondLevel1.FirstLevel Set end) + } + } + } + + /// + /// Detail array of SecondLevel1. + /// + // *** Start programmer edit section *** (DetailArrayDetailArrayOfSecondLevel1 CustomAttributes) + + // *** End programmer edit section *** (DetailArrayDetailArrayOfSecondLevel1 CustomAttributes) + public class DetailArrayOfSecondLevel1 : ICSSoft.STORMNET.DetailArray + { + + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfSecondLevel1 members) + + // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfSecondLevel1 members) + + + /// + /// Construct detail array. + /// + /// + /// Returns object with type SecondLevel1 by index. + /// + /// + /// Adds object with type SecondLevel1. + /// + public DetailArrayOfSecondLevel1(NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel fFirstLevel) : + base(typeof(SecondLevel1), ((ICSSoft.STORMNET.DataObject)(fFirstLevel))) + { + } + + public NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel1 this[int index] + { + get + { + return ((NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel1)(this.ItemByIndex(index))); + } + } + + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel1 dataobject) + { + this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); + } + } +} + diff --git a/Tests/Objects/SecondLevel2.cs b/Tests/Objects/SecondLevel2.cs new file mode 100644 index 00000000..3209fe77 --- /dev/null +++ b/Tests/Objects/SecondLevel2.cs @@ -0,0 +1,188 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// SecondLevel2. + /// + // *** Start programmer edit section *** (SecondLevel2 CustomAttributes) + + // *** End programmer edit section *** (SecondLevel2 CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class SecondLevel2 : ICSSoft.STORMNET.DataObject + { + + private string fName; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel1 fSecondLevel1; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel fFirstLevel; + + // *** Start programmer edit section *** (SecondLevel2 CustomMembers) + + // *** End programmer edit section *** (SecondLevel2 CustomMembers) + + + /// + /// Name. + /// + // *** Start programmer edit section *** (SecondLevel2.Name CustomAttributes) + + // *** End programmer edit section *** (SecondLevel2.Name CustomAttributes) + [StrLen(255)] + public virtual string Name + { + get + { + // *** Start programmer edit section *** (SecondLevel2.Name Get start) + + // *** End programmer edit section *** (SecondLevel2.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (SecondLevel2.Name Get end) + + // *** End programmer edit section *** (SecondLevel2.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (SecondLevel2.Name Set start) + + // *** End programmer edit section *** (SecondLevel2.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (SecondLevel2.Name Set end) + + // *** End programmer edit section *** (SecondLevel2.Name Set end) + } + } + + /// + /// SecondLevel2. + /// + // *** Start programmer edit section *** (SecondLevel2.SecondLevel1 CustomAttributes) + + // *** End programmer edit section *** (SecondLevel2.SecondLevel1 CustomAttributes) + [PropertyStorage("SecondLevel1")] + [TypeUsage(new string[] { + "NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel1", + "NewPlatform.Flexberry.ORM.ODataService.Tests.TestClass"})] + [NotNull()] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel1 SecondLevel1 + { + get + { + // *** Start programmer edit section *** (SecondLevel2.SecondLevel1 Get start) + + // *** End programmer edit section *** (SecondLevel2.SecondLevel1 Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel1 result = this.fSecondLevel1; + // *** Start programmer edit section *** (SecondLevel2.SecondLevel1 Get end) + + // *** End programmer edit section *** (SecondLevel2.SecondLevel1 Get end) + return result; + } + set + { + // *** Start programmer edit section *** (SecondLevel2.SecondLevel1 Set start) + + // *** End programmer edit section *** (SecondLevel2.SecondLevel1 Set start) + this.fSecondLevel1 = value; + // *** Start programmer edit section *** (SecondLevel2.SecondLevel1 Set end) + + // *** End programmer edit section *** (SecondLevel2.SecondLevel1 Set end) + } + } + + /// + /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel. + /// + // *** Start programmer edit section *** (SecondLevel2.FirstLevel CustomAttributes) + + // *** End programmer edit section *** (SecondLevel2.FirstLevel CustomAttributes) + [Agregator()] + [NotNull()] + [PropertyStorage(new string[] { + "FirstLevel"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel FirstLevel + { + get + { + // *** Start programmer edit section *** (SecondLevel2.FirstLevel Get start) + + // *** End programmer edit section *** (SecondLevel2.FirstLevel Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel result = this.fFirstLevel; + // *** Start programmer edit section *** (SecondLevel2.FirstLevel Get end) + + // *** End programmer edit section *** (SecondLevel2.FirstLevel Get end) + return result; + } + set + { + // *** Start programmer edit section *** (SecondLevel2.FirstLevel Set start) + + // *** End programmer edit section *** (SecondLevel2.FirstLevel Set start) + this.fFirstLevel = value; + // *** Start programmer edit section *** (SecondLevel2.FirstLevel Set end) + + // *** End programmer edit section *** (SecondLevel2.FirstLevel Set end) + } + } + } + + /// + /// Detail array of SecondLevel2. + /// + // *** Start programmer edit section *** (DetailArrayDetailArrayOfSecondLevel2 CustomAttributes) + + // *** End programmer edit section *** (DetailArrayDetailArrayOfSecondLevel2 CustomAttributes) + public class DetailArrayOfSecondLevel2 : ICSSoft.STORMNET.DetailArray + { + + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfSecondLevel2 members) + + // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfSecondLevel2 members) + + + /// + /// Construct detail array. + /// + /// + /// Returns object with type SecondLevel2 by index. + /// + /// + /// Adds object with type SecondLevel2. + /// + public DetailArrayOfSecondLevel2(NewPlatform.Flexberry.ORM.ODataService.Tests.FirstLevel fFirstLevel) : + base(typeof(SecondLevel2), ((ICSSoft.STORMNET.DataObject)(fFirstLevel))) + { + } + + public NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel2 this[int index] + { + get + { + return ((NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel2)(this.ItemByIndex(index))); + } + } + + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel2 dataobject) + { + this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); + } + } +} + diff --git a/Tests/Objects/TestAssociation.cs b/Tests/Objects/TestAssociation.cs new file mode 100644 index 00000000..130a4707 --- /dev/null +++ b/Tests/Objects/TestAssociation.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// TestAssociation. + /// + // *** Start programmer edit section *** (TestAssociation CustomAttributes) + + // *** End programmer edit section *** (TestAssociation CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class TestAssociation : NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel2 + { + + private string fName2; + + // *** Start programmer edit section *** (TestAssociation CustomMembers) + + // *** End programmer edit section *** (TestAssociation CustomMembers) + + + /// + /// Name2. + /// + // *** Start programmer edit section *** (TestAssociation.Name2 CustomAttributes) + + // *** End programmer edit section *** (TestAssociation.Name2 CustomAttributes) + [StrLen(255)] + public virtual string Name2 + { + get + { + // *** Start programmer edit section *** (TestAssociation.Name2 Get start) + + // *** End programmer edit section *** (TestAssociation.Name2 Get start) + string result = this.fName2; + // *** Start programmer edit section *** (TestAssociation.Name2 Get end) + + // *** End programmer edit section *** (TestAssociation.Name2 Get end) + return result; + } + set + { + // *** Start programmer edit section *** (TestAssociation.Name2 Set start) + + // *** End programmer edit section *** (TestAssociation.Name2 Set start) + this.fName2 = value; + // *** Start programmer edit section *** (TestAssociation.Name2 Set end) + + // *** End programmer edit section *** (TestAssociation.Name2 Set end) + } + } + } +} + diff --git a/Tests/Objects/TestClass.cs b/Tests/Objects/TestClass.cs new file mode 100644 index 00000000..9981ec17 --- /dev/null +++ b/Tests/Objects/TestClass.cs @@ -0,0 +1,106 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// TestClass. + /// + // *** Start programmer edit section *** (TestClass CustomAttributes) + + // *** End programmer edit section *** (TestClass CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class TestClass : NewPlatform.Flexberry.ORM.ODataService.Tests.SecondLevel1 + { + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfThirdLevel fThirdLevel; + + // *** Start programmer edit section *** (TestClass CustomMembers) + + // *** End programmer edit section *** (TestClass CustomMembers) + + + /// + /// Name. + /// + // *** Start programmer edit section *** (TestClass.Name CustomAttributes) + + // *** End programmer edit section *** (TestClass.Name CustomAttributes) + [StrLen(255)] + public override string Name + { + get + { + // *** Start programmer edit section *** (TestClass.Name Get start) + + // *** End programmer edit section *** (TestClass.Name Get start) + string result = base.Name; + // *** Start programmer edit section *** (TestClass.Name Get end) + + // *** End programmer edit section *** (TestClass.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (TestClass.Name Set start) + + // *** End programmer edit section *** (TestClass.Name Set start) + base.Name = value; + // *** Start programmer edit section *** (TestClass.Name Set end) + + // *** End programmer edit section *** (TestClass.Name Set end) + } + } + + /// + /// TestClass. + /// + // *** Start programmer edit section *** (TestClass.ThirdLevel CustomAttributes) + + // *** End programmer edit section *** (TestClass.ThirdLevel CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfThirdLevel ThirdLevel + { + get + { + // *** Start programmer edit section *** (TestClass.ThirdLevel Get start) + + // *** End programmer edit section *** (TestClass.ThirdLevel Get start) + if ((this.fThirdLevel == null)) + { + this.fThirdLevel = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfThirdLevel(this); + } + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfThirdLevel result = this.fThirdLevel; + // *** Start programmer edit section *** (TestClass.ThirdLevel Get end) + + // *** End programmer edit section *** (TestClass.ThirdLevel Get end) + return result; + } + set + { + // *** Start programmer edit section *** (TestClass.ThirdLevel Set start) + + // *** End programmer edit section *** (TestClass.ThirdLevel Set start) + this.fThirdLevel = value; + // *** Start programmer edit section *** (TestClass.ThirdLevel Set end) + + // *** End programmer edit section *** (TestClass.ThirdLevel Set end) + } + } + } +} + diff --git a/Tests/Objects/TestConfiguration.cs b/Tests/Objects/TestConfiguration.cs new file mode 100644 index 00000000..bd3d0ea4 --- /dev/null +++ b/Tests/Objects/TestConfiguration.cs @@ -0,0 +1,108 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// TestConfiguration. + /// + // *** Start programmer edit section *** (TestConfiguration CustomAttributes) + + // *** End programmer edit section *** (TestConfiguration CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class TestConfiguration : ICSSoft.STORMNET.DataObject + { + + private string fName; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfFirstLevel fFirstLevel; + + // *** Start programmer edit section *** (TestConfiguration CustomMembers) + + // *** End programmer edit section *** (TestConfiguration CustomMembers) + + + /// + /// Name. + /// + // *** Start programmer edit section *** (TestConfiguration.Name CustomAttributes) + + // *** End programmer edit section *** (TestConfiguration.Name CustomAttributes) + [StrLen(255)] + public virtual string Name + { + get + { + // *** Start programmer edit section *** (TestConfiguration.Name Get start) + + // *** End programmer edit section *** (TestConfiguration.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (TestConfiguration.Name Get end) + + // *** End programmer edit section *** (TestConfiguration.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (TestConfiguration.Name Set start) + + // *** End programmer edit section *** (TestConfiguration.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (TestConfiguration.Name Set end) + + // *** End programmer edit section *** (TestConfiguration.Name Set end) + } + } + + /// + /// TestConfiguration. + /// + // *** Start programmer edit section *** (TestConfiguration.FirstLevel CustomAttributes) + + // *** End programmer edit section *** (TestConfiguration.FirstLevel CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfFirstLevel FirstLevel + { + get + { + // *** Start programmer edit section *** (TestConfiguration.FirstLevel Get start) + + // *** End programmer edit section *** (TestConfiguration.FirstLevel Get start) + if ((this.fFirstLevel == null)) + { + this.fFirstLevel = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfFirstLevel(this); + } + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfFirstLevel result = this.fFirstLevel; + // *** Start programmer edit section *** (TestConfiguration.FirstLevel Get end) + + // *** End programmer edit section *** (TestConfiguration.FirstLevel Get end) + return result; + } + set + { + // *** Start programmer edit section *** (TestConfiguration.FirstLevel Set start) + + // *** End programmer edit section *** (TestConfiguration.FirstLevel Set start) + this.fFirstLevel = value; + // *** Start programmer edit section *** (TestConfiguration.FirstLevel Set end) + + // *** End programmer edit section *** (TestConfiguration.FirstLevel Set end) + } + } + } +} + diff --git a/Tests/Objects/TestMaster.cs b/Tests/Objects/TestMaster.cs index f894f6b5..0d957b26 100644 --- a/Tests/Objects/TestMaster.cs +++ b/Tests/Objects/TestMaster.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -34,16 +31,16 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "TestMasterName"})] public class TestMaster : ICSSoft.STORMNET.DataObject { - + private string fTestMasterName; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfTestDetailWithCicle fTestDetailWithCicle; - + // *** Start programmer edit section *** (TestMaster CustomMembers) // *** End programmer edit section *** (TestMaster CustomMembers) - + /// /// TestMasterName. /// @@ -75,7 +72,7 @@ public virtual string TestMasterName // *** End programmer edit section *** (TestMaster.TestMasterName Set end) } } - + /// /// TestMaster. /// @@ -110,13 +107,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfTestDet // *** End programmer edit section *** (TestMaster.TestDetailWithCicle Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "TestMasterE" view. /// @@ -127,7 +124,7 @@ public static ICSSoft.STORMNET.View TestMasterE return ICSSoft.STORMNET.Information.GetView("TestMasterE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.TestMaster)); } } - + /// /// "TestMasterL" view. /// @@ -141,3 +138,4 @@ public static ICSSoft.STORMNET.View TestMasterL } } } + diff --git a/Tests/Objects/ThirdLevel.cs b/Tests/Objects/ThirdLevel.cs new file mode 100644 index 00000000..448915d5 --- /dev/null +++ b/Tests/Objects/ThirdLevel.cs @@ -0,0 +1,150 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// ThirdLevel. + /// + // *** Start programmer edit section *** (ThirdLevel CustomAttributes) + + // *** End programmer edit section *** (ThirdLevel CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class ThirdLevel : ICSSoft.STORMNET.DataObject + { + + private string fName; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.TestClass fTestClass; + + // *** Start programmer edit section *** (ThirdLevel CustomMembers) + + // *** End programmer edit section *** (ThirdLevel CustomMembers) + + + /// + /// Name. + /// + // *** Start programmer edit section *** (ThirdLevel.Name CustomAttributes) + + // *** End programmer edit section *** (ThirdLevel.Name CustomAttributes) + [StrLen(255)] + public virtual string Name + { + get + { + // *** Start programmer edit section *** (ThirdLevel.Name Get start) + + // *** End programmer edit section *** (ThirdLevel.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (ThirdLevel.Name Get end) + + // *** End programmer edit section *** (ThirdLevel.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (ThirdLevel.Name Set start) + + // *** End programmer edit section *** (ThirdLevel.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (ThirdLevel.Name Set end) + + // *** End programmer edit section *** (ThirdLevel.Name Set end) + } + } + + /// + /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.TestClass. + /// + // *** Start programmer edit section *** (ThirdLevel.TestClass CustomAttributes) + + // *** End programmer edit section *** (ThirdLevel.TestClass CustomAttributes) + [Agregator()] + [NotNull()] + [PropertyStorage(new string[] { + "TestClass"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.TestClass TestClass + { + get + { + // *** Start programmer edit section *** (ThirdLevel.TestClass Get start) + + // *** End programmer edit section *** (ThirdLevel.TestClass Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.TestClass result = this.fTestClass; + // *** Start programmer edit section *** (ThirdLevel.TestClass Get end) + + // *** End programmer edit section *** (ThirdLevel.TestClass Get end) + return result; + } + set + { + // *** Start programmer edit section *** (ThirdLevel.TestClass Set start) + + // *** End programmer edit section *** (ThirdLevel.TestClass Set start) + this.fTestClass = value; + // *** Start programmer edit section *** (ThirdLevel.TestClass Set end) + + // *** End programmer edit section *** (ThirdLevel.TestClass Set end) + } + } + } + + /// + /// Detail array of ThirdLevel. + /// + // *** Start programmer edit section *** (DetailArrayDetailArrayOfThirdLevel CustomAttributes) + + // *** End programmer edit section *** (DetailArrayDetailArrayOfThirdLevel CustomAttributes) + public class DetailArrayOfThirdLevel : ICSSoft.STORMNET.DetailArray + { + + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfThirdLevel members) + + // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfThirdLevel members) + + + /// + /// Construct detail array. + /// + /// + /// Returns object with type ThirdLevel by index. + /// + /// + /// Adds object with type ThirdLevel. + /// + public DetailArrayOfThirdLevel(NewPlatform.Flexberry.ORM.ODataService.Tests.TestClass fTestClass) : + base(typeof(ThirdLevel), ((ICSSoft.STORMNET.DataObject)(fTestClass))) + { + } + + public NewPlatform.Flexberry.ORM.ODataService.Tests.ThirdLevel this[int index] + { + get + { + return ((NewPlatform.Flexberry.ORM.ODataService.Tests.ThirdLevel)(this.ItemByIndex(index))); + } + } + + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.ThirdLevel dataobject) + { + this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); + } + } +} + From b55156f9ff9a165ff352b82b6b2e8519372dd28d Mon Sep 17 00:00:00 2001 From: tosotova Date: Tue, 13 Feb 2024 11:14:29 +0500 Subject: [PATCH 47/77] Added test for situation of difficult batch --- .../CRUD/BatchTest.cs | 261 ++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs new file mode 100644 index 00000000..2b57a3c7 --- /dev/null +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs @@ -0,0 +1,261 @@ +namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Update +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Net; + using System.Net.Http; + + using ICSSoft.STORMNET; + using ICSSoft.STORMNET.Business.LINQProvider; + using ICSSoft.STORMNET.KeyGen; + using NewPlatform.Flexberry.ORM.ODataService.Tests.Extensions; + using NewPlatform.Flexberry.ORM.ODataService.Tests.Helpers; + using Xunit; + using View = ICSSoft.STORMNET.View; + + /// + /// The class of tests for CRUD operations at Batch form. + /// There are extra batch tests at . + /// + public class BatchTest : BaseODataServiceIntegratedTest + { +#if NETCOREAPP + /// + /// Default constructor. + /// + /// Factory for application. + /// Output for debug information. + public BatchTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + : base(factory, output) + { + } +#endif + + /// + /// Test batch update of master-class with class at the same time. + /// It checks that dataobject cache is not crashed. + /// + [Fact] + public void UpdateMasterAndClassTest() + { + /* Суть теста в том, что сначала в батч-запрос идёт мастер, а далее идёт сам объект со ссылкой на мастера. + * Ссылка на мастера не меняется при этом. + * Необходимо, чтобы при последовательной обработке батчей мастер не был перевычитан и его значение обновилось корректно. + */ + ActODataService(args => + { + // Arrange. + string[] porodaPropertiesNames = + { + Information.ExtractPropertyPath<Порода>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Порода>(x => x.Название), + }; + string[] koshkaPropertiesNames = + { + Information.ExtractPropertyPath<Кошка>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Кошка>(x => x.Кличка), + }; + View porodaDynamicView = new View(new ViewAttribute("porodaDynamicView", porodaPropertiesNames), typeof(Порода)); + View koshkaDynamicView = new View(new ViewAttribute("koshkaDynamicView", koshkaPropertiesNames), typeof(Кошка)); + + const string InitialName = "Initial"; + const string OtherName = "Other"; + Порода poroda = new Порода() { Название = InitialName }; + Кошка koshka = new Кошка() { Кличка = InitialName, Порода = poroda}; + args.DataService.UpdateObject(koshka); + + Порода poroda1 = args.DataService.Query<Порода>(porodaDynamicView).FirstOrDefault(x => x.__PrimaryKey == poroda.__PrimaryKey); + Кошка koshka1 = args.DataService.Query<Кошка>(koshkaDynamicView).FirstOrDefault(x => x.__PrimaryKey == koshka.__PrimaryKey); + Assert.NotNull(poroda1); + Assert.NotNull(koshka1); + + poroda.Название = OtherName; + koshka.Кличка = OtherName; + + string requestJsonDatakoshka = koshka.ToJson(koshkaDynamicView, args.Token.Model); + DataObjectDictionary objJsonKoshka = DataObjectDictionary.Parse(requestJsonDatakoshka, koshkaDynamicView, args.Token.Model); + + objJsonKoshka.Add( + $"{nameof(Кошка.Порода)}@odata.bind", + string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Порода)).Name, + ((KeyGuid)poroda.__PrimaryKey).Guid.ToString("D"))); + + requestJsonDatakoshka = objJsonKoshka.Serialize(); + + const string baseUrl = "http://localhost/odata"; + string[] changesets = new[] // Важно, чтобы сначала шёл мастер, потом объект, имеющий на него ссылку. + { + + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Порода)).Name}", + poroda.ToJson(porodaDynamicView, args.Token.Model), + poroda), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name}", + requestJsonDatakoshka, + koshka), + }; + + // Act. + HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); + using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) + { + // Assert. + CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); + Порода poroda2 = args.DataService.Query<Порода>(porodaDynamicView).FirstOrDefault(x => x.__PrimaryKey == poroda.__PrimaryKey); + Кошка koshka2 = args.DataService.Query<Кошка>(koshkaDynamicView).FirstOrDefault(x => x.__PrimaryKey == koshka.__PrimaryKey); + Assert.NotNull(poroda2); + Assert.NotNull(koshka2); + Assert.Equal(OtherName, poroda2.Название); + Assert.Equal(OtherName, koshka2.Кличка); + } + }); + } + + /// + /// Test batch update with inheritance. + /// It checks that dataobject cache is not crashed. + /// + [Fact] + public void UpdateWithInheritanceAndDetailsTest() + { + /* Суть теста в том, что есть класс А, у него детейл Б, у которого есть наследник В. + * При загрузке объекта класса А подгрузятся его детейлы, однако они будут подгружены по представлению, которое соответствует классу Б, даже если детейлы класса В. + * Таким образом, в кэше окажутся объекты класса В, которые загружены только по свойствам Б. Раз не все свойства подгружены, то состояние LightLoaded. + * Догружать необходимо только те свойства, что ещё не загружались (потому что загруженные уже могут быть изменены). + * + * Необходимо, чтобы при последовательной обработке батча все значения обновились корректно. + */ + ActODataService(args => + { + // Arrange. + const string InitialName = "Initial"; + const string OtherName = "Other"; + TestConfiguration testConfiguration = new TestConfiguration() { Name = InitialName }; + FirstLevel first = new FirstLevel() { Name = InitialName, TestConfiguration = testConfiguration }; + TestClass second1 = new TestClass { Name = InitialName, FirstLevel = first }; + TestAssociation second2 = new TestAssociation { Name = InitialName, FirstLevel = first, SecondLevel1 = second1 }; + ThirdLevel third = new ThirdLevel { Name = InitialName, TestClass = second1 }; + DataObject[] updateObjects = new DataObject[] { testConfiguration, first, second1, second2, third }; + args.DataService.UpdateObjects(ref updateObjects); + + second2.Name = OtherName; // Изменение значения детейла одного типа, который имеет мастеровую ссылку на детейл второго типа (второй тип имеет детейл собственный). + ThirdLevel third2 = new ThirdLevel { Name = OtherName, TestClass = second1 }; // Добавление детейлов в детейл второго типа. + + string[] firstPropertiesNames = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.Name), + }; + View firstLevelDynamicView = new View(new ViewAttribute("firstLevelDynamicView", firstPropertiesNames), typeof(FirstLevel)); + + string[] second1PropertiesNames = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.Name), + }; + View second1DynamicView = new View(new ViewAttribute("second1DynamicView", second1PropertiesNames), typeof(TestClass)); + + string[] second2PropertiesNames = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.Name), + }; + View second2DynamicView = new View(new ViewAttribute("second2DynamicView", second2PropertiesNames), typeof(TestAssociation)); + + string[] thirdPropertiesNames = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.Name), + }; + View thirdLevelDynamicView = new View(new ViewAttribute("thirdDynamicView", thirdPropertiesNames), typeof(ThirdLevel)); + + // Операция изменения детейла второго типа (он попадает в батч-запрос как агрегатор к добавляемому детейлу второго уровня). + string requestJsonDataSecond1 = second1.ToJson(second1DynamicView, args.Token.Model); + DataObjectDictionary objJsonSecond1 = DataObjectDictionary.Parse(requestJsonDataSecond1, second1DynamicView, args.Token.Model); + objJsonSecond1.Add( // Добавляется ссылка на агрегатор. + $"{nameof(TestClass.FirstLevel)}@odata.bind", + string.Format("{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(FirstLevel)).Name, ((KeyGuid)first.__PrimaryKey).Guid.ToString("D"))); + requestJsonDataSecond1 = objJsonSecond1.Serialize(); + + // Операция вставки детейла второго уровня. + string requestJsonDataThird2 = third2.ToJson(thirdLevelDynamicView, args.Token.Model); + DataObjectDictionary objJsonThird2 = DataObjectDictionary.Parse(requestJsonDataThird2, thirdLevelDynamicView, args.Token.Model); + objJsonThird2.Add( // Добавляется ссылка на агрегатор. + $"{nameof(ThirdLevel.TestClass)}@odata.bind", + string.Format("{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(TestClass)).Name, ((KeyGuid)second1.__PrimaryKey).Guid.ToString("D"))); + requestJsonDataThird2 = objJsonThird2.Serialize(); + + // Операция изменения детейла первого типа. + string requestJsonDataSecond2 = second2.ToJson(second2DynamicView, args.Token.Model); + DataObjectDictionary objJsonSecond2 = DataObjectDictionary.Parse(requestJsonDataSecond2, second2DynamicView, args.Token.Model); + objJsonSecond2.Add( // Добавляется ссылка на агрегатор. + $"{nameof(TestAssociation.FirstLevel)}@odata.bind", + string.Format("{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(FirstLevel)).Name, ((KeyGuid)first.__PrimaryKey).Guid.ToString("D"))); + objJsonSecond2.Add( // Добавляется ссылка мастеровая на другой детейл. + $"{nameof(TestAssociation.SecondLevel1)}@odata.bind", + string.Format("{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(TestClass)).Name, ((KeyGuid)second1.__PrimaryKey).Guid.ToString("D"))); + requestJsonDataSecond2 = objJsonSecond2.Serialize(); + + const string baseUrl = "http://localhost/odata"; + string[] changesets = new[] + { + + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(TestClass)).Name}", + requestJsonDataSecond1, + second1), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(ThirdLevel)).Name}", + requestJsonDataThird2, + third2), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(TestAssociation)).Name}", + requestJsonDataSecond2, + second2), + }; + HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); + + // Код для удобства отлавливания исключений. + args.Token.Events.CallbackAfterInternalServerError = (Exception exception, ref HttpStatusCode code) => + { + Exception currentException = exception; + + while (currentException != null) + { + currentException = currentException.InnerException; + } + + return exception; + }; + + // Act. + using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) + { + // Assert. + CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); + + string[] thirdPropertiesNames2 = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.Name), + Information.ExtractPropertyPath(x => x.TestClass), + }; + View thirdLevelDynamicView2 = new View(new ViewAttribute("thirdDynamicView2", thirdPropertiesNames2), typeof(ThirdLevel)); + List thirdLevelList = args.DataService.Query(thirdLevelDynamicView2).Where(x => x.TestClass.__PrimaryKey == second1.__PrimaryKey).ToList(); + Assert.NotNull(thirdLevelList); + Assert.True(thirdLevelList.Any()); + Assert.Equal(2, thirdLevelList.Count); + + TestAssociation checkAssociation = args.DataService.Query(second2DynamicView).FirstOrDefault(x => x.__PrimaryKey == second2.__PrimaryKey); + Assert.NotNull(checkAssociation); + Assert.Equal(OtherName, checkAssociation.Name); + } + }); + } + } +} + From 3fdcda21e3ce4e38b31140d966798d0666a40fe4 Mon Sep 17 00:00:00 2001 From: tosotova Date: Wed, 14 Feb 2024 09:01:36 +0500 Subject: [PATCH 48/77] Correction of master and detail loading without cache damage --- .../DataObjectController.ModifyData.cs | 10 +- .../Extensions/DataServiceExtensions.cs | 167 +++++++++++++++++- 2 files changed, 170 insertions(+), 7 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs index 074b815d..9b355276 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs @@ -722,7 +722,13 @@ private DataObject ReturnDataObject(Type objType, object keyValue) && dataObjectFromCache.GetLoadingState() != LoadingState.Loaded) { // Для обратной совместимости сравним перечень загруженных свойств и свойств в представлении. - // TODO: удалить эту проверку после стабилизации версии 5.1.0. + /* Данный код срабатывает, например, если в кэше был объект, который загрузился только на уровне первичного ключа. + * + * Данный код также срабатывает в следующей ситуации: есть класс А, у него детейл Б, у которого есть наследник В. + * При загрузке объекта класса А подгрузятся его детейлы, однако они будут подгружены по представлению, которое соответствует классу Б, даже если детейлы класса В. + * Таким образом, в кэше окажутся объекты класса В, которые загружены только по свойствам Б. Раз не все свойства подгружены, то состояние LightLoaded. + * Догружать необходимо только те свойства, что ещё не загружались (потому что загруженные уже могут быть изменены). + */ string[] loadedProps = dataObjectFromCache.GetLoadedProperties(); IEnumerable ownProps = view.Properties.Where(p => !p.Name.Contains('.')); if (!ownProps.All(p => loadedProps.Contains(p.Name))) @@ -731,7 +737,7 @@ private DataObject ReturnDataObject(Type objType, object keyValue) View miniView = view.Clone(); DetailInView[] miniViewDetails = miniView.Details; miniView.Details = new DetailInView[0]; - _dataService.LoadObject(miniView, dataObjectFromCache, false, true, DataObjectCache); + _dataService.SafeLoadWithMasters(miniView, dataObjectFromCache, DataObjectCache); if (miniViewDetails.Length > 0) { diff --git a/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs b/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs index 9d0ddd9b..9b29e2e3 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs @@ -34,6 +34,53 @@ public static object Execute(this SQLDataService dataService, Type dataObjectTyp return queryProvider.Execute(expression); } + /// + /// Загрузка объекта с его мастерами (объект должен быть не изменнённый и не до конца загруженный). + /// С мастерами необходимо обращаться аккуратно: если в кэше уже есть мастер, то нужно эту ситуацию разрешить, + /// поскольку иначе стандартная загрузка перетрёт данные мастера в кэше (и если он там изменён, то все изменения будут потеряны). + /// + /// Экземпляр сервиса данных. + /// Представление объекта с мастерами. + /// Объект данных, в который будет производиться загрузка. + /// Текущий кэш объектов данных (в данном кэше ранее существующие там объекты не должны быть перетёрты). + public static void SafeLoadWithMasters( + this IDataService dataService, View view, ICSSoft.STORMNET.DataObject dobjectFromCache, DataObjectCache dataObjectCache) + { + if (dataService == null) + { + throw new ArgumentNullException(nameof(dataService)); + } + + if (view == null) + { + throw new ArgumentNullException(nameof(view)); + } + + if (dobjectFromCache == null) + { + throw new ArgumentNullException(nameof(dobjectFromCache)); + } + + if (dataObjectCache == null) + { + throw new ArgumentNullException(nameof(dataObjectCache)); + } + + // Прогружается пустой объект, чтобы избежать риска перетирания основного. + DataObject createdObject = (DataObject)Activator.CreateInstance(dobjectFromCache.GetType()); + createdObject.SetExistObjectPrimaryKey(dobjectFromCache.__PrimaryKey); + + // Используется отдельный кэш, чтобы не перетереть данные в основном кэше. + DataObjectCache specialCache = new DataObjectCache(); + specialCache.StartCaching(false); + specialCache.AddDataObject(createdObject); + dataService.LoadObject(view, createdObject, false, true, specialCache); + specialCache.StopCaching(); + + // Перенос данных из одного объекта в другой. + ProperUpdateOfObject(dobjectFromCache, createdObject, dataObjectCache, specialCache); + } + /// /// Загрузка детейлов с сохранением состояния изменения. /// @@ -122,20 +169,19 @@ public static void SafeLoadDetails(this IDataService dataService, View view, ILi lcs.LimitFunction = FunctionBuilder.BuildIn(agregatorPropertyName, SQLWhereLanguageDef.LanguageDef.GetObjectTypeForNetType(agregatorKeyType), keys); // Нужно соблюсти единственность инстанций агрегаторов при вычитке, поэтому реализуем отдельный кеш. Смешивать с кешем dataObjectCache нельзя, поскольку в предстоящей выборке будут те же самые детейлы (значения в кеше затрутся). + // Агрегаторы в кэш не помещаем. От помещения агрегаторов в кэш возникают неконтролируемые сбои основного кэша. DataObjectCache agregatorCache = new DataObjectCache(); agregatorCache.StartCaching(false); - foreach (DataObject agregator in agregators) - { - agregatorCache.AddDataObject(agregator); - } // Вычитываются детейлы одного типа, но для нескольких инстанций агрегаторов (оптимизируем количество SQL-запросов). DataObject[] loadedDetails = dataService.LoadObjects(lcs, agregatorCache); agregatorCache.StopCaching(); + Dictionary extraCacheForAgregators = new Dictionary(); foreach (DataObject agregator in agregators) { agregator.AddLoadedProperties(detailInView.Name); + extraCacheForAgregators.Add(agregator.__PrimaryKey, agregator); } // Ввиду того, что агрегаторы нам пришли готовые с пустыми коллекциями детейлов, заполняем детейлы по агрегаторам значениями из кеша или из базы. @@ -143,7 +189,8 @@ public static void SafeLoadDetails(this IDataService dataService, View view, ILi List toLoadSecondDetails = new List(); foreach (DataObject loadedDetail in loadedDetails) { - DataObject agregator = (DataObject)Information.GetPropValueByName(loadedDetail, agregatorPropertyName); + DataObject agregatorTemp = (DataObject)Information.GetPropValueByName(loadedDetail, agregatorPropertyName); + DataObject agregator = extraCacheForAgregators[agregatorTemp.__PrimaryKey]; object detailPrimaryKey = loadedDetail.__PrimaryKey; DataObject detailFromCache = dataObjectCache.GetLivingDataObject(loadedDetail.GetType(), detailPrimaryKey); @@ -226,5 +273,115 @@ public static void AddDetail(this DataObject agregator, DataObject detail) LogService.LogWarn($"Detail type {detailType.AssemblyQualifiedName} not found in agregator of type {agregatorType.AssemblyQualifiedName}."); } } + + + /// + /// Перенос означенных свойств из свежезагруженного объекта в основной, расположенный в основном кэше. + /// + /// Основной объект, куда необходимо копировать значения свойств. + /// Свежезагруженный объект. + /// Основной кэш. + /// Локальный кэш, куда была выполнена свежая прогрузка. + private static void ProperUpdateOfObject(DataObject currentObject, DataObject loadedObjectLocal, DataObjectCache dataObjectCache, DataObjectCache dataObjectCacheLocal) + { + if (currentObject == null) + { + throw new ArgumentNullException(nameof(currentObject)); + } + + if (loadedObjectLocal == null) + { + throw new ArgumentNullException(nameof(loadedObjectLocal)); + } + + if (dataObjectCache == null) + { + throw new ArgumentNullException(nameof(dataObjectCache)); + } + + if (dataObjectCacheLocal == null) + { + throw new ArgumentNullException(nameof(dataObjectCacheLocal)); + } + + // Перенос значений свойств объекта (в том числе могут быть мастера). Если мастера означены, то перенос свойств мастера производится далее. + List localObjectLoadedProps = loadedObjectLocal.GetLoadedPropertiesList(); + List currentObjectLoadedProps = currentObject.GetLoadedPropertiesList(); + List notLoadedForActual = localObjectLoadedProps.Except(currentObjectLoadedProps).ToList(); + DataObject currentDataCopy = currentObject.GetDataCopy(); + foreach (string notLoadedPropName in notLoadedForActual) + { + object propValue = Information.GetPropValueByName(loadedObjectLocal, notLoadedPropName); + Information.SetPropValueByName(currentObject, notLoadedPropName, propValue); + currentObject.AddLoadedProperties(notLoadedPropName); + Information.SetPropValueByName(currentDataCopy, notLoadedPropName, propValue); + } + + // Ещё могут быть частично загруженные мастера. + ProperCacheUpdateForOneObject(dataObjectCache, dataObjectCacheLocal, loadedObjectLocal, true); + } + + /// + /// Обновление кэша по свежезагруженному объекту. + /// + /// Текущий основной кэш объектов. + /// Вспомогательный кэш, куда загружался объект. + /// Свежезагруженный объект, по которому обновляется основной кэш. + /// Флаг, определяющий, что в кэш уже добавлен свежезагруженный объект. + private static void ProperCacheUpdateForOneObject(DataObjectCache dataObjectCacheActual, DataObjectCache dataObjectCacheWithMasters, DataObject loadedDataObject, bool loadedObjectsAdded) + { + if (dataObjectCacheActual == null) + { + throw new ArgumentNullException(nameof(dataObjectCacheActual)); + } + + if (dataObjectCacheWithMasters == null) + { + throw new ArgumentNullException(nameof(dataObjectCacheWithMasters)); + } + + if (loadedDataObject == null) + { + return; + } + + if (!loadedObjectsAdded) + { + dataObjectCacheActual.AddDataObject(loadedDataObject); + } + + Type dobjType = typeof(DataObject); + Type currentType = loadedDataObject.GetType(); + List loadedProperties = loadedDataObject.GetLoadedPropertiesList(); + foreach (string currentPropertyName in loadedProperties) + { + Type currentPropertyType = Information.GetPropertyType(currentType, currentPropertyName); + if (currentPropertyType.IsSubclassOf(dobjType)) // Выбираем у текущего объекта ссылки на мастеров. + { + DataObject currentMaster = (DataObject)Information.GetPropValueByName(loadedDataObject, currentPropertyName); + if (currentMaster != null) + { + // Типы currentPropertyType и currentMaster.GetType() могут различаться из-за наследования. + DataObject masterFromActualCache = dataObjectCacheActual.GetLivingDataObject(currentMaster.GetType(), currentMaster.__PrimaryKey); + + if (masterFromActualCache == null) + { // Если мастера ранее не было в кэше, то просто его туда переносим. + dataObjectCacheActual.AddDataObject(currentMaster); + + // Но в добавленном мастере могут быть мастера 2 и далее уровней. + ProperCacheUpdateForOneObject(dataObjectCacheActual, dataObjectCacheWithMasters, currentMaster, true); + } + else + { // Если мастер был в кэше, то аккуратно нужно перенести только незагруженные ранее свойства. + if (masterFromActualCache.GetStatus(false) == ObjectStatus.UnAltered && masterFromActualCache.GetLoadingState() != LoadingState.Loaded) + { + ProperUpdateOfObject(masterFromActualCache, currentMaster, dataObjectCacheActual, dataObjectCacheWithMasters); + } + } + } + } + } + } + } } From cf9a4b4ee68f7e593f9ababf32c85811c20480b6 Mon Sep 17 00:00:00 2001 From: tosotova Date: Wed, 14 Feb 2024 09:55:32 +0500 Subject: [PATCH 49/77] Updated Flexberry ODataService up to 7.2.0-beta01 --- CHANGELOG.md | 4 ++-- NewPlatform.Flexberry.ORM.ODataService.nuspec | 11 +++-------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 850d3165..cd386d32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,11 +9,11 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Changed ### Fixed +1. Fixed loading of object with crushing of already loaded masters. +2. Fixed loading of details. ## [7.1.1] - 2023.06.08 -### Added - ### Changed 1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.1`. 2. Get properties from objects for send it to frontend always rethrow exception now. diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 7f32de62..f8b448ee 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 7.1.1 + 7.2.0-beta01 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -12,14 +12,9 @@ true Flexberry ORM OData Service Package. - Changed - 1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.1`. - 2. Get properties from objects for send it to frontend always rethrow exception now. - Fixed - 1. Fixed problem with metadata when inheritance and PublishName is used. - 2. Safe load details with complex type usage hierarchy. - + 1. Fixed loading of object with crushing of already loaded masters. + 2. Fixed loading of details. Copyright New Platform Ltd 2023 Flexberry ORM OData ODataService From bf5481949ededaf15c2460e91405d854b8eda0e0 Mon Sep 17 00:00:00 2001 From: tosotova Date: Wed, 14 Feb 2024 10:57:16 +0500 Subject: [PATCH 50/77] Fixed batch test for .net4.5 --- .../CRUD/BatchTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs index 2b57a3c7..629b7f8d 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs @@ -236,7 +236,7 @@ public void UpdateWithInheritanceAndDetailsTest() using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) { // Assert. - CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); + CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.Created, HttpStatusCode.OK }); string[] thirdPropertiesNames2 = { From 3b3f3663a88c51d74f8aca7476e846f1c2cf19db Mon Sep 17 00:00:00 2001 From: tosotova Date: Wed, 14 Feb 2024 14:11:48 +0500 Subject: [PATCH 51/77] Changes by CR --- .../Extensions/DataServiceExtensions.cs | 3 ++- .../CRUD/BatchTest.cs | 16 +++++----------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs b/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs index 9b29e2e3..e0245aa6 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs @@ -365,7 +365,8 @@ private static void ProperCacheUpdateForOneObject(DataObjectCache dataObjectCach DataObject masterFromActualCache = dataObjectCacheActual.GetLivingDataObject(currentMaster.GetType(), currentMaster.__PrimaryKey); if (masterFromActualCache == null) - { // Если мастера ранее не было в кэше, то просто его туда переносим. + { + // Если мастера ранее не было в кэше, то просто его туда переносим. dataObjectCacheActual.AddDataObject(currentMaster); // Но в добавленном мастере могут быть мастера 2 и далее уровней. diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs index 629b7f8d..c0de8995 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs @@ -35,14 +35,12 @@ public BatchTest(CustomWebApplicationFactory /// Test batch update of master-class with class at the same time. /// It checks that dataobject cache is not crashed. + /// There are a master and object with link to master at batch request. Master is the first at the batch request. The link between object and master is not changed. + /// It is necessary that during batch processing master stay the same and is not overwriten. /// [Fact] public void UpdateMasterAndClassTest() { - /* Суть теста в том, что сначала в батч-запрос идёт мастер, а далее идёт сам объект со ссылкой на мастера. - * Ссылка на мастера не меняется при этом. - * Необходимо, чтобы при последовательной обработке батчей мастер не был перевычитан и его значение обновилось корректно. - */ ActODataService(args => { // Arrange. @@ -118,17 +116,13 @@ public void UpdateMasterAndClassTest() /// /// Test batch update with inheritance. /// It checks that dataobject cache is not crashed. + /// There are classes A, its detail B, that has descendant C. During class A loading its details are loaded too, but details are loaded by View of class B, while details are of class C. + /// Thus there are objects of type C at the cache while they are loaded by properties of class B only. That's why the state of details is LightLoaded. + /// It is necessary to post-load only propertues that are not loaded before (loaded properties can be changed). /// [Fact] public void UpdateWithInheritanceAndDetailsTest() { - /* Суть теста в том, что есть класс А, у него детейл Б, у которого есть наследник В. - * При загрузке объекта класса А подгрузятся его детейлы, однако они будут подгружены по представлению, которое соответствует классу Б, даже если детейлы класса В. - * Таким образом, в кэше окажутся объекты класса В, которые загружены только по свойствам Б. Раз не все свойства подгружены, то состояние LightLoaded. - * Догружать необходимо только те свойства, что ещё не загружались (потому что загруженные уже могут быть изменены). - * - * Необходимо, чтобы при последовательной обработке батча все значения обновились корректно. - */ ActODataService(args => { // Arrange. From e173233b68c0b90fa5115cc0f69f68540a338a55 Mon Sep 17 00:00:00 2001 From: tosotova Date: Fri, 16 Feb 2024 09:14:10 +0500 Subject: [PATCH 52/77] Full regeneration of objects --- ...tform.Flexberry.ORM.ODataService.Tests.crp | 128 +- .../SqlScripts/MSSql.create.sql | 24 +- .../SqlScripts/Oracle.create.sql | 39 +- .../SqlScripts/PostgreSql.create.sql | 22 +- Tests/Objects/AgrClass1.cs | 24 +- Tests/Objects/AgrClass2.cs | 24 +- ...torWithSameMAndD.cs => AgregatorSameMD.cs} | 3 +- Tests/Objects/BaseLegoBlock.cs | 89 +- Tests/Objects/Car.cs | 104 +- Tests/Objects/Child.cs | 306 +++-- Tests/Objects/Daughter.cs | 148 ++- Tests/Objects/DetailAndMaster.cs | 3 +- Tests/Objects/DetailsClass1.cs | 38 +- Tests/Objects/DetailsClass2.cs | 34 +- Tests/Objects/Driver.cs | 98 +- Tests/Objects/LegoBlock.cs | 165 ++- Tests/Objects/LegoBlockBottomPanel.cs | 96 +- Tests/Objects/LegoBlockColor.cs | 84 +- Tests/Objects/LegoBlockCustomPanel.cs | 42 +- Tests/Objects/LegoBlockTopPanel.cs | 104 +- Tests/Objects/LegoBlockTopPanelHole.cs | 34 +- Tests/Objects/LegoDevice.cs | 24 +- Tests/Objects/LegoMaterial.cs | 20 +- Tests/Objects/LegoPanelAngle.cs | 84 +- Tests/Objects/LegoPatent.cs | 134 +- Tests/Objects/LegoSocketStandard.cs | 20 +- Tests/Objects/MainClass.cs | 24 +- Tests/Objects/Master.cs | 20 +- Tests/Objects/Person.cs | 226 ++-- Tests/Objects/Son.cs | 148 ++- Tests/Objects/TestDetailWithCicle.cs | 44 +- Tests/Objects/tTip.cs | 30 +- "Tests/Objects/t\320\237\320\276\320\273.cs" | 20 +- ...20\220\320\262\321\202\320\276\321\200.cs" | 24 +- ...20\232\320\273\320\260\321\201\321\201.cs" | 32 +- ...21\200\320\273\320\276\320\263\320\260.cs" | 190 ++- ...20\276\321\202\320\265\320\272\320\260.cs" | 32 +- ...20\221\320\273\320\276\321\205\320\260.cs" | 28 +- ...20\265\321\202\320\265\320\271\320\273.cs" | 42 +- ...0\265\321\202\320\265\320\271\320\2732.cs" | 34 +- ...20\265\320\264\320\275\320\270\320\272.cs" | 24 +- ...20\232\320\273\320\260\321\201\321\201.cs" | 24 +- ...21\203\321\200\320\275\320\260\320\273.cs" | 46 +- ...0\273\320\260\321\201\321\201NotStored.cs" | 24 +- ...3\320\260\321\201\321\201StoredDerived.cs" | 24 +- ...20\242\320\270\320\277\320\276\320\262.cs" | 892 +++++++------ ...20\273\321\216\321\207\320\276\320\274.cs" | 20 +- ...20\232\320\275\320\270\320\263\320\260.cs" | 42 +- ...21\202\320\265\320\275\320\276\320\272.cs" | 278 ++-- ...20\232\320\276\321\210\320\272\320\260.cs" | 800 ++++++------ .../\320\233\320\260\320\277\320\260.cs" | 1128 ++++++++--------- "Tests/Objects/\320\233\320\265\321\201.cs" | 162 ++- ...20\260\321\201\321\202\320\265\321\200.cs" | 24 +- ...0\260\321\201\321\202\320\265\321\2002.cs" | 20 +- ...20\264\320\262\320\265\320\264\321\214.cs" | 404 +++--- ...20\265\320\264\320\275\320\270\320\272.cs" | 90 +- ...21\200\320\265\320\273\320\276\320\274.cs" | 368 +++--- ...20\276\321\200\320\276\320\264\320\260.cs" | 328 +++-- ...20\272\320\232\320\275\320\270\320\263.cs" | 28 +- ...20\276\321\200\320\276\320\275\320\260.cs" | 90 +- ...21\202\321\200\320\260\320\275\320\260.cs" | 26 +- ...20\232\320\276\321\210\320\272\320\270.cs" | 90 +- ...20\277\320\233\320\260\320\277\321\213.cs" | 210 ++- ...20\265\320\273\320\276\320\274\320\260.cs" | 80 +- ...20\276\321\200\320\276\320\264\321\213.cs" | 210 ++- ...20\246\320\270\321\204\321\200\320\260.cs" | 34 +- 66 files changed, 4066 insertions(+), 4185 deletions(-) rename Tests/Objects/{AgregatorWithSameMAndD.cs => AgregatorSameMD.cs} (95%) diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp index 9160c98b..7b58aff7 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp @@ -1,5 +1,5 @@ - + @@ -73,7 +73,7 @@ - + @@ -128,7 +128,7 @@ - + @@ -166,14 +166,14 @@ - - - - - - - - + + + + + + + + @@ -253,8 +253,8 @@ - - + + @@ -286,9 +286,9 @@ - - - + + + @@ -385,16 +385,16 @@ - - - - - - - - - - + + + + + + + + + + @@ -432,8 +432,8 @@ - - + + @@ -467,7 +467,7 @@ - + @@ -486,8 +486,8 @@ - - + + @@ -507,7 +507,7 @@ - + @@ -540,7 +540,7 @@ - + @@ -632,7 +632,7 @@ - + @@ -707,7 +707,7 @@ - + @@ -760,9 +760,9 @@ - - - + + + @@ -815,10 +815,10 @@ - - - - + + + + @@ -915,15 +915,6 @@ - - - - - - - - - @@ -996,6 +987,15 @@ + + + + + + + + + @@ -1245,72 +1245,72 @@ - + - + - + - + - + - + - + - + - - + + - + - - + + diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/MSSql.create.sql b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/MSSql.create.sql index 28ea2175..d7dd68e5 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/MSSql.create.sql +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/MSSql.create.sql @@ -790,17 +790,6 @@ CREATE TABLE [Кошка] ( PRIMARY KEY ([primaryKey])) -CREATE TABLE [AgregatorSameMD] ( - - [primaryKey] UNIQUEIDENTIFIER NOT NULL, - - [Name] VARCHAR(255) NULL, - - [Master] UNIQUEIDENTIFIER NULL, - - PRIMARY KEY ([primaryKey])) - - CREATE TABLE [DetailAndMaster] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, @@ -811,6 +800,7 @@ CREATE TABLE [DetailAndMaster] ( PRIMARY KEY ([primaryKey])) + CREATE TABLE [TestConfiguration] ( [primaryKey] UNIQUEIDENTIFIER NOT NULL, @@ -895,6 +885,18 @@ CREATE TABLE [TestAssociation] ( PRIMARY KEY ([primaryKey])) + +CREATE TABLE [AgregatorSameMD] ( + + [primaryKey] UNIQUEIDENTIFIER NOT NULL, + + [Name] VARCHAR(255) NULL, + + [Master] UNIQUEIDENTIFIER NULL, + + PRIMARY KEY ([primaryKey])) + + CREATE TABLE [STORMNETLOCKDATA] ( [LockKey] VARCHAR(300) NOT NULL, diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/Oracle.create.sql b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/Oracle.create.sql index 5415841c..0b914716 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/Oracle.create.sql +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/Oracle.create.sql @@ -893,18 +893,6 @@ CREATE TABLE "Кошка" PRIMARY KEY ("primaryKey") ) ; -CREATE TABLE "AgregatorSameMD" -( - - "primaryKey" RAW(16) NOT NULL, - - "Name" NVARCHAR2(255) NULL, - - "Master" RAW(16) NULL, - - PRIMARY KEY ("primaryKey") -) ; - CREATE TABLE "DetailAndMaster" ( @@ -1018,6 +1006,19 @@ CREATE TABLE "TestAssociation" ) ; +CREATE TABLE "AgregatorSameMD" +( + + "primaryKey" RAW(16) NOT NULL, + + "Name" NVARCHAR2(255) NULL, + + "Master" RAW(16) NULL, + + PRIMARY KEY ("primaryKey") +) ; + + CREATE TABLE "STORMNETLOCKDATA" ( @@ -1574,15 +1575,8 @@ ALTER TABLE "Кошка" CREATE INDEX "Кошка_IПорода_m0" on "Кошка" ("Порода_m0"); -ALTER TABLE "AgregatorSameMD" - ADD CONSTRAINT "AgregatorSameMD_FDe_217" FOREIGN KEY ("Master") REFERENCES "DetailAndMaster" ("primaryKey"); - -CREATE INDEX "AgregatorSameMD_IMaster" on "AgregatorSameMD" ("Master"); - ALTER TABLE "DetailAndMaster" - ADD CONSTRAINT "DetailAndMaster_FAgregator_188" FOREIGN KEY ("Agregator") REFERENCES "AgregatorSameMD" ("primaryKey"); - -CREATE INDEX "DetailAndMaster_IAgregator" on "DetailAndMaster" ("Agregator"); + ADD CONSTRAINT "DetailAndMaster_FAgregato_2594" FOREIGN KEY ("Agregator") REFERENCES "AgregatorSameMD" ("primaryKey"); CREATE INDEX "DetailAndMaster_IAgregator" on "DetailAndMaster" ("Agregator"); @@ -1636,6 +1630,11 @@ ALTER TABLE "TestAssociation" CREATE INDEX "TestAssociation_IFirstLevel" on "TestAssociation" ("FirstLevel"); +ALTER TABLE "AgregatorSameMD" + ADD CONSTRAINT "AgregatorSameMD_FDetailAn_6200" FOREIGN KEY ("Master") REFERENCES "DetailAndMaster" ("primaryKey"); + +CREATE INDEX "AgregatorSameMD_IMaster" on "AgregatorSameMD" ("Master"); + ALTER TABLE "STORMWEBSEARCH" ADD CONSTRAINT "STORMWEBSEARCH_FSTORMFILT_6521" FOREIGN KEY ("FilterSetting_m0") REFERENCES "STORMFILTERSETTING" ("primaryKey"); diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/PostgreSql.create.sql b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/PostgreSql.create.sql index cb6ab002..be8bf1fe 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/PostgreSql.create.sql +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/SqlScripts/PostgreSql.create.sql @@ -475,19 +475,13 @@ CREATE TABLE Кошка ( PRIMARY KEY (primaryKey)); -CREATE TABLE AgregatorSameMD ( - primaryKey UUID NOT NULL, - Name VARCHAR(255) NULL, - Master UUID NULL, - PRIMARY KEY (primaryKey)); - - CREATE TABLE DetailAndMaster ( primaryKey UUID NOT NULL, Name VARCHAR(255) NULL, Agregator UUID NOT NULL, PRIMARY KEY (primaryKey)); + CREATE TABLE TestConfiguration ( primaryKey UUID NOT NULL, Name VARCHAR(255) NULL, @@ -540,6 +534,14 @@ CREATE TABLE TestAssociation ( FirstLevel UUID NOT NULL, PRIMARY KEY (primaryKey)); + +CREATE TABLE AgregatorSameMD ( + primaryKey UUID NOT NULL, + Name VARCHAR(255) NULL, + Master UUID NULL, + PRIMARY KEY (primaryKey)); + + CREATE TABLE STORMNETLOCKDATA ( LockKey VARCHAR(300) NOT NULL, UserName VARCHAR(300) NOT NULL, @@ -822,9 +824,6 @@ CREATE INDEX Indexd2c2995f4deb3767b25fa4ca17d61bf9bff3d562 on Лапа (Кошк ALTER TABLE Кошка ADD CONSTRAINT FK271599c8f6730bbff77fe5e9bf61dbfd89e661c6 FOREIGN KEY (Порода_m0) REFERENCES Порода; CREATE INDEX Index271599c8f6730bbff77fe5e9bf61dbfd89e661c6 on Кошка (Порода_m0); - ALTER TABLE AgregatorSameMD ADD CONSTRAINT FK8b53b11c59bd038385b48bae2e4c94deed6a1407 FOREIGN KEY (Master) REFERENCES DetailAndMaster; -CREATE INDEX Index8b53b11c59bd038385b48bae2e4c94deed6a1407 on AgregatorSameMD (Master); - ALTER TABLE DetailAndMaster ADD CONSTRAINT FK0c88fee611c8abca27c4c3da5367b44eee5fc8e5 FOREIGN KEY (Agregator) REFERENCES AgregatorSameMD; CREATE INDEX Index0c88fee611c8abca27c4c3da5367b44eee5fc8e5 on DetailAndMaster (Agregator); @@ -858,6 +857,9 @@ CREATE INDEX Index33293a87ee605ad37917bdfcc64e848d124c4458 on TestAssociation (S ALTER TABLE TestAssociation ADD CONSTRAINT FK2c1bef67ce5243233fabd0b55b2f07496ce332d0 FOREIGN KEY (FirstLevel) REFERENCES FirstLevel; CREATE INDEX Index2c1bef67ce5243233fabd0b55b2f07496ce332d0 on TestAssociation (FirstLevel); + ALTER TABLE AgregatorSameMD ADD CONSTRAINT FK790f076d73d9fd4c1a92fb530d886739a4852131 FOREIGN KEY (Master) REFERENCES DetailAndMaster; +CREATE INDEX Index790f076d73d9fd4c1a92fb530d886739a4852131 on AgregatorSameMD (Master); + ALTER TABLE STORMWEBSEARCH ADD CONSTRAINT FKc4378e39870eb056aec84088683297a01d2a6200 FOREIGN KEY (FilterSetting_m0) REFERENCES STORMFILTERSETTING; ALTER TABLE STORMFILTERDETAIL ADD CONSTRAINT FK921d16269835017e2a0d0e29ad6fb175454a70d0 FOREIGN KEY (FilterSetting_m0) REFERENCES STORMFILTERSETTING; diff --git a/Tests/Objects/AgrClass1.cs b/Tests/Objects/AgrClass1.cs index 1b121c34..8283b880 100644 --- a/Tests/Objects/AgrClass1.cs +++ b/Tests/Objects/AgrClass1.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -30,16 +27,16 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class AgrClass1 : ICSSoft.STORMNET.DataObject { - + private string fAgrCl1Name; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailsClass1 fDetailsClass1; - + // *** Start programmer edit section *** (AgrClass1 CustomMembers) // *** End programmer edit section *** (AgrClass1 CustomMembers) - + /// /// AgrCl1Name. /// @@ -71,7 +68,7 @@ public virtual string AgrCl1Name // *** End programmer edit section *** (AgrClass1.AgrCl1Name Set end) } } - + /// /// AgrClass1. /// @@ -108,3 +105,4 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetails } } } + diff --git a/Tests/Objects/AgrClass2.cs b/Tests/Objects/AgrClass2.cs index b633bab8..65005990 100644 --- a/Tests/Objects/AgrClass2.cs +++ b/Tests/Objects/AgrClass2.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -30,16 +27,16 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class AgrClass2 : ICSSoft.STORMNET.DataObject { - + private string fAgrCl2Name; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailsClass2 fDetailsClass2; - + // *** Start programmer edit section *** (AgrClass2 CustomMembers) // *** End programmer edit section *** (AgrClass2 CustomMembers) - + /// /// AgrCl2Name. /// @@ -71,7 +68,7 @@ public virtual string AgrCl2Name // *** End programmer edit section *** (AgrClass2.AgrCl2Name Set end) } } - + /// /// AgrClass2. /// @@ -108,3 +105,4 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetails } } } + diff --git a/Tests/Objects/AgregatorWithSameMAndD.cs b/Tests/Objects/AgregatorSameMD.cs similarity index 95% rename from Tests/Objects/AgregatorWithSameMAndD.cs rename to Tests/Objects/AgregatorSameMD.cs index 8fd937bb..c1173b52 100644 --- a/Tests/Objects/AgregatorWithSameMAndD.cs +++ b/Tests/Objects/AgregatorSameMD.cs @@ -1,4 +1,4 @@ -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // This code was generated by a tool. // @@ -140,3 +140,4 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailA } } } + diff --git a/Tests/Objects/BaseLegoBlock.cs b/Tests/Objects/BaseLegoBlock.cs index c3c45511..bfb95dfb 100644 --- a/Tests/Objects/BaseLegoBlock.cs +++ b/Tests/Objects/BaseLegoBlock.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -31,17 +28,16 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class BaseLegoBlock : ICSSoft.STORMNET.DataObject { - - private string fName; - + private int fBlockId; - + + private string fName; + private NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockColor fColor; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoPatent fPatents; // *** Start programmer edit section *** (BaseLegoBlock CustomMembers) - [NotStored] public virtual string AssocType { @@ -54,68 +50,68 @@ public virtual string AssocType /// - /// Name. + /// BlockId. /// - // *** Start programmer edit section *** (BaseLegoBlock.Name CustomAttributes) + // *** Start programmer edit section *** (BaseLegoBlock.BlockId CustomAttributes) - // *** End programmer edit section *** (BaseLegoBlock.Name CustomAttributes) - [StrLen(255)] - public virtual string Name + // *** End programmer edit section *** (BaseLegoBlock.BlockId CustomAttributes) + public virtual int BlockId { get { - // *** Start programmer edit section *** (BaseLegoBlock.Name Get start) + // *** Start programmer edit section *** (BaseLegoBlock.BlockId Get start) - // *** End programmer edit section *** (BaseLegoBlock.Name Get start) - string result = this.fName; - // *** Start programmer edit section *** (BaseLegoBlock.Name Get end) + // *** End programmer edit section *** (BaseLegoBlock.BlockId Get start) + int result = this.fBlockId; + // *** Start programmer edit section *** (BaseLegoBlock.BlockId Get end) - // *** End programmer edit section *** (BaseLegoBlock.Name Get end) + // *** End programmer edit section *** (BaseLegoBlock.BlockId Get end) return result; } set { - // *** Start programmer edit section *** (BaseLegoBlock.Name Set start) + // *** Start programmer edit section *** (BaseLegoBlock.BlockId Set start) - // *** End programmer edit section *** (BaseLegoBlock.Name Set start) - this.fName = value; - // *** Start programmer edit section *** (BaseLegoBlock.Name Set end) + // *** End programmer edit section *** (BaseLegoBlock.BlockId Set start) + this.fBlockId = value; + // *** Start programmer edit section *** (BaseLegoBlock.BlockId Set end) - // *** End programmer edit section *** (BaseLegoBlock.Name Set end) + // *** End programmer edit section *** (BaseLegoBlock.BlockId Set end) } } - + /// - /// BlockId. + /// Name. /// - // *** Start programmer edit section *** (BaseLegoBlock.BlockId CustomAttributes) + // *** Start programmer edit section *** (BaseLegoBlock.Name CustomAttributes) - // *** End programmer edit section *** (BaseLegoBlock.BlockId CustomAttributes) - public virtual int BlockId + // *** End programmer edit section *** (BaseLegoBlock.Name CustomAttributes) + [StrLen(255)] + public virtual string Name { get { - // *** Start programmer edit section *** (BaseLegoBlock.BlockId Get start) + // *** Start programmer edit section *** (BaseLegoBlock.Name Get start) - // *** End programmer edit section *** (BaseLegoBlock.BlockId Get start) - int result = this.fBlockId; - // *** Start programmer edit section *** (BaseLegoBlock.BlockId Get end) + // *** End programmer edit section *** (BaseLegoBlock.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (BaseLegoBlock.Name Get end) - // *** End programmer edit section *** (BaseLegoBlock.BlockId Get end) + // *** End programmer edit section *** (BaseLegoBlock.Name Get end) return result; } set { - // *** Start programmer edit section *** (BaseLegoBlock.BlockId Set start) + // *** Start programmer edit section *** (BaseLegoBlock.Name Set start) - // *** End programmer edit section *** (BaseLegoBlock.BlockId Set start) - this.fBlockId = value; - // *** Start programmer edit section *** (BaseLegoBlock.BlockId Set end) + // *** End programmer edit section *** (BaseLegoBlock.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (BaseLegoBlock.Name Set end) - // *** End programmer edit section *** (BaseLegoBlock.BlockId Set end) + // *** End programmer edit section *** (BaseLegoBlock.Name Set end) } } - + /// /// BaseLegoBlock. /// @@ -148,7 +144,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockColor Color // *** End programmer edit section *** (BaseLegoBlock.Color Set end) } } - + /// /// BaseLegoBlock. /// @@ -185,3 +181,4 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoPat } } } + diff --git a/Tests/Objects/Car.cs b/Tests/Objects/Car.cs index 8c8c4bd0..53a59afa 100644 --- a/Tests/Objects/Car.cs +++ b/Tests/Objects/Car.cs @@ -1,21 +1,18 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET.Business; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -37,84 +34,84 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "TipCar as \'TipCar\'"})] public class Car : ICSSoft.STORMNET.DataObject { - - private string fNumber; - + private string fModel; - + + private string fNumber; + private NewPlatform.Flexberry.ORM.ODataService.Tests.tTip fTipCar; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Driver fDriver; - + // *** Start programmer edit section *** (Car CustomMembers) // *** End programmer edit section *** (Car CustomMembers) - + /// - /// Number. + /// Model. /// - // *** Start programmer edit section *** (Car.Number CustomAttributes) + // *** Start programmer edit section *** (Car.Model CustomAttributes) - // *** End programmer edit section *** (Car.Number CustomAttributes) + // *** End programmer edit section *** (Car.Model CustomAttributes) [StrLen(255)] - public virtual string Number + public virtual string Model { get { - // *** Start programmer edit section *** (Car.Number Get start) + // *** Start programmer edit section *** (Car.Model Get start) - // *** End programmer edit section *** (Car.Number Get start) - string result = this.fNumber; - // *** Start programmer edit section *** (Car.Number Get end) + // *** End programmer edit section *** (Car.Model Get start) + string result = this.fModel; + // *** Start programmer edit section *** (Car.Model Get end) - // *** End programmer edit section *** (Car.Number Get end) + // *** End programmer edit section *** (Car.Model Get end) return result; } set { - // *** Start programmer edit section *** (Car.Number Set start) + // *** Start programmer edit section *** (Car.Model Set start) - // *** End programmer edit section *** (Car.Number Set start) - this.fNumber = value; - // *** Start programmer edit section *** (Car.Number Set end) + // *** End programmer edit section *** (Car.Model Set start) + this.fModel = value; + // *** Start programmer edit section *** (Car.Model Set end) - // *** End programmer edit section *** (Car.Number Set end) + // *** End programmer edit section *** (Car.Model Set end) } } - + /// - /// Model. + /// Number. /// - // *** Start programmer edit section *** (Car.Model CustomAttributes) + // *** Start programmer edit section *** (Car.Number CustomAttributes) - // *** End programmer edit section *** (Car.Model CustomAttributes) + // *** End programmer edit section *** (Car.Number CustomAttributes) [StrLen(255)] - public virtual string Model + public virtual string Number { get { - // *** Start programmer edit section *** (Car.Model Get start) + // *** Start programmer edit section *** (Car.Number Get start) - // *** End programmer edit section *** (Car.Model Get start) - string result = this.fModel; - // *** Start programmer edit section *** (Car.Model Get end) + // *** End programmer edit section *** (Car.Number Get start) + string result = this.fNumber; + // *** Start programmer edit section *** (Car.Number Get end) - // *** End programmer edit section *** (Car.Model Get end) + // *** End programmer edit section *** (Car.Number Get end) return result; } set { - // *** Start programmer edit section *** (Car.Model Set start) + // *** Start programmer edit section *** (Car.Number Set start) - // *** End programmer edit section *** (Car.Model Set start) - this.fModel = value; - // *** Start programmer edit section *** (Car.Model Set end) + // *** End programmer edit section *** (Car.Number Set start) + this.fNumber = value; + // *** Start programmer edit section *** (Car.Number Set end) - // *** End programmer edit section *** (Car.Model Set end) + // *** End programmer edit section *** (Car.Number Set end) } } - + /// /// TipCar. /// @@ -145,7 +142,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.tTip TipCar // *** End programmer edit section *** (Car.TipCar Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.Driver. /// @@ -180,13 +177,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Driver Driver // *** End programmer edit section *** (Car.Driver Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "AllData" view. /// @@ -199,7 +196,7 @@ public static ICSSoft.STORMNET.View AllData } } } - + /// /// Detail array of Car. /// @@ -208,12 +205,12 @@ public static ICSSoft.STORMNET.View AllData // *** End programmer edit section *** (DetailArrayDetailArrayOfCar CustomAttributes) public class DetailArrayOfCar : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfCar members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfCar members) - + /// /// Construct detail array. /// @@ -227,7 +224,7 @@ public DetailArrayOfCar(NewPlatform.Flexberry.ORM.ODataService.Tests.Driver fDri base(typeof(Car), ((ICSSoft.STORMNET.DataObject)(fDriver))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.Car this[int index] { get @@ -235,10 +232,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.Car this[int index] return ((NewPlatform.Flexberry.ORM.ODataService.Tests.Car)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.Car dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git a/Tests/Objects/Child.cs b/Tests/Objects/Child.cs index ee45e7f5..844df756 100644 --- a/Tests/Objects/Child.cs +++ b/Tests/Objects/Child.cs @@ -1,154 +1,152 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - using ICSSoft.STORMNET; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// Child. - /// - // *** Start programmer edit section *** (Child CustomAttributes) - - // *** End programmer edit section *** (Child CustomAttributes) - [PublishName("Child")] - [AutoAltered()] - [ICSSoft.STORMNET.NotStored()] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - public class Child : ICSSoft.STORMNET.DataObject - { - - private string fName; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Person fParent; - - // *** Start programmer edit section *** (Child CustomMembers) - - // *** End programmer edit section *** (Child CustomMembers) - - - /// - /// Name. - /// - // *** Start programmer edit section *** (Child.Name CustomAttributes) - - // *** End programmer edit section *** (Child.Name CustomAttributes) - [StrLen(255)] - public virtual string Name - { - get - { - // *** Start programmer edit section *** (Child.Name Get start) - - // *** End programmer edit section *** (Child.Name Get start) - string result = this.fName; - // *** Start programmer edit section *** (Child.Name Get end) - - // *** End programmer edit section *** (Child.Name Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Child.Name Set start) - - // *** End programmer edit section *** (Child.Name Set start) - this.fName = value; - // *** Start programmer edit section *** (Child.Name Set end) - - // *** End programmer edit section *** (Child.Name Set end) - } - } - - /// - /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.Person. - /// - // *** Start programmer edit section *** (Child.Parent CustomAttributes) - - // *** End programmer edit section *** (Child.Parent CustomAttributes) - [Agregator()] - [NotNull()] - [PropertyStorage(new string[] { - "Parent"})] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Person Parent - { - get - { - // *** Start programmer edit section *** (Child.Parent Get start) - - // *** End programmer edit section *** (Child.Parent Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Person result = this.fParent; - // *** Start programmer edit section *** (Child.Parent Get end) - - // *** End programmer edit section *** (Child.Parent Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Child.Parent Set start) - - // *** End programmer edit section *** (Child.Parent Set start) - this.fParent = value; - // *** Start programmer edit section *** (Child.Parent Set end) - - // *** End programmer edit section *** (Child.Parent Set end) - } - } - } - - /// - /// Detail array of Child. - /// - // *** Start programmer edit section *** (DetailArrayDetailArrayOfChild CustomAttributes) - - // *** End programmer edit section *** (DetailArrayDetailArrayOfChild CustomAttributes) - public class DetailArrayOfChild : ICSSoft.STORMNET.DetailArray - { - - // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfChild members) - - // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfChild members) - - - /// - /// Construct detail array. - /// - /// - /// Returns object with type Child by index. - /// - /// - /// Adds object with type Child. - /// - public DetailArrayOfChild(NewPlatform.Flexberry.ORM.ODataService.Tests.Person fPerson) : - base(typeof(Child), ((ICSSoft.STORMNET.DataObject)(fPerson))) - { - } - - public NewPlatform.Flexberry.ORM.ODataService.Tests.Child this[int index] - { - get - { - return ((NewPlatform.Flexberry.ORM.ODataService.Tests.Child)(this.ItemByIndex(index))); - } - } - - public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.Child dataobject) - { - this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// Child. + /// + // *** Start programmer edit section *** (Child CustomAttributes) + + // *** End programmer edit section *** (Child CustomAttributes) + [PublishName("Child")] + [AutoAltered()] + [ICSSoft.STORMNET.NotStored()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class Child : ICSSoft.STORMNET.DataObject + { + + private string fName; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Person fParent; + + // *** Start programmer edit section *** (Child CustomMembers) + + // *** End programmer edit section *** (Child CustomMembers) + + + /// + /// Name. + /// + // *** Start programmer edit section *** (Child.Name CustomAttributes) + + // *** End programmer edit section *** (Child.Name CustomAttributes) + [StrLen(255)] + public virtual string Name + { + get + { + // *** Start programmer edit section *** (Child.Name Get start) + + // *** End programmer edit section *** (Child.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (Child.Name Get end) + + // *** End programmer edit section *** (Child.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Child.Name Set start) + + // *** End programmer edit section *** (Child.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (Child.Name Set end) + + // *** End programmer edit section *** (Child.Name Set end) + } + } + + /// + /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.Person. + /// + // *** Start programmer edit section *** (Child.Parent CustomAttributes) + + // *** End programmer edit section *** (Child.Parent CustomAttributes) + [Agregator()] + [NotNull()] + [PropertyStorage(new string[] { + "Parent"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Person Parent + { + get + { + // *** Start programmer edit section *** (Child.Parent Get start) + + // *** End programmer edit section *** (Child.Parent Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Person result = this.fParent; + // *** Start programmer edit section *** (Child.Parent Get end) + + // *** End programmer edit section *** (Child.Parent Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Child.Parent Set start) + + // *** End programmer edit section *** (Child.Parent Set start) + this.fParent = value; + // *** Start programmer edit section *** (Child.Parent Set end) + + // *** End programmer edit section *** (Child.Parent Set end) + } + } + } + + /// + /// Detail array of Child. + /// + // *** Start programmer edit section *** (DetailArrayDetailArrayOfChild CustomAttributes) + + // *** End programmer edit section *** (DetailArrayDetailArrayOfChild CustomAttributes) + public class DetailArrayOfChild : ICSSoft.STORMNET.DetailArray + { + + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfChild members) + + // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfChild members) + + + /// + /// Construct detail array. + /// + /// + /// Returns object with type Child by index. + /// + /// + /// Adds object with type Child. + /// + public DetailArrayOfChild(NewPlatform.Flexberry.ORM.ODataService.Tests.Person fPerson) : + base(typeof(Child), ((ICSSoft.STORMNET.DataObject)(fPerson))) + { + } + + public NewPlatform.Flexberry.ORM.ODataService.Tests.Child this[int index] + { + get + { + return ((NewPlatform.Flexberry.ORM.ODataService.Tests.Child)(this.ItemByIndex(index))); + } + } + + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.Child dataobject) + { + this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); + } + } +} + diff --git a/Tests/Objects/Daughter.cs b/Tests/Objects/Daughter.cs index 3af39df9..dc1ba19b 100644 --- a/Tests/Objects/Daughter.cs +++ b/Tests/Objects/Daughter.cs @@ -1,75 +1,73 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - using ICSSoft.STORMNET; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// Daughter. - /// - // *** Start programmer edit section *** (Daughter CustomAttributes) - - // *** End programmer edit section *** (Daughter CustomAttributes) - [PublishName("Daughter")] - [AutoAltered()] - [ICSSoft.STORMNET.NotStored(false)] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - public class Daughter : NewPlatform.Flexberry.ORM.ODataService.Tests.Child - { - - private string fDressColor; - - // *** Start programmer edit section *** (Daughter CustomMembers) - - // *** End programmer edit section *** (Daughter CustomMembers) - - - /// - /// DressColor. - /// - // *** Start programmer edit section *** (Daughter.DressColor CustomAttributes) - - // *** End programmer edit section *** (Daughter.DressColor CustomAttributes) - [StrLen(255)] - public virtual string DressColor - { - get - { - // *** Start programmer edit section *** (Daughter.DressColor Get start) - - // *** End programmer edit section *** (Daughter.DressColor Get start) - string result = this.fDressColor; - // *** Start programmer edit section *** (Daughter.DressColor Get end) - - // *** End programmer edit section *** (Daughter.DressColor Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Daughter.DressColor Set start) - - // *** End programmer edit section *** (Daughter.DressColor Set start) - this.fDressColor = value; - // *** Start programmer edit section *** (Daughter.DressColor Set end) - - // *** End programmer edit section *** (Daughter.DressColor Set end) - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// Daughter. + /// + // *** Start programmer edit section *** (Daughter CustomAttributes) + + // *** End programmer edit section *** (Daughter CustomAttributes) + [PublishName("Daughter")] + [AutoAltered()] + [ICSSoft.STORMNET.NotStored(false)] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class Daughter : NewPlatform.Flexberry.ORM.ODataService.Tests.Child + { + + private string fDressColor; + + // *** Start programmer edit section *** (Daughter CustomMembers) + + // *** End programmer edit section *** (Daughter CustomMembers) + + + /// + /// DressColor. + /// + // *** Start programmer edit section *** (Daughter.DressColor CustomAttributes) + + // *** End programmer edit section *** (Daughter.DressColor CustomAttributes) + [StrLen(255)] + public virtual string DressColor + { + get + { + // *** Start programmer edit section *** (Daughter.DressColor Get start) + + // *** End programmer edit section *** (Daughter.DressColor Get start) + string result = this.fDressColor; + // *** Start programmer edit section *** (Daughter.DressColor Get end) + + // *** End programmer edit section *** (Daughter.DressColor Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Daughter.DressColor Set start) + + // *** End programmer edit section *** (Daughter.DressColor Set start) + this.fDressColor = value; + // *** Start programmer edit section *** (Daughter.DressColor Set end) + + // *** End programmer edit section *** (Daughter.DressColor Set end) + } + } + } +} + diff --git a/Tests/Objects/DetailAndMaster.cs b/Tests/Objects/DetailAndMaster.cs index 57d3f582..1cf7cbb2 100644 --- a/Tests/Objects/DetailAndMaster.cs +++ b/Tests/Objects/DetailAndMaster.cs @@ -1,4 +1,4 @@ -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // This code was generated by a tool. // @@ -147,3 +147,4 @@ public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.DetailAndMa } } } + diff --git a/Tests/Objects/DetailsClass1.cs b/Tests/Objects/DetailsClass1.cs index 6b86e84d..08541f90 100644 --- a/Tests/Objects/DetailsClass1.cs +++ b/Tests/Objects/DetailsClass1.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -30,18 +27,18 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class DetailsClass1 : ICSSoft.STORMNET.DataObject { - + private string fDetailCl1Name; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailsClass2 fDetailsClass2; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.AgrClass1 fAgrClass1; - + // *** Start programmer edit section *** (DetailsClass1 CustomMembers) // *** End programmer edit section *** (DetailsClass1 CustomMembers) - + /// /// DetailCl1Name. /// @@ -73,7 +70,7 @@ public virtual string DetailCl1Name // *** End programmer edit section *** (DetailsClass1.DetailCl1Name Set end) } } - + /// /// DetailsClass1. /// @@ -107,7 +104,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailsClass2 Detail // *** End programmer edit section *** (DetailsClass1.DetailsClass2 Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.AgrClass1. /// @@ -143,7 +140,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.AgrClass1 AgrClass1 } } } - + /// /// Detail array of DetailsClass1. /// @@ -152,12 +149,12 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.AgrClass1 AgrClass1 // *** End programmer edit section *** (DetailArrayDetailArrayOfDetailsClass1 CustomAttributes) public class DetailArrayOfDetailsClass1 : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailsClass1 members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailsClass1 members) - + /// /// Construct detail array. /// @@ -171,7 +168,7 @@ public DetailArrayOfDetailsClass1(NewPlatform.Flexberry.ORM.ODataService.Tests.A base(typeof(DetailsClass1), ((ICSSoft.STORMNET.DataObject)(fAgrClass1))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.DetailsClass1 this[int index] { get @@ -179,10 +176,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.DetailsClass1 this[int index return ((NewPlatform.Flexberry.ORM.ODataService.Tests.DetailsClass1)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.DetailsClass1 dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git a/Tests/Objects/DetailsClass2.cs b/Tests/Objects/DetailsClass2.cs index 5dbbbc64..18440853 100644 --- a/Tests/Objects/DetailsClass2.cs +++ b/Tests/Objects/DetailsClass2.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -30,16 +27,16 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class DetailsClass2 : ICSSoft.STORMNET.DataObject { - + private string fDetailCl2Name; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.AgrClass2 fAgrClass2; - + // *** Start programmer edit section *** (DetailsClass2 CustomMembers) // *** End programmer edit section *** (DetailsClass2 CustomMembers) - + /// /// DetailCl2Name. /// @@ -71,7 +68,7 @@ public virtual string DetailCl2Name // *** End programmer edit section *** (DetailsClass2.DetailCl2Name Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.AgrClass2. /// @@ -107,7 +104,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.AgrClass2 AgrClass2 } } } - + /// /// Detail array of DetailsClass2. /// @@ -116,12 +113,12 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.AgrClass2 AgrClass2 // *** End programmer edit section *** (DetailArrayDetailArrayOfDetailsClass2 CustomAttributes) public class DetailArrayOfDetailsClass2 : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailsClass2 members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfDetailsClass2 members) - + /// /// Construct detail array. /// @@ -135,7 +132,7 @@ public DetailArrayOfDetailsClass2(NewPlatform.Flexberry.ORM.ODataService.Tests.A base(typeof(DetailsClass2), ((ICSSoft.STORMNET.DataObject)(fAgrClass2))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.DetailsClass2 this[int index] { get @@ -143,10 +140,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.DetailsClass2 this[int index return ((NewPlatform.Flexberry.ORM.ODataService.Tests.DetailsClass2)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.DetailsClass2 dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git a/Tests/Objects/Driver.cs b/Tests/Objects/Driver.cs index f6718dd8..4d556960 100644 --- a/Tests/Objects/Driver.cs +++ b/Tests/Objects/Driver.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -34,52 +31,20 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "Documents as \'Documents\'"})] public class Driver : ICSSoft.STORMNET.DataObject { - - private string fName; - + private int fCarCount; - - private bool fDocuments; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfCar fCar; - - // *** Start programmer edit section *** (Driver CustomMembers) - // *** End programmer edit section *** (Driver CustomMembers) + private bool fDocuments; - - /// - /// Name. - /// - // *** Start programmer edit section *** (Driver.Name CustomAttributes) + private string fName; - // *** End programmer edit section *** (Driver.Name CustomAttributes) - [StrLen(255)] - public virtual string Name - { - get - { - // *** Start programmer edit section *** (Driver.Name Get start) + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfCar fCar; - // *** End programmer edit section *** (Driver.Name Get start) - string result = this.fName; - // *** Start programmer edit section *** (Driver.Name Get end) + // *** Start programmer edit section *** (Driver CustomMembers) - // *** End programmer edit section *** (Driver.Name Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Driver.Name Set start) + // *** End programmer edit section *** (Driver CustomMembers) - // *** End programmer edit section *** (Driver.Name Set start) - this.fName = value; - // *** Start programmer edit section *** (Driver.Name Set end) - // *** End programmer edit section *** (Driver.Name Set end) - } - } - /// /// CarCount. /// @@ -110,7 +75,7 @@ public virtual int CarCount // *** End programmer edit section *** (Driver.CarCount Set end) } } - + /// /// Documents. /// @@ -141,7 +106,39 @@ public virtual bool Documents // *** End programmer edit section *** (Driver.Documents Set end) } } - + + /// + /// Name. + /// + // *** Start programmer edit section *** (Driver.Name CustomAttributes) + + // *** End programmer edit section *** (Driver.Name CustomAttributes) + [StrLen(255)] + public virtual string Name + { + get + { + // *** Start programmer edit section *** (Driver.Name Get start) + + // *** End programmer edit section *** (Driver.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (Driver.Name Get end) + + // *** End programmer edit section *** (Driver.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Driver.Name Set start) + + // *** End programmer edit section *** (Driver.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (Driver.Name Set end) + + // *** End programmer edit section *** (Driver.Name Set end) + } + } + /// /// Driver. /// @@ -176,13 +173,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfCar Car // *** End programmer edit section *** (Driver.Car Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "AllData" view. /// @@ -196,3 +193,4 @@ public static ICSSoft.STORMNET.View AllData } } } + diff --git a/Tests/Objects/LegoBlock.cs b/Tests/Objects/LegoBlock.cs index 47d1db04..052297f4 100644 --- a/Tests/Objects/LegoBlock.cs +++ b/Tests/Objects/LegoBlock.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -32,25 +29,24 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class LegoBlock : NewPlatform.Flexberry.ORM.ODataService.Tests.BaseLegoBlock { - - private int fWidth; - - private int fHeight; - - private int fDepth; - + private string fConfiguration; - + + private int fDepth; + + private int fHeight; + + private int fWidth; + private NewPlatform.Flexberry.ORM.ODataService.Tests.LegoMaterial fMaterial; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockBottomPanel fBottomPanels; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockCustomPanel fCustomPanels; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockTopPanel fTopPanels; // *** Start programmer edit section *** (LegoBlock CustomMembers) - [NotStored] [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.PostgresDataService), "'Association'")] public override string AssocType @@ -65,130 +61,130 @@ public override string AssocType /// - /// Width. + /// Configuration. /// - // *** Start programmer edit section *** (LegoBlock.Width CustomAttributes) + // *** Start programmer edit section *** (LegoBlock.Configuration CustomAttributes) - // *** End programmer edit section *** (LegoBlock.Width CustomAttributes) - public virtual int Width + // *** End programmer edit section *** (LegoBlock.Configuration CustomAttributes) + [StrLen(255)] + public virtual string Configuration { get { - // *** Start programmer edit section *** (LegoBlock.Width Get start) + // *** Start programmer edit section *** (LegoBlock.Configuration Get start) - // *** End programmer edit section *** (LegoBlock.Width Get start) - int result = this.fWidth; - // *** Start programmer edit section *** (LegoBlock.Width Get end) + // *** End programmer edit section *** (LegoBlock.Configuration Get start) + string result = this.fConfiguration; + // *** Start programmer edit section *** (LegoBlock.Configuration Get end) - // *** End programmer edit section *** (LegoBlock.Width Get end) + // *** End programmer edit section *** (LegoBlock.Configuration Get end) return result; } set { - // *** Start programmer edit section *** (LegoBlock.Width Set start) + // *** Start programmer edit section *** (LegoBlock.Configuration Set start) - // *** End programmer edit section *** (LegoBlock.Width Set start) - this.fWidth = value; - // *** Start programmer edit section *** (LegoBlock.Width Set end) + // *** End programmer edit section *** (LegoBlock.Configuration Set start) + this.fConfiguration = value; + // *** Start programmer edit section *** (LegoBlock.Configuration Set end) - // *** End programmer edit section *** (LegoBlock.Width Set end) + // *** End programmer edit section *** (LegoBlock.Configuration Set end) } } - + /// - /// Height. + /// Depth. /// - // *** Start programmer edit section *** (LegoBlock.Height CustomAttributes) + // *** Start programmer edit section *** (LegoBlock.Depth CustomAttributes) - // *** End programmer edit section *** (LegoBlock.Height CustomAttributes) - public virtual int Height + // *** End programmer edit section *** (LegoBlock.Depth CustomAttributes) + public virtual int Depth { get { - // *** Start programmer edit section *** (LegoBlock.Height Get start) + // *** Start programmer edit section *** (LegoBlock.Depth Get start) - // *** End programmer edit section *** (LegoBlock.Height Get start) - int result = this.fHeight; - // *** Start programmer edit section *** (LegoBlock.Height Get end) + // *** End programmer edit section *** (LegoBlock.Depth Get start) + int result = this.fDepth; + // *** Start programmer edit section *** (LegoBlock.Depth Get end) - // *** End programmer edit section *** (LegoBlock.Height Get end) + // *** End programmer edit section *** (LegoBlock.Depth Get end) return result; } set { - // *** Start programmer edit section *** (LegoBlock.Height Set start) + // *** Start programmer edit section *** (LegoBlock.Depth Set start) - // *** End programmer edit section *** (LegoBlock.Height Set start) - this.fHeight = value; - // *** Start programmer edit section *** (LegoBlock.Height Set end) + // *** End programmer edit section *** (LegoBlock.Depth Set start) + this.fDepth = value; + // *** Start programmer edit section *** (LegoBlock.Depth Set end) - // *** End programmer edit section *** (LegoBlock.Height Set end) + // *** End programmer edit section *** (LegoBlock.Depth Set end) } } - + /// - /// Depth. + /// Height. /// - // *** Start programmer edit section *** (LegoBlock.Depth CustomAttributes) + // *** Start programmer edit section *** (LegoBlock.Height CustomAttributes) - // *** End programmer edit section *** (LegoBlock.Depth CustomAttributes) - public virtual int Depth + // *** End programmer edit section *** (LegoBlock.Height CustomAttributes) + public virtual int Height { get { - // *** Start programmer edit section *** (LegoBlock.Depth Get start) + // *** Start programmer edit section *** (LegoBlock.Height Get start) - // *** End programmer edit section *** (LegoBlock.Depth Get start) - int result = this.fDepth; - // *** Start programmer edit section *** (LegoBlock.Depth Get end) + // *** End programmer edit section *** (LegoBlock.Height Get start) + int result = this.fHeight; + // *** Start programmer edit section *** (LegoBlock.Height Get end) - // *** End programmer edit section *** (LegoBlock.Depth Get end) + // *** End programmer edit section *** (LegoBlock.Height Get end) return result; } set { - // *** Start programmer edit section *** (LegoBlock.Depth Set start) + // *** Start programmer edit section *** (LegoBlock.Height Set start) - // *** End programmer edit section *** (LegoBlock.Depth Set start) - this.fDepth = value; - // *** Start programmer edit section *** (LegoBlock.Depth Set end) + // *** End programmer edit section *** (LegoBlock.Height Set start) + this.fHeight = value; + // *** Start programmer edit section *** (LegoBlock.Height Set end) - // *** End programmer edit section *** (LegoBlock.Depth Set end) + // *** End programmer edit section *** (LegoBlock.Height Set end) } } - + /// - /// Configuration. + /// Width. /// - // *** Start programmer edit section *** (LegoBlock.Configuration CustomAttributes) + // *** Start programmer edit section *** (LegoBlock.Width CustomAttributes) - // *** End programmer edit section *** (LegoBlock.Configuration CustomAttributes) - [StrLen(255)] - public virtual string Configuration + // *** End programmer edit section *** (LegoBlock.Width CustomAttributes) + public virtual int Width { get { - // *** Start programmer edit section *** (LegoBlock.Configuration Get start) + // *** Start programmer edit section *** (LegoBlock.Width Get start) - // *** End programmer edit section *** (LegoBlock.Configuration Get start) - string result = this.fConfiguration; - // *** Start programmer edit section *** (LegoBlock.Configuration Get end) + // *** End programmer edit section *** (LegoBlock.Width Get start) + int result = this.fWidth; + // *** Start programmer edit section *** (LegoBlock.Width Get end) - // *** End programmer edit section *** (LegoBlock.Configuration Get end) + // *** End programmer edit section *** (LegoBlock.Width Get end) return result; } set { - // *** Start programmer edit section *** (LegoBlock.Configuration Set start) + // *** Start programmer edit section *** (LegoBlock.Width Set start) - // *** End programmer edit section *** (LegoBlock.Configuration Set start) - this.fConfiguration = value; - // *** Start programmer edit section *** (LegoBlock.Configuration Set end) + // *** End programmer edit section *** (LegoBlock.Width Set start) + this.fWidth = value; + // *** Start programmer edit section *** (LegoBlock.Width Set end) - // *** End programmer edit section *** (LegoBlock.Configuration Set end) + // *** End programmer edit section *** (LegoBlock.Width Set end) } } - + /// /// LegoBlock. /// @@ -221,7 +217,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.LegoMaterial Materia // *** End programmer edit section *** (LegoBlock.Material Set end) } } - + /// /// LegoBlock. /// @@ -256,7 +252,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlo // *** End programmer edit section *** (LegoBlock.BottomPanels Set end) } } - + /// /// LegoBlock. /// @@ -291,7 +287,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlo // *** End programmer edit section *** (LegoBlock.CustomPanels Set end) } } - + /// /// LegoBlock. /// @@ -328,3 +324,4 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlo } } } + diff --git a/Tests/Objects/LegoBlockBottomPanel.cs b/Tests/Objects/LegoBlockBottomPanel.cs index 613d6533..6db72e94 100644 --- a/Tests/Objects/LegoBlockBottomPanel.cs +++ b/Tests/Objects/LegoBlockBottomPanel.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -31,80 +28,80 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class LegoBlockBottomPanel : ICSSoft.STORMNET.DataObject { - - private int fWidthCount; - + private int fHeightCount; - + + private int fWidthCount; + private NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlock fBlock; - + // *** Start programmer edit section *** (LegoBlockBottomPanel CustomMembers) // *** End programmer edit section *** (LegoBlockBottomPanel CustomMembers) - + /// - /// WidthCount. + /// HeightCount. /// - // *** Start programmer edit section *** (LegoBlockBottomPanel.WidthCount CustomAttributes) + // *** Start programmer edit section *** (LegoBlockBottomPanel.HeightCount CustomAttributes) - // *** End programmer edit section *** (LegoBlockBottomPanel.WidthCount CustomAttributes) - public virtual int WidthCount + // *** End programmer edit section *** (LegoBlockBottomPanel.HeightCount CustomAttributes) + public virtual int HeightCount { get { - // *** Start programmer edit section *** (LegoBlockBottomPanel.WidthCount Get start) + // *** Start programmer edit section *** (LegoBlockBottomPanel.HeightCount Get start) - // *** End programmer edit section *** (LegoBlockBottomPanel.WidthCount Get start) - int result = this.fWidthCount; - // *** Start programmer edit section *** (LegoBlockBottomPanel.WidthCount Get end) + // *** End programmer edit section *** (LegoBlockBottomPanel.HeightCount Get start) + int result = this.fHeightCount; + // *** Start programmer edit section *** (LegoBlockBottomPanel.HeightCount Get end) - // *** End programmer edit section *** (LegoBlockBottomPanel.WidthCount Get end) + // *** End programmer edit section *** (LegoBlockBottomPanel.HeightCount Get end) return result; } set { - // *** Start programmer edit section *** (LegoBlockBottomPanel.WidthCount Set start) + // *** Start programmer edit section *** (LegoBlockBottomPanel.HeightCount Set start) - // *** End programmer edit section *** (LegoBlockBottomPanel.WidthCount Set start) - this.fWidthCount = value; - // *** Start programmer edit section *** (LegoBlockBottomPanel.WidthCount Set end) + // *** End programmer edit section *** (LegoBlockBottomPanel.HeightCount Set start) + this.fHeightCount = value; + // *** Start programmer edit section *** (LegoBlockBottomPanel.HeightCount Set end) - // *** End programmer edit section *** (LegoBlockBottomPanel.WidthCount Set end) + // *** End programmer edit section *** (LegoBlockBottomPanel.HeightCount Set end) } } - + /// - /// HeightCount. + /// WidthCount. /// - // *** Start programmer edit section *** (LegoBlockBottomPanel.HeightCount CustomAttributes) + // *** Start programmer edit section *** (LegoBlockBottomPanel.WidthCount CustomAttributes) - // *** End programmer edit section *** (LegoBlockBottomPanel.HeightCount CustomAttributes) - public virtual int HeightCount + // *** End programmer edit section *** (LegoBlockBottomPanel.WidthCount CustomAttributes) + public virtual int WidthCount { get { - // *** Start programmer edit section *** (LegoBlockBottomPanel.HeightCount Get start) + // *** Start programmer edit section *** (LegoBlockBottomPanel.WidthCount Get start) - // *** End programmer edit section *** (LegoBlockBottomPanel.HeightCount Get start) - int result = this.fHeightCount; - // *** Start programmer edit section *** (LegoBlockBottomPanel.HeightCount Get end) + // *** End programmer edit section *** (LegoBlockBottomPanel.WidthCount Get start) + int result = this.fWidthCount; + // *** Start programmer edit section *** (LegoBlockBottomPanel.WidthCount Get end) - // *** End programmer edit section *** (LegoBlockBottomPanel.HeightCount Get end) + // *** End programmer edit section *** (LegoBlockBottomPanel.WidthCount Get end) return result; } set { - // *** Start programmer edit section *** (LegoBlockBottomPanel.HeightCount Set start) + // *** Start programmer edit section *** (LegoBlockBottomPanel.WidthCount Set start) - // *** End programmer edit section *** (LegoBlockBottomPanel.HeightCount Set start) - this.fHeightCount = value; - // *** Start programmer edit section *** (LegoBlockBottomPanel.HeightCount Set end) + // *** End programmer edit section *** (LegoBlockBottomPanel.WidthCount Set start) + this.fWidthCount = value; + // *** Start programmer edit section *** (LegoBlockBottomPanel.WidthCount Set end) - // *** End programmer edit section *** (LegoBlockBottomPanel.HeightCount Set end) + // *** End programmer edit section *** (LegoBlockBottomPanel.WidthCount Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlock. /// @@ -140,7 +137,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlock Block } } } - + /// /// Detail array of LegoBlockBottomPanel. /// @@ -149,12 +146,12 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlock Block // *** End programmer edit section *** (DetailArrayDetailArrayOfLegoBlockBottomPanel CustomAttributes) public class DetailArrayOfLegoBlockBottomPanel : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockBottomPanel members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockBottomPanel members) - + /// /// Construct detail array. /// @@ -168,7 +165,7 @@ public DetailArrayOfLegoBlockBottomPanel(NewPlatform.Flexberry.ORM.ODataService. base(typeof(LegoBlockBottomPanel), ((ICSSoft.STORMNET.DataObject)(fLegoBlock))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockBottomPanel this[int index] { get @@ -176,10 +173,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockBottomPanel this[in return ((NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockBottomPanel)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockBottomPanel dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git a/Tests/Objects/LegoBlockColor.cs b/Tests/Objects/LegoBlockColor.cs index f9ae4fd6..8d678fd2 100644 --- a/Tests/Objects/LegoBlockColor.cs +++ b/Tests/Objects/LegoBlockColor.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -31,77 +28,78 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class LegoBlockColor : ICSSoft.STORMNET.DataObject { - - private string fName; - + private int fColorNumber; - + + private string fName; + // *** Start programmer edit section *** (LegoBlockColor CustomMembers) // *** End programmer edit section *** (LegoBlockColor CustomMembers) - + /// - /// Name. + /// ColorNumber. /// - // *** Start programmer edit section *** (LegoBlockColor.Name CustomAttributes) + // *** Start programmer edit section *** (LegoBlockColor.ColorNumber CustomAttributes) - // *** End programmer edit section *** (LegoBlockColor.Name CustomAttributes) - [StrLen(255)] - public virtual string Name + // *** End programmer edit section *** (LegoBlockColor.ColorNumber CustomAttributes) + public virtual int ColorNumber { get { - // *** Start programmer edit section *** (LegoBlockColor.Name Get start) + // *** Start programmer edit section *** (LegoBlockColor.ColorNumber Get start) - // *** End programmer edit section *** (LegoBlockColor.Name Get start) - string result = this.fName; - // *** Start programmer edit section *** (LegoBlockColor.Name Get end) + // *** End programmer edit section *** (LegoBlockColor.ColorNumber Get start) + int result = this.fColorNumber; + // *** Start programmer edit section *** (LegoBlockColor.ColorNumber Get end) - // *** End programmer edit section *** (LegoBlockColor.Name Get end) + // *** End programmer edit section *** (LegoBlockColor.ColorNumber Get end) return result; } set { - // *** Start programmer edit section *** (LegoBlockColor.Name Set start) + // *** Start programmer edit section *** (LegoBlockColor.ColorNumber Set start) - // *** End programmer edit section *** (LegoBlockColor.Name Set start) - this.fName = value; - // *** Start programmer edit section *** (LegoBlockColor.Name Set end) + // *** End programmer edit section *** (LegoBlockColor.ColorNumber Set start) + this.fColorNumber = value; + // *** Start programmer edit section *** (LegoBlockColor.ColorNumber Set end) - // *** End programmer edit section *** (LegoBlockColor.Name Set end) + // *** End programmer edit section *** (LegoBlockColor.ColorNumber Set end) } } - + /// - /// ColorNumber. + /// Name. /// - // *** Start programmer edit section *** (LegoBlockColor.ColorNumber CustomAttributes) + // *** Start programmer edit section *** (LegoBlockColor.Name CustomAttributes) - // *** End programmer edit section *** (LegoBlockColor.ColorNumber CustomAttributes) - public virtual int ColorNumber + // *** End programmer edit section *** (LegoBlockColor.Name CustomAttributes) + [StrLen(255)] + public virtual string Name { get { - // *** Start programmer edit section *** (LegoBlockColor.ColorNumber Get start) + // *** Start programmer edit section *** (LegoBlockColor.Name Get start) - // *** End programmer edit section *** (LegoBlockColor.ColorNumber Get start) - int result = this.fColorNumber; - // *** Start programmer edit section *** (LegoBlockColor.ColorNumber Get end) + // *** End programmer edit section *** (LegoBlockColor.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (LegoBlockColor.Name Get end) - // *** End programmer edit section *** (LegoBlockColor.ColorNumber Get end) + // *** End programmer edit section *** (LegoBlockColor.Name Get end) return result; } set { - // *** Start programmer edit section *** (LegoBlockColor.ColorNumber Set start) + // *** Start programmer edit section *** (LegoBlockColor.Name Set start) - // *** End programmer edit section *** (LegoBlockColor.ColorNumber Set start) - this.fColorNumber = value; - // *** Start programmer edit section *** (LegoBlockColor.ColorNumber Set end) + // *** End programmer edit section *** (LegoBlockColor.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (LegoBlockColor.Name Set end) - // *** End programmer edit section *** (LegoBlockColor.ColorNumber Set end) + // *** End programmer edit section *** (LegoBlockColor.Name Set end) } } } } + diff --git a/Tests/Objects/LegoBlockCustomPanel.cs b/Tests/Objects/LegoBlockCustomPanel.cs index 93a383d1..3d88f2f3 100644 --- a/Tests/Objects/LegoBlockCustomPanel.cs +++ b/Tests/Objects/LegoBlockCustomPanel.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -31,20 +28,20 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class LegoBlockCustomPanel : ICSSoft.STORMNET.DataObject { - + private string fOrientation; - + private string fPosition; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.LegoPanelAngle fPanelAngle; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlock fBlock; - + // *** Start programmer edit section *** (LegoBlockCustomPanel CustomMembers) // *** End programmer edit section *** (LegoBlockCustomPanel CustomMembers) - + /// /// Orientation. /// @@ -76,7 +73,7 @@ public virtual string Orientation // *** End programmer edit section *** (LegoBlockCustomPanel.Orientation Set end) } } - + /// /// Position. /// @@ -108,7 +105,7 @@ public virtual string Position // *** End programmer edit section *** (LegoBlockCustomPanel.Position Set end) } } - + /// /// LegoBlockCustomPanel. /// @@ -141,7 +138,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.LegoPanelAngle Panel // *** End programmer edit section *** (LegoBlockCustomPanel.PanelAngle Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlock. /// @@ -177,7 +174,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlock Block } } } - + /// /// Detail array of LegoBlockCustomPanel. /// @@ -186,12 +183,12 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlock Block // *** End programmer edit section *** (DetailArrayDetailArrayOfLegoBlockCustomPanel CustomAttributes) public class DetailArrayOfLegoBlockCustomPanel : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockCustomPanel members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockCustomPanel members) - + /// /// Construct detail array. /// @@ -205,7 +202,7 @@ public DetailArrayOfLegoBlockCustomPanel(NewPlatform.Flexberry.ORM.ODataService. base(typeof(LegoBlockCustomPanel), ((ICSSoft.STORMNET.DataObject)(fLegoBlock))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockCustomPanel this[int index] { get @@ -213,10 +210,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockCustomPanel this[in return ((NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockCustomPanel)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockCustomPanel dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git a/Tests/Objects/LegoBlockTopPanel.cs b/Tests/Objects/LegoBlockTopPanel.cs index 64e423c9..00f25599 100644 --- a/Tests/Objects/LegoBlockTopPanel.cs +++ b/Tests/Objects/LegoBlockTopPanel.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -31,84 +28,84 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class LegoBlockTopPanel : ICSSoft.STORMNET.DataObject { - - private int fWidthCount; - + private int fHeightCount; - + + private int fWidthCount; + private NewPlatform.Flexberry.ORM.ODataService.Tests.LegoSocketStandard fSocketStandard; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockTopPanelHole fHoles; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlock fBlock; - + // *** Start programmer edit section *** (LegoBlockTopPanel CustomMembers) // *** End programmer edit section *** (LegoBlockTopPanel CustomMembers) - + /// - /// WidthCount. + /// HeightCount. /// - // *** Start programmer edit section *** (LegoBlockTopPanel.WidthCount CustomAttributes) + // *** Start programmer edit section *** (LegoBlockTopPanel.HeightCount CustomAttributes) - // *** End programmer edit section *** (LegoBlockTopPanel.WidthCount CustomAttributes) - public virtual int WidthCount + // *** End programmer edit section *** (LegoBlockTopPanel.HeightCount CustomAttributes) + public virtual int HeightCount { get { - // *** Start programmer edit section *** (LegoBlockTopPanel.WidthCount Get start) + // *** Start programmer edit section *** (LegoBlockTopPanel.HeightCount Get start) - // *** End programmer edit section *** (LegoBlockTopPanel.WidthCount Get start) - int result = this.fWidthCount; - // *** Start programmer edit section *** (LegoBlockTopPanel.WidthCount Get end) + // *** End programmer edit section *** (LegoBlockTopPanel.HeightCount Get start) + int result = this.fHeightCount; + // *** Start programmer edit section *** (LegoBlockTopPanel.HeightCount Get end) - // *** End programmer edit section *** (LegoBlockTopPanel.WidthCount Get end) + // *** End programmer edit section *** (LegoBlockTopPanel.HeightCount Get end) return result; } set { - // *** Start programmer edit section *** (LegoBlockTopPanel.WidthCount Set start) + // *** Start programmer edit section *** (LegoBlockTopPanel.HeightCount Set start) - // *** End programmer edit section *** (LegoBlockTopPanel.WidthCount Set start) - this.fWidthCount = value; - // *** Start programmer edit section *** (LegoBlockTopPanel.WidthCount Set end) + // *** End programmer edit section *** (LegoBlockTopPanel.HeightCount Set start) + this.fHeightCount = value; + // *** Start programmer edit section *** (LegoBlockTopPanel.HeightCount Set end) - // *** End programmer edit section *** (LegoBlockTopPanel.WidthCount Set end) + // *** End programmer edit section *** (LegoBlockTopPanel.HeightCount Set end) } } - + /// - /// HeightCount. + /// WidthCount. /// - // *** Start programmer edit section *** (LegoBlockTopPanel.HeightCount CustomAttributes) + // *** Start programmer edit section *** (LegoBlockTopPanel.WidthCount CustomAttributes) - // *** End programmer edit section *** (LegoBlockTopPanel.HeightCount CustomAttributes) - public virtual int HeightCount + // *** End programmer edit section *** (LegoBlockTopPanel.WidthCount CustomAttributes) + public virtual int WidthCount { get { - // *** Start programmer edit section *** (LegoBlockTopPanel.HeightCount Get start) + // *** Start programmer edit section *** (LegoBlockTopPanel.WidthCount Get start) - // *** End programmer edit section *** (LegoBlockTopPanel.HeightCount Get start) - int result = this.fHeightCount; - // *** Start programmer edit section *** (LegoBlockTopPanel.HeightCount Get end) + // *** End programmer edit section *** (LegoBlockTopPanel.WidthCount Get start) + int result = this.fWidthCount; + // *** Start programmer edit section *** (LegoBlockTopPanel.WidthCount Get end) - // *** End programmer edit section *** (LegoBlockTopPanel.HeightCount Get end) + // *** End programmer edit section *** (LegoBlockTopPanel.WidthCount Get end) return result; } set { - // *** Start programmer edit section *** (LegoBlockTopPanel.HeightCount Set start) + // *** Start programmer edit section *** (LegoBlockTopPanel.WidthCount Set start) - // *** End programmer edit section *** (LegoBlockTopPanel.HeightCount Set start) - this.fHeightCount = value; - // *** Start programmer edit section *** (LegoBlockTopPanel.HeightCount Set end) + // *** End programmer edit section *** (LegoBlockTopPanel.WidthCount Set start) + this.fWidthCount = value; + // *** Start programmer edit section *** (LegoBlockTopPanel.WidthCount Set end) - // *** End programmer edit section *** (LegoBlockTopPanel.HeightCount Set end) + // *** End programmer edit section *** (LegoBlockTopPanel.WidthCount Set end) } } - + /// /// LegoBlockTopPanel. /// @@ -141,7 +138,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.LegoSocketStandard S // *** End programmer edit section *** (LegoBlockTopPanel.SocketStandard Set end) } } - + /// /// LegoBlockTopPanel. /// @@ -176,7 +173,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlo // *** End programmer edit section *** (LegoBlockTopPanel.Holes Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlock. /// @@ -212,7 +209,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlock Block } } } - + /// /// Detail array of LegoBlockTopPanel. /// @@ -221,12 +218,12 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlock Block // *** End programmer edit section *** (DetailArrayDetailArrayOfLegoBlockTopPanel CustomAttributes) public class DetailArrayOfLegoBlockTopPanel : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockTopPanel members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockTopPanel members) - + /// /// Construct detail array. /// @@ -240,7 +237,7 @@ public DetailArrayOfLegoBlockTopPanel(NewPlatform.Flexberry.ORM.ODataService.Tes base(typeof(LegoBlockTopPanel), ((ICSSoft.STORMNET.DataObject)(fLegoBlock))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockTopPanel this[int index] { get @@ -248,10 +245,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockTopPanel this[int i return ((NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockTopPanel)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockTopPanel dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git a/Tests/Objects/LegoBlockTopPanelHole.cs b/Tests/Objects/LegoBlockTopPanelHole.cs index e5d1f77a..b55b7aa3 100644 --- a/Tests/Objects/LegoBlockTopPanelHole.cs +++ b/Tests/Objects/LegoBlockTopPanelHole.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -31,16 +28,16 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class LegoBlockTopPanelHole : ICSSoft.STORMNET.DataObject { - + private string fPosition; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockTopPanel fTopPanel; - + // *** Start programmer edit section *** (LegoBlockTopPanelHole CustomMembers) // *** End programmer edit section *** (LegoBlockTopPanelHole CustomMembers) - + /// /// Position. /// @@ -72,7 +69,7 @@ public virtual string Position // *** End programmer edit section *** (LegoBlockTopPanelHole.Position Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockTopPanel. /// @@ -108,7 +105,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockTopPanel To } } } - + /// /// Detail array of LegoBlockTopPanelHole. /// @@ -117,12 +114,12 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockTopPanel To // *** End programmer edit section *** (DetailArrayDetailArrayOfLegoBlockTopPanelHole CustomAttributes) public class DetailArrayOfLegoBlockTopPanelHole : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockTopPanelHole members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoBlockTopPanelHole members) - + /// /// Construct detail array. /// @@ -136,7 +133,7 @@ public DetailArrayOfLegoBlockTopPanelHole(NewPlatform.Flexberry.ORM.ODataService base(typeof(LegoBlockTopPanelHole), ((ICSSoft.STORMNET.DataObject)(fLegoBlockTopPanel))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockTopPanelHole this[int index] { get @@ -144,10 +141,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockTopPanelHole this[i return ((NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockTopPanelHole)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.LegoBlockTopPanelHole dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git a/Tests/Objects/LegoDevice.cs b/Tests/Objects/LegoDevice.cs index 210923c8..8377e2fd 100644 --- a/Tests/Objects/LegoDevice.cs +++ b/Tests/Objects/LegoDevice.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -32,16 +29,16 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class LegoDevice : NewPlatform.Flexberry.ORM.ODataService.Tests.BaseLegoBlock { - + private string fDescription; - + private bool fElectricity; - + // *** Start programmer edit section *** (LegoDevice CustomMembers) // *** End programmer edit section *** (LegoDevice CustomMembers) - + /// /// Description. /// @@ -73,7 +70,7 @@ public virtual string Description // *** End programmer edit section *** (LegoDevice.Description Set end) } } - + /// /// Electricity. /// @@ -106,3 +103,4 @@ public virtual bool Electricity } } } + diff --git a/Tests/Objects/LegoMaterial.cs b/Tests/Objects/LegoMaterial.cs index 7db2ab80..20a5f3ff 100644 --- a/Tests/Objects/LegoMaterial.cs +++ b/Tests/Objects/LegoMaterial.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -31,14 +28,14 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class LegoMaterial : ICSSoft.STORMNET.DataObject { - + private string fName; - + // *** Start programmer edit section *** (LegoMaterial CustomMembers) // *** End programmer edit section *** (LegoMaterial CustomMembers) - + /// /// Name. /// @@ -72,3 +69,4 @@ public virtual string Name } } } + diff --git a/Tests/Objects/LegoPanelAngle.cs b/Tests/Objects/LegoPanelAngle.cs index 614d75f1..46d788e0 100644 --- a/Tests/Objects/LegoPanelAngle.cs +++ b/Tests/Objects/LegoPanelAngle.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -31,77 +28,78 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class LegoPanelAngle : ICSSoft.STORMNET.DataObject { - - private string fName; - + private int fAngle; - + + private string fName; + // *** Start programmer edit section *** (LegoPanelAngle CustomMembers) // *** End programmer edit section *** (LegoPanelAngle CustomMembers) - + /// - /// Name. + /// Angle. /// - // *** Start programmer edit section *** (LegoPanelAngle.Name CustomAttributes) + // *** Start programmer edit section *** (LegoPanelAngle.Angle CustomAttributes) - // *** End programmer edit section *** (LegoPanelAngle.Name CustomAttributes) - [StrLen(255)] - public virtual string Name + // *** End programmer edit section *** (LegoPanelAngle.Angle CustomAttributes) + public virtual int Angle { get { - // *** Start programmer edit section *** (LegoPanelAngle.Name Get start) + // *** Start programmer edit section *** (LegoPanelAngle.Angle Get start) - // *** End programmer edit section *** (LegoPanelAngle.Name Get start) - string result = this.fName; - // *** Start programmer edit section *** (LegoPanelAngle.Name Get end) + // *** End programmer edit section *** (LegoPanelAngle.Angle Get start) + int result = this.fAngle; + // *** Start programmer edit section *** (LegoPanelAngle.Angle Get end) - // *** End programmer edit section *** (LegoPanelAngle.Name Get end) + // *** End programmer edit section *** (LegoPanelAngle.Angle Get end) return result; } set { - // *** Start programmer edit section *** (LegoPanelAngle.Name Set start) + // *** Start programmer edit section *** (LegoPanelAngle.Angle Set start) - // *** End programmer edit section *** (LegoPanelAngle.Name Set start) - this.fName = value; - // *** Start programmer edit section *** (LegoPanelAngle.Name Set end) + // *** End programmer edit section *** (LegoPanelAngle.Angle Set start) + this.fAngle = value; + // *** Start programmer edit section *** (LegoPanelAngle.Angle Set end) - // *** End programmer edit section *** (LegoPanelAngle.Name Set end) + // *** End programmer edit section *** (LegoPanelAngle.Angle Set end) } } - + /// - /// Angle. + /// Name. /// - // *** Start programmer edit section *** (LegoPanelAngle.Angle CustomAttributes) + // *** Start programmer edit section *** (LegoPanelAngle.Name CustomAttributes) - // *** End programmer edit section *** (LegoPanelAngle.Angle CustomAttributes) - public virtual int Angle + // *** End programmer edit section *** (LegoPanelAngle.Name CustomAttributes) + [StrLen(255)] + public virtual string Name { get { - // *** Start programmer edit section *** (LegoPanelAngle.Angle Get start) + // *** Start programmer edit section *** (LegoPanelAngle.Name Get start) - // *** End programmer edit section *** (LegoPanelAngle.Angle Get start) - int result = this.fAngle; - // *** Start programmer edit section *** (LegoPanelAngle.Angle Get end) + // *** End programmer edit section *** (LegoPanelAngle.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (LegoPanelAngle.Name Get end) - // *** End programmer edit section *** (LegoPanelAngle.Angle Get end) + // *** End programmer edit section *** (LegoPanelAngle.Name Get end) return result; } set { - // *** Start programmer edit section *** (LegoPanelAngle.Angle Set start) + // *** Start programmer edit section *** (LegoPanelAngle.Name Set start) - // *** End programmer edit section *** (LegoPanelAngle.Angle Set start) - this.fAngle = value; - // *** Start programmer edit section *** (LegoPanelAngle.Angle Set end) + // *** End programmer edit section *** (LegoPanelAngle.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (LegoPanelAngle.Name Set end) - // *** End programmer edit section *** (LegoPanelAngle.Angle Set end) + // *** End programmer edit section *** (LegoPanelAngle.Name Set end) } } } } + diff --git a/Tests/Objects/LegoPatent.cs b/Tests/Objects/LegoPatent.cs index 7c39c1b8..d9894d4c 100644 --- a/Tests/Objects/LegoPatent.cs +++ b/Tests/Objects/LegoPatent.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -31,54 +28,54 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class LegoPatent : ICSSoft.STORMNET.DataObject { - - private string fName; - - private System.DateTime fDate; - + private string fAuthors; - + + private System.DateTime fDate; + private string fDescription; - + + private string fName; + private NewPlatform.Flexberry.ORM.ODataService.Tests.BaseLegoBlock fBaseLegoBlock; - + // *** Start programmer edit section *** (LegoPatent CustomMembers) // *** End programmer edit section *** (LegoPatent CustomMembers) - + /// - /// Name. + /// Authors. /// - // *** Start programmer edit section *** (LegoPatent.Name CustomAttributes) + // *** Start programmer edit section *** (LegoPatent.Authors CustomAttributes) - // *** End programmer edit section *** (LegoPatent.Name CustomAttributes) + // *** End programmer edit section *** (LegoPatent.Authors CustomAttributes) [StrLen(255)] - public virtual string Name + public virtual string Authors { get { - // *** Start programmer edit section *** (LegoPatent.Name Get start) + // *** Start programmer edit section *** (LegoPatent.Authors Get start) - // *** End programmer edit section *** (LegoPatent.Name Get start) - string result = this.fName; - // *** Start programmer edit section *** (LegoPatent.Name Get end) + // *** End programmer edit section *** (LegoPatent.Authors Get start) + string result = this.fAuthors; + // *** Start programmer edit section *** (LegoPatent.Authors Get end) - // *** End programmer edit section *** (LegoPatent.Name Get end) + // *** End programmer edit section *** (LegoPatent.Authors Get end) return result; } set { - // *** Start programmer edit section *** (LegoPatent.Name Set start) + // *** Start programmer edit section *** (LegoPatent.Authors Set start) - // *** End programmer edit section *** (LegoPatent.Name Set start) - this.fName = value; - // *** Start programmer edit section *** (LegoPatent.Name Set end) + // *** End programmer edit section *** (LegoPatent.Authors Set start) + this.fAuthors = value; + // *** Start programmer edit section *** (LegoPatent.Authors Set end) - // *** End programmer edit section *** (LegoPatent.Name Set end) + // *** End programmer edit section *** (LegoPatent.Authors Set end) } } - + /// /// Date. /// @@ -109,71 +106,71 @@ public virtual System.DateTime Date // *** End programmer edit section *** (LegoPatent.Date Set end) } } - + /// - /// Authors. + /// Description. /// - // *** Start programmer edit section *** (LegoPatent.Authors CustomAttributes) + // *** Start programmer edit section *** (LegoPatent.Description CustomAttributes) - // *** End programmer edit section *** (LegoPatent.Authors CustomAttributes) + // *** End programmer edit section *** (LegoPatent.Description CustomAttributes) [StrLen(255)] - public virtual string Authors + public virtual string Description { get { - // *** Start programmer edit section *** (LegoPatent.Authors Get start) + // *** Start programmer edit section *** (LegoPatent.Description Get start) - // *** End programmer edit section *** (LegoPatent.Authors Get start) - string result = this.fAuthors; - // *** Start programmer edit section *** (LegoPatent.Authors Get end) + // *** End programmer edit section *** (LegoPatent.Description Get start) + string result = this.fDescription; + // *** Start programmer edit section *** (LegoPatent.Description Get end) - // *** End programmer edit section *** (LegoPatent.Authors Get end) + // *** End programmer edit section *** (LegoPatent.Description Get end) return result; } set { - // *** Start programmer edit section *** (LegoPatent.Authors Set start) + // *** Start programmer edit section *** (LegoPatent.Description Set start) - // *** End programmer edit section *** (LegoPatent.Authors Set start) - this.fAuthors = value; - // *** Start programmer edit section *** (LegoPatent.Authors Set end) + // *** End programmer edit section *** (LegoPatent.Description Set start) + this.fDescription = value; + // *** Start programmer edit section *** (LegoPatent.Description Set end) - // *** End programmer edit section *** (LegoPatent.Authors Set end) + // *** End programmer edit section *** (LegoPatent.Description Set end) } } - + /// - /// Description. + /// Name. /// - // *** Start programmer edit section *** (LegoPatent.Description CustomAttributes) + // *** Start programmer edit section *** (LegoPatent.Name CustomAttributes) - // *** End programmer edit section *** (LegoPatent.Description CustomAttributes) + // *** End programmer edit section *** (LegoPatent.Name CustomAttributes) [StrLen(255)] - public virtual string Description + public virtual string Name { get { - // *** Start programmer edit section *** (LegoPatent.Description Get start) + // *** Start programmer edit section *** (LegoPatent.Name Get start) - // *** End programmer edit section *** (LegoPatent.Description Get start) - string result = this.fDescription; - // *** Start programmer edit section *** (LegoPatent.Description Get end) + // *** End programmer edit section *** (LegoPatent.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (LegoPatent.Name Get end) - // *** End programmer edit section *** (LegoPatent.Description Get end) + // *** End programmer edit section *** (LegoPatent.Name Get end) return result; } set { - // *** Start programmer edit section *** (LegoPatent.Description Set start) + // *** Start programmer edit section *** (LegoPatent.Name Set start) - // *** End programmer edit section *** (LegoPatent.Description Set start) - this.fDescription = value; - // *** Start programmer edit section *** (LegoPatent.Description Set end) + // *** End programmer edit section *** (LegoPatent.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (LegoPatent.Name Set end) - // *** End programmer edit section *** (LegoPatent.Description Set end) + // *** End programmer edit section *** (LegoPatent.Name Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.BaseLegoBlock. /// @@ -213,7 +210,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.BaseLegoBlock BaseLe } } } - + /// /// Detail array of LegoPatent. /// @@ -222,12 +219,12 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.BaseLegoBlock BaseLe // *** End programmer edit section *** (DetailArrayDetailArrayOfLegoPatent CustomAttributes) public class DetailArrayOfLegoPatent : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoPatent members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfLegoPatent members) - + /// /// Construct detail array. /// @@ -241,7 +238,7 @@ public DetailArrayOfLegoPatent(NewPlatform.Flexberry.ORM.ODataService.Tests.Base base(typeof(LegoPatent), ((ICSSoft.STORMNET.DataObject)(fBaseLegoBlock))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.LegoPatent this[int index] { get @@ -249,10 +246,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.LegoPatent this[int index] return ((NewPlatform.Flexberry.ORM.ODataService.Tests.LegoPatent)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.LegoPatent dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git a/Tests/Objects/LegoSocketStandard.cs b/Tests/Objects/LegoSocketStandard.cs index d2b60439..67b80ed5 100644 --- a/Tests/Objects/LegoSocketStandard.cs +++ b/Tests/Objects/LegoSocketStandard.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -31,14 +28,14 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class LegoSocketStandard : ICSSoft.STORMNET.DataObject { - + private string fName; - + // *** Start programmer edit section *** (LegoSocketStandard CustomMembers) // *** End programmer edit section *** (LegoSocketStandard CustomMembers) - + /// /// Name. /// @@ -72,3 +69,4 @@ public virtual string Name } } } + diff --git a/Tests/Objects/MainClass.cs b/Tests/Objects/MainClass.cs index 7530a23e..fd49aca0 100644 --- a/Tests/Objects/MainClass.cs +++ b/Tests/Objects/MainClass.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -30,16 +27,16 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class MainClass : ICSSoft.STORMNET.DataObject { - + private string fName; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.AgrClass1 fAgrClass1; - + // *** Start programmer edit section *** (MainClass CustomMembers) // *** End programmer edit section *** (MainClass CustomMembers) - + /// /// Name. /// @@ -71,7 +68,7 @@ public virtual string Name // *** End programmer edit section *** (MainClass.Name Set end) } } - + /// /// MainClass. /// @@ -107,3 +104,4 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.AgrClass1 AgrClass1 } } } + diff --git a/Tests/Objects/Master.cs b/Tests/Objects/Master.cs index 6ee0662d..5a7ad425 100644 --- a/Tests/Objects/Master.cs +++ b/Tests/Objects/Master.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -30,14 +27,14 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class Master : ICSSoft.STORMNET.DataObject { - + private string fproperty; - + // *** Start programmer edit section *** (Master CustomMembers) // *** End programmer edit section *** (Master CustomMembers) - + /// /// property. /// @@ -71,3 +68,4 @@ public virtual string property } } } + diff --git a/Tests/Objects/Person.cs b/Tests/Objects/Person.cs index 18ebcce6..e8c007eb 100644 --- a/Tests/Objects/Person.cs +++ b/Tests/Objects/Person.cs @@ -1,114 +1,112 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - using ICSSoft.STORMNET; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// Person. - /// - // *** Start programmer edit section *** (Person CustomAttributes) - - // *** End programmer edit section *** (Person CustomAttributes) - [PublishName("Person")] - [AutoAltered()] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - public class Person : ICSSoft.STORMNET.DataObject - { - - private string fName; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfChild fChildrens; - - // *** Start programmer edit section *** (Person CustomMembers) - - // *** End programmer edit section *** (Person CustomMembers) - - - /// - /// Name. - /// - // *** Start programmer edit section *** (Person.Name CustomAttributes) - - // *** End programmer edit section *** (Person.Name CustomAttributes) - [StrLen(255)] - public virtual string Name - { - get - { - // *** Start programmer edit section *** (Person.Name Get start) - - // *** End programmer edit section *** (Person.Name Get start) - string result = this.fName; - // *** Start programmer edit section *** (Person.Name Get end) - - // *** End programmer edit section *** (Person.Name Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Person.Name Set start) - - // *** End programmer edit section *** (Person.Name Set start) - this.fName = value; - // *** Start programmer edit section *** (Person.Name Set end) - - // *** End programmer edit section *** (Person.Name Set end) - } - } - - /// - /// Person. - /// - // *** Start programmer edit section *** (Person.Childrens CustomAttributes) - - // *** End programmer edit section *** (Person.Childrens CustomAttributes) - [TypeUsage(new System.Type[] { - typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Daughter), - typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Son)})] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfChild Childrens - { - get - { - // *** Start programmer edit section *** (Person.Childrens Get start) - - // *** End programmer edit section *** (Person.Childrens Get start) - if ((this.fChildrens == null)) - { - this.fChildrens = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfChild(this); - } - NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfChild result = this.fChildrens; - // *** Start programmer edit section *** (Person.Childrens Get end) - - // *** End programmer edit section *** (Person.Childrens Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Person.Childrens Set start) - - // *** End programmer edit section *** (Person.Childrens Set start) - this.fChildrens = value; - // *** Start programmer edit section *** (Person.Childrens Set end) - - // *** End programmer edit section *** (Person.Childrens Set end) - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// Person. + /// + // *** Start programmer edit section *** (Person CustomAttributes) + + // *** End programmer edit section *** (Person CustomAttributes) + [PublishName("Person")] + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class Person : ICSSoft.STORMNET.DataObject + { + + private string fName; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfChild fChildrens; + + // *** Start programmer edit section *** (Person CustomMembers) + + // *** End programmer edit section *** (Person CustomMembers) + + + /// + /// Name. + /// + // *** Start programmer edit section *** (Person.Name CustomAttributes) + + // *** End programmer edit section *** (Person.Name CustomAttributes) + [StrLen(255)] + public virtual string Name + { + get + { + // *** Start programmer edit section *** (Person.Name Get start) + + // *** End programmer edit section *** (Person.Name Get start) + string result = this.fName; + // *** Start programmer edit section *** (Person.Name Get end) + + // *** End programmer edit section *** (Person.Name Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Person.Name Set start) + + // *** End programmer edit section *** (Person.Name Set start) + this.fName = value; + // *** Start programmer edit section *** (Person.Name Set end) + + // *** End programmer edit section *** (Person.Name Set end) + } + } + + /// + /// Person. + /// + // *** Start programmer edit section *** (Person.Childrens CustomAttributes) + + // *** End programmer edit section *** (Person.Childrens CustomAttributes) + [TypeUsage(new System.Type[] { + typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Daughter), + typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Son)})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfChild Childrens + { + get + { + // *** Start programmer edit section *** (Person.Childrens Get start) + + // *** End programmer edit section *** (Person.Childrens Get start) + if ((this.fChildrens == null)) + { + this.fChildrens = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfChild(this); + } + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfChild result = this.fChildrens; + // *** Start programmer edit section *** (Person.Childrens Get end) + + // *** End programmer edit section *** (Person.Childrens Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Person.Childrens Set start) + + // *** End programmer edit section *** (Person.Childrens Set start) + this.fChildrens = value; + // *** Start programmer edit section *** (Person.Childrens Set end) + + // *** End programmer edit section *** (Person.Childrens Set end) + } + } + } +} + diff --git a/Tests/Objects/Son.cs b/Tests/Objects/Son.cs index 387e8e9b..37e0ef4c 100644 --- a/Tests/Objects/Son.cs +++ b/Tests/Objects/Son.cs @@ -1,75 +1,73 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - using ICSSoft.STORMNET; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// Son. - /// - // *** Start programmer edit section *** (Son CustomAttributes) - - // *** End programmer edit section *** (Son CustomAttributes) - [PublishName("Son")] - [AutoAltered()] - [ICSSoft.STORMNET.NotStored(false)] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - public class Son : NewPlatform.Flexberry.ORM.ODataService.Tests.Child - { - - private string fSuspendersColor; - - // *** Start programmer edit section *** (Son CustomMembers) - - // *** End programmer edit section *** (Son CustomMembers) - - - /// - /// SuspendersColor. - /// - // *** Start programmer edit section *** (Son.SuspendersColor CustomAttributes) - - // *** End programmer edit section *** (Son.SuspendersColor CustomAttributes) - [StrLen(255)] - public virtual string SuspendersColor - { - get - { - // *** Start programmer edit section *** (Son.SuspendersColor Get start) - - // *** End programmer edit section *** (Son.SuspendersColor Get start) - string result = this.fSuspendersColor; - // *** Start programmer edit section *** (Son.SuspendersColor Get end) - - // *** End programmer edit section *** (Son.SuspendersColor Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Son.SuspendersColor Set start) - - // *** End programmer edit section *** (Son.SuspendersColor Set start) - this.fSuspendersColor = value; - // *** Start programmer edit section *** (Son.SuspendersColor Set end) - - // *** End programmer edit section *** (Son.SuspendersColor Set end) - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// Son. + /// + // *** Start programmer edit section *** (Son CustomAttributes) + + // *** End programmer edit section *** (Son CustomAttributes) + [PublishName("Son")] + [AutoAltered()] + [ICSSoft.STORMNET.NotStored(false)] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class Son : NewPlatform.Flexberry.ORM.ODataService.Tests.Child + { + + private string fSuspendersColor; + + // *** Start programmer edit section *** (Son CustomMembers) + + // *** End programmer edit section *** (Son CustomMembers) + + + /// + /// SuspendersColor. + /// + // *** Start programmer edit section *** (Son.SuspendersColor CustomAttributes) + + // *** End programmer edit section *** (Son.SuspendersColor CustomAttributes) + [StrLen(255)] + public virtual string SuspendersColor + { + get + { + // *** Start programmer edit section *** (Son.SuspendersColor Get start) + + // *** End programmer edit section *** (Son.SuspendersColor Get start) + string result = this.fSuspendersColor; + // *** Start programmer edit section *** (Son.SuspendersColor Get end) + + // *** End programmer edit section *** (Son.SuspendersColor Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Son.SuspendersColor Set start) + + // *** End programmer edit section *** (Son.SuspendersColor Set start) + this.fSuspendersColor = value; + // *** Start programmer edit section *** (Son.SuspendersColor Set end) + + // *** End programmer edit section *** (Son.SuspendersColor Set end) + } + } + } +} + diff --git a/Tests/Objects/TestDetailWithCicle.cs b/Tests/Objects/TestDetailWithCicle.cs index bfaedbab..245b3551 100644 --- a/Tests/Objects/TestDetailWithCicle.cs +++ b/Tests/Objects/TestDetailWithCicle.cs @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -42,18 +39,18 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "Parent.TestDetailName"})] public class TestDetailWithCicle : ICSSoft.STORMNET.DataObject { - + private string fTestDetailName; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.TestDetailWithCicle fParent; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.TestMaster fTestMaster; - + // *** Start programmer edit section *** (TestDetailWithCicle CustomMembers) // *** End programmer edit section *** (TestDetailWithCicle CustomMembers) - + /// /// TestDetailName. /// @@ -85,7 +82,7 @@ public virtual string TestDetailName // *** End programmer edit section *** (TestDetailWithCicle.TestDetailName Set end) } } - + /// /// TestDetailWithCicle. /// @@ -118,7 +115,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.TestDetailWithCicle // *** End programmer edit section *** (TestDetailWithCicle.Parent Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.TestMaster. /// @@ -153,13 +150,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.TestMaster TestMaste // *** End programmer edit section *** (TestDetailWithCicle.TestMaster Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "TestDetailWithCicleE" view. /// @@ -170,7 +167,7 @@ public static ICSSoft.STORMNET.View TestDetailWithCicleE return ICSSoft.STORMNET.Information.GetView("TestDetailWithCicleE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.TestDetailWithCicle)); } } - + /// /// "TestDetaiWithCicleL" view. /// @@ -183,7 +180,7 @@ public static ICSSoft.STORMNET.View TestDetaiWithCicleL } } } - + /// /// Detail array of TestDetailWithCicle. /// @@ -192,12 +189,12 @@ public static ICSSoft.STORMNET.View TestDetaiWithCicleL // *** End programmer edit section *** (DetailArrayDetailArrayOfTestDetailWithCicle CustomAttributes) public class DetailArrayOfTestDetailWithCicle : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfTestDetailWithCicle members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfTestDetailWithCicle members) - + /// /// Construct detail array. /// @@ -211,7 +208,7 @@ public DetailArrayOfTestDetailWithCicle(NewPlatform.Flexberry.ORM.ODataService.T base(typeof(TestDetailWithCicle), ((ICSSoft.STORMNET.DataObject)(fTestMaster))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.TestDetailWithCicle this[int index] { get @@ -219,10 +216,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.TestDetailWithCicle this[int return ((NewPlatform.Flexberry.ORM.ODataService.Tests.TestDetailWithCicle)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.TestDetailWithCicle dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git a/Tests/Objects/tTip.cs b/Tests/Objects/tTip.cs index fc34b87f..82e092b3 100644 --- a/Tests/Objects/tTip.cs +++ b/Tests/Objects/tTip.cs @@ -1,19 +1,16 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -27,45 +24,46 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests // *** End programmer edit section *** (tTip CustomAttributes) public enum tTip { - + // *** Start programmer edit section *** (tTip.sedan CustomAttributes) // *** End programmer edit section *** (tTip.sedan CustomAttributes) sedan, - + // *** Start programmer edit section *** (tTip.cabriolet CustomAttributes) // *** End programmer edit section *** (tTip.cabriolet CustomAttributes) cabriolet, - + // *** Start programmer edit section *** (tTip.coupe CustomAttributes) // *** End programmer edit section *** (tTip.coupe CustomAttributes) coupe, - + // *** Start programmer edit section *** (tTip.pickup CustomAttributes) // *** End programmer edit section *** (tTip.pickup CustomAttributes) pickup, - + // *** Start programmer edit section *** (tTip.crossover CustomAttributes) // *** End programmer edit section *** (tTip.crossover CustomAttributes) crossover, - + // *** Start programmer edit section *** (tTip.limousine CustomAttributes) // *** End programmer edit section *** (tTip.limousine CustomAttributes) limousine, - + // *** Start programmer edit section *** (tTip.roadster CustomAttributes) // *** End programmer edit section *** (tTip.roadster CustomAttributes) roadster, - + // *** Start programmer edit section *** (tTip.minivan CustomAttributes) // *** End programmer edit section *** (tTip.minivan CustomAttributes) minivan, } } + diff --git "a/Tests/Objects/t\320\237\320\276\320\273.cs" "b/Tests/Objects/t\320\237\320\276\320\273.cs" index 5ca7616e..6cc5a5a9 100644 --- "a/Tests/Objects/t\320\237\320\276\320\273.cs" +++ "b/Tests/Objects/t\320\237\320\276\320\273.cs" @@ -1,19 +1,16 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -27,20 +24,21 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests // *** End programmer edit section *** (tПол CustomAttributes) public enum tПол { - + // *** Start programmer edit section *** (tПол.Мужской CustomAttributes) // *** End programmer edit section *** (tПол.Мужской CustomAttributes) Мужской, - + // *** Start programmer edit section *** (tПол.Женский CustomAttributes) // *** End programmer edit section *** (tПол.Женский CustomAttributes) Женский, - + // *** Start programmer edit section *** (tПол.НеПонятно CustomAttributes) // *** End programmer edit section *** (tПол.НеПонятно CustomAttributes) НеПонятно, } } + diff --git "a/Tests/Objects/\320\220\320\262\321\202\320\276\321\200.cs" "b/Tests/Objects/\320\220\320\262\321\202\320\276\321\200.cs" index 839b8dc7..a8622df0 100644 --- "a/Tests/Objects/\320\220\320\262\321\202\320\276\321\200.cs" +++ "b/Tests/Objects/\320\220\320\262\321\202\320\276\321\200.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -32,14 +29,14 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "Имя as \'Имя\'"})] public class Автор : ICSSoft.STORMNET.DataObject { - + private string fИмя; - + // *** Start programmer edit section *** (Автор CustomMembers) // *** End programmer edit section *** (Автор CustomMembers) - + /// /// Имя. /// @@ -71,13 +68,13 @@ public virtual string Имя // *** End programmer edit section *** (Автор.Имя Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "View" view. /// @@ -91,3 +88,4 @@ public static ICSSoft.STORMNET.View View } } } + diff --git "a/Tests/Objects/\320\221\320\260\320\267\320\276\320\262\321\213\320\271\320\232\320\273\320\260\321\201\321\201.cs" "b/Tests/Objects/\320\221\320\260\320\267\320\276\320\262\321\213\320\271\320\232\320\273\320\260\321\201\321\201.cs" index c7f68279..ccaa0775 100644 --- "a/Tests/Objects/\320\221\320\260\320\267\320\276\320\262\321\213\320\271\320\232\320\273\320\260\321\201\321\201.cs" +++ "b/Tests/Objects/\320\221\320\260\320\267\320\276\320\262\321\213\320\271\320\232\320\273\320\260\321\201\321\201.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -34,18 +31,18 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests ""})] public class БазовыйКласс : ICSSoft.STORMNET.DataObject { - + private string fСвойство1; - + private int fСвойство2; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfДетейл fДетейл; - + // *** Start programmer edit section *** (БазовыйКласс CustomMembers) // *** End programmer edit section *** (БазовыйКласс CustomMembers) - + /// /// Свойство1. /// @@ -77,7 +74,7 @@ public virtual string Свойство1 // *** End programmer edit section *** (БазовыйКласс.Свойство1 Set end) } } - + /// /// Свойство2. /// @@ -108,7 +105,7 @@ public virtual int Свойство2 // *** End programmer edit section *** (БазовыйКласс.Свойство2 Set end) } } - + /// /// БазовыйКласс. /// @@ -146,13 +143,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfДет // *** End programmer edit section *** (БазовыйКласс.Детейл Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "БазовыйКлассE" view. /// @@ -166,3 +163,4 @@ public static ICSSoft.STORMNET.View БазовыйКлассE } } } + diff --git "a/Tests/Objects/\320\221\320\265\321\200\320\273\320\276\320\263\320\260.cs" "b/Tests/Objects/\320\221\320\265\321\200\320\273\320\276\320\263\320\260.cs" index 303fb817..3467287d 100644 --- "a/Tests/Objects/\320\221\320\265\321\200\320\273\320\276\320\263\320\260.cs" +++ "b/Tests/Objects/\320\221\320\265\321\200\320\273\320\276\320\263\320\260.cs" @@ -1,21 +1,18 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET.Business; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -50,156 +47,156 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [MasterViewDefineAttribute("БерлогаE", "ЛесРасположения", ICSSoft.STORMNET.LookupTypeEnum.Standard, "", "Название")] public class Берлога : ICSSoft.STORMNET.DataObject { - - private string fПолеБС; - - private string fНаименование; - - private int fКомфортность; - + private bool fЗаброшена; - + + private int fКомфортность; + + private string fНаименование; + + private string fПолеБС; + private ICSSoft.STORMNET.UserDataTypes.WebFile fСертификат; - + private string fСертификатСтрока; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Лес fЛесРасположения; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Порода fПодходитДляПороды; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fМедведь; - + // *** Start programmer edit section *** (Берлога CustomMembers) // *** End programmer edit section *** (Берлога CustomMembers) - + /// - /// ПолеБС. + /// Заброшена. /// - // *** Start programmer edit section *** (Берлога.ПолеБС CustomAttributes) + // *** Start programmer edit section *** (Берлога.Заброшена CustomAttributes) - // *** End programmer edit section *** (Берлога.ПолеБС CustomAttributes) - [StrLen(255)] - public virtual string ПолеБС + // *** End programmer edit section *** (Берлога.Заброшена CustomAttributes) + public virtual bool Заброшена { get { - // *** Start programmer edit section *** (Берлога.ПолеБС Get start) + // *** Start programmer edit section *** (Берлога.Заброшена Get start) - // *** End programmer edit section *** (Берлога.ПолеБС Get start) - string result = this.fПолеБС; - // *** Start programmer edit section *** (Берлога.ПолеБС Get end) + // *** End programmer edit section *** (Берлога.Заброшена Get start) + bool result = this.fЗаброшена; + // *** Start programmer edit section *** (Берлога.Заброшена Get end) - // *** End programmer edit section *** (Берлога.ПолеБС Get end) + // *** End programmer edit section *** (Берлога.Заброшена Get end) return result; } set { - // *** Start programmer edit section *** (Берлога.ПолеБС Set start) + // *** Start programmer edit section *** (Берлога.Заброшена Set start) - // *** End programmer edit section *** (Берлога.ПолеБС Set start) - this.fПолеБС = value; - // *** Start programmer edit section *** (Берлога.ПолеБС Set end) + // *** End programmer edit section *** (Берлога.Заброшена Set start) + this.fЗаброшена = value; + // *** Start programmer edit section *** (Берлога.Заброшена Set end) - // *** End programmer edit section *** (Берлога.ПолеБС Set end) + // *** End programmer edit section *** (Берлога.Заброшена Set end) } } - + /// - /// Наименование. + /// Комфортность. /// - // *** Start programmer edit section *** (Берлога.Наименование CustomAttributes) + // *** Start programmer edit section *** (Берлога.Комфортность CustomAttributes) - // *** End programmer edit section *** (Берлога.Наименование CustomAttributes) - [StrLen(255)] - public virtual string Наименование + // *** End programmer edit section *** (Берлога.Комфортность CustomAttributes) + public virtual int Комфортность { get { - // *** Start programmer edit section *** (Берлога.Наименование Get start) + // *** Start programmer edit section *** (Берлога.Комфортность Get start) - // *** End programmer edit section *** (Берлога.Наименование Get start) - string result = this.fНаименование; - // *** Start programmer edit section *** (Берлога.Наименование Get end) + // *** End programmer edit section *** (Берлога.Комфортность Get start) + int result = this.fКомфортность; + // *** Start programmer edit section *** (Берлога.Комфортность Get end) - // *** End programmer edit section *** (Берлога.Наименование Get end) + // *** End programmer edit section *** (Берлога.Комфортность Get end) return result; } set { - // *** Start programmer edit section *** (Берлога.Наименование Set start) + // *** Start programmer edit section *** (Берлога.Комфортность Set start) - // *** End programmer edit section *** (Берлога.Наименование Set start) - this.fНаименование = value; - // *** Start programmer edit section *** (Берлога.Наименование Set end) + // *** End programmer edit section *** (Берлога.Комфортность Set start) + this.fКомфортность = value; + // *** Start programmer edit section *** (Берлога.Комфортность Set end) - // *** End programmer edit section *** (Берлога.Наименование Set end) + // *** End programmer edit section *** (Берлога.Комфортность Set end) } } - + /// - /// Комфортность. + /// Наименование. /// - // *** Start programmer edit section *** (Берлога.Комфортность CustomAttributes) + // *** Start programmer edit section *** (Берлога.Наименование CustomAttributes) - // *** End programmer edit section *** (Берлога.Комфортность CustomAttributes) - public virtual int Комфортность + // *** End programmer edit section *** (Берлога.Наименование CustomAttributes) + [StrLen(255)] + public virtual string Наименование { get { - // *** Start programmer edit section *** (Берлога.Комфортность Get start) + // *** Start programmer edit section *** (Берлога.Наименование Get start) - // *** End programmer edit section *** (Берлога.Комфортность Get start) - int result = this.fКомфортность; - // *** Start programmer edit section *** (Берлога.Комфортность Get end) + // *** End programmer edit section *** (Берлога.Наименование Get start) + string result = this.fНаименование; + // *** Start programmer edit section *** (Берлога.Наименование Get end) - // *** End programmer edit section *** (Берлога.Комфортность Get end) + // *** End programmer edit section *** (Берлога.Наименование Get end) return result; } set { - // *** Start programmer edit section *** (Берлога.Комфортность Set start) + // *** Start programmer edit section *** (Берлога.Наименование Set start) - // *** End programmer edit section *** (Берлога.Комфортность Set start) - this.fКомфортность = value; - // *** Start programmer edit section *** (Берлога.Комфортность Set end) + // *** End programmer edit section *** (Берлога.Наименование Set start) + this.fНаименование = value; + // *** Start programmer edit section *** (Берлога.Наименование Set end) - // *** End programmer edit section *** (Берлога.Комфортность Set end) + // *** End programmer edit section *** (Берлога.Наименование Set end) } } - + /// - /// Заброшена. + /// ПолеБС. /// - // *** Start programmer edit section *** (Берлога.Заброшена CustomAttributes) + // *** Start programmer edit section *** (Берлога.ПолеБС CustomAttributes) - // *** End programmer edit section *** (Берлога.Заброшена CustomAttributes) - public virtual bool Заброшена + // *** End programmer edit section *** (Берлога.ПолеБС CustomAttributes) + [StrLen(255)] + public virtual string ПолеБС { get { - // *** Start programmer edit section *** (Берлога.Заброшена Get start) + // *** Start programmer edit section *** (Берлога.ПолеБС Get start) - // *** End programmer edit section *** (Берлога.Заброшена Get start) - bool result = this.fЗаброшена; - // *** Start programmer edit section *** (Берлога.Заброшена Get end) + // *** End programmer edit section *** (Берлога.ПолеБС Get start) + string result = this.fПолеБС; + // *** Start programmer edit section *** (Берлога.ПолеБС Get end) - // *** End programmer edit section *** (Берлога.Заброшена Get end) + // *** End programmer edit section *** (Берлога.ПолеБС Get end) return result; } set { - // *** Start programmer edit section *** (Берлога.Заброшена Set start) + // *** Start programmer edit section *** (Берлога.ПолеБС Set start) - // *** End programmer edit section *** (Берлога.Заброшена Set start) - this.fЗаброшена = value; - // *** Start programmer edit section *** (Берлога.Заброшена Set end) + // *** End programmer edit section *** (Берлога.ПолеБС Set start) + this.fПолеБС = value; + // *** Start programmer edit section *** (Берлога.ПолеБС Set end) - // *** End programmer edit section *** (Берлога.Заброшена Set end) + // *** End programmer edit section *** (Берлога.ПолеБС Set end) } } - + /// /// Сертификат. /// @@ -230,7 +227,7 @@ public virtual ICSSoft.STORMNET.UserDataTypes.WebFile Сертификат // *** End programmer edit section *** (Берлога.Сертификат Set end) } } - + /// /// СертификатСтрока. /// @@ -262,7 +259,7 @@ public virtual string СертификатСтрока // *** End programmer edit section *** (Берлога.СертификатСтрока Set end) } } - + /// /// Берлога. /// @@ -295,7 +292,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Лес ЛесРас // *** End programmer edit section *** (Берлога.ЛесРасположения Set end) } } - + /// /// Берлога. /// @@ -328,7 +325,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Порода Под // *** End programmer edit section *** (Берлога.ПодходитДляПороды Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь. /// @@ -363,13 +360,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь Ме // *** End programmer edit section *** (Берлога.Медведь Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// Представление для работы тестов на загрузку объектов. /// @@ -380,7 +377,7 @@ public static ICSSoft.STORMNET.View LoadTestView return ICSSoft.STORMNET.Information.GetView("LoadTestView", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Берлога)); } } - + /// /// "БерлогаE" view. /// @@ -393,7 +390,7 @@ public static ICSSoft.STORMNET.View БерлогаE } } } - + /// /// Detail array of Берлога. /// @@ -402,12 +399,12 @@ public static ICSSoft.STORMNET.View БерлогаE // *** End programmer edit section *** (DetailArrayDetailArrayOfБерлога CustomAttributes) public class DetailArrayOfБерлога : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога members) - + /// /// Construct detail array. /// @@ -421,7 +418,7 @@ public DetailArrayOfБерлога(NewPlatform.Flexberry.ORM.ODataService.Tests. base(typeof(Берлога), ((ICSSoft.STORMNET.DataObject)(fМедведь))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.Берлога this[int index] { get @@ -429,10 +426,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.Берлога this[int inde return ((NewPlatform.Flexberry.ORM.ODataService.Tests.Берлога)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.Берлога dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git "a/Tests/Objects/\320\221\320\270\320\261\320\273\320\270\320\276\321\202\320\265\320\272\320\260.cs" "b/Tests/Objects/\320\221\320\270\320\261\320\273\320\270\320\276\321\202\320\265\320\272\320\260.cs" index 00c29118..de9815e8 100644 --- "a/Tests/Objects/\320\221\320\270\320\261\320\273\320\270\320\276\321\202\320\265\320\272\320\260.cs" +++ "b/Tests/Objects/\320\221\320\270\320\261\320\273\320\270\320\276\321\202\320\265\320\272\320\260.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -36,18 +33,18 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests ""})] public class Библиотека : ICSSoft.STORMNET.DataObject { - + private string fАдрес; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЖурнал fЖурнал; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfКнига fКнига; - + // *** Start programmer edit section *** (Библиотека CustomMembers) // *** End programmer edit section *** (Библиотека CustomMembers) - + /// /// Адрес. /// @@ -79,7 +76,7 @@ public virtual string Адрес // *** End programmer edit section *** (Библиотека.Адрес Set end) } } - + /// /// Библиотека. /// @@ -114,7 +111,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЖур // *** End programmer edit section *** (Библиотека.Журнал Set end) } } - + /// /// Библиотека. /// @@ -149,13 +146,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfКни // *** End programmer edit section *** (Библиотека.Книга Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "Eview" view. /// @@ -169,3 +166,4 @@ public static ICSSoft.STORMNET.View Eview } } } + diff --git "a/Tests/Objects/\320\221\320\273\320\276\321\205\320\260.cs" "b/Tests/Objects/\320\221\320\273\320\276\321\205\320\260.cs" index 20c8b5df..73cd1b53 100644 --- "a/Tests/Objects/\320\221\320\273\320\276\321\205\320\260.cs" +++ "b/Tests/Objects/\320\221\320\273\320\276\321\205\320\260.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -32,16 +29,16 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "Кличка"})] public class Блоха : ICSSoft.STORMNET.DataObject { - + private string fКличка; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fМедведьОбитания; - + // *** Start programmer edit section *** (Блоха CustomMembers) // *** End programmer edit section *** (Блоха CustomMembers) - + /// /// Кличка. /// @@ -73,7 +70,7 @@ public virtual string Кличка // *** End programmer edit section *** (Блоха.Кличка Set end) } } - + /// /// Блоха. /// @@ -106,13 +103,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь Ме // *** End programmer edit section *** (Блоха.МедведьОбитания Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// Представление для работы тестов на фильтрацию с использованием псевдодетейла. /// @@ -126,3 +123,4 @@ public static ICSSoft.STORMNET.View PseudoDetailView } } } + diff --git "a/Tests/Objects/\320\224\320\265\321\202\320\265\320\271\320\273.cs" "b/Tests/Objects/\320\224\320\265\321\202\320\265\320\271\320\273.cs" index b9577c91..1afcbca8 100644 --- "a/Tests/Objects/\320\224\320\265\321\202\320\265\320\271\320\273.cs" +++ "b/Tests/Objects/\320\224\320\265\321\202\320\265\320\271\320\273.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -32,18 +29,18 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "prop1"})] public class Детейл : ICSSoft.STORMNET.DataObject { - + private int fprop1; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfДетейл2 fДетейл2; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.БазовыйКласс fБазовыйКласс; - + // *** Start programmer edit section *** (Детейл CustomMembers) // *** End programmer edit section *** (Детейл CustomMembers) - + /// /// prop1. /// @@ -74,7 +71,7 @@ public virtual int prop1 // *** End programmer edit section *** (Детейл.prop1 Set end) } } - + /// /// Детейл. /// @@ -109,7 +106,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfДет // *** End programmer edit section *** (Детейл.Детейл2 Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.БазовыйКласс. /// @@ -146,13 +143,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.БазовыйКла // *** End programmer edit section *** (Детейл.БазовыйКласс Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "ДетейлE" view. /// @@ -165,7 +162,7 @@ public static ICSSoft.STORMNET.View ДетейлE } } } - + /// /// Detail array of Детейл. /// @@ -174,12 +171,12 @@ public static ICSSoft.STORMNET.View ДетейлE // *** End programmer edit section *** (DetailArrayDetailArrayOfДетейл CustomAttributes) public class DetailArrayOfДетейл : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfДетейл members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfДетейл members) - + /// /// Construct detail array. /// @@ -193,7 +190,7 @@ public DetailArrayOfДетейл(NewPlatform.Flexberry.ORM.ODataService.Tests.Б base(typeof(Детейл), ((ICSSoft.STORMNET.DataObject)(fБазовыйКласс))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл this[int index] { get @@ -201,10 +198,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл this[int index] return ((NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git "a/Tests/Objects/\320\224\320\265\321\202\320\265\320\271\320\2732.cs" "b/Tests/Objects/\320\224\320\265\321\202\320\265\320\271\320\2732.cs" index c2c448f1..d0bf199f 100644 --- "a/Tests/Objects/\320\224\320\265\321\202\320\265\320\271\320\2732.cs" +++ "b/Tests/Objects/\320\224\320\265\321\202\320\265\320\271\320\2732.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -30,16 +27,16 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class Детейл2 : ICSSoft.STORMNET.DataObject { - + private string fprop2; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл fДетейл; - + // *** Start programmer edit section *** (Детейл2 CustomMembers) // *** End programmer edit section *** (Детейл2 CustomMembers) - + /// /// prop2. /// @@ -71,7 +68,7 @@ public virtual string prop2 // *** End programmer edit section *** (Детейл2.prop2 Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл. /// @@ -109,7 +106,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл Дет } } } - + /// /// Detail array of Детейл2. /// @@ -118,12 +115,12 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл Дет // *** End programmer edit section *** (DetailArrayDetailArrayOfДетейл2 CustomAttributes) public class DetailArrayOfДетейл2 : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfДетейл2 members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfДетейл2 members) - + /// /// Construct detail array. /// @@ -137,7 +134,7 @@ public DetailArrayOfДетейл2(NewPlatform.Flexberry.ORM.ODataService.Tests. base(typeof(Детейл2), ((ICSSoft.STORMNET.DataObject)(fДетейл))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл2 this[int index] { get @@ -145,10 +142,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл2 this[int index return ((NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл2)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл2 dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git "a/Tests/Objects/\320\224\320\265\321\202\320\265\320\271\320\273\320\235\320\260\321\201\320\273\320\265\320\264\320\275\320\270\320\272.cs" "b/Tests/Objects/\320\224\320\265\321\202\320\265\320\271\320\273\320\235\320\260\321\201\320\273\320\265\320\264\320\275\320\270\320\272.cs" index e0a77167..ca6cef9c 100644 --- "a/Tests/Objects/\320\224\320\265\321\202\320\265\320\271\320\273\320\235\320\260\321\201\320\273\320\265\320\264\320\275\320\270\320\272.cs" +++ "b/Tests/Objects/\320\224\320\265\321\202\320\265\320\271\320\273\320\235\320\260\321\201\320\273\320\265\320\264\320\275\320\270\320\272.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -33,14 +30,14 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "БазовыйКласс"})] public class ДетейлНаследник : NewPlatform.Flexberry.ORM.ODataService.Tests.Детейл { - + private string fprop3; - + // *** Start programmer edit section *** (ДетейлНаследник CustomMembers) // *** End programmer edit section *** (ДетейлНаследник CustomMembers) - + /// /// prop3. /// @@ -72,13 +69,13 @@ public virtual string prop3 // *** End programmer edit section *** (ДетейлНаследник.prop3 Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "ДетейлНаследникE" view. /// @@ -92,3 +89,4 @@ public static ICSSoft.STORMNET.View ДетейлНаследникE } } } + diff --git "a/Tests/Objects/\320\224\320\276\321\207\320\265\321\200\320\275\320\270\320\271\320\232\320\273\320\260\321\201\321\201.cs" "b/Tests/Objects/\320\224\320\276\321\207\320\265\321\200\320\275\320\270\320\271\320\232\320\273\320\260\321\201\321\201.cs" index 9b3a1814..20ec6a21 100644 --- "a/Tests/Objects/\320\224\320\276\321\207\320\265\321\200\320\275\320\270\320\271\320\232\320\273\320\260\321\201\321\201.cs" +++ "b/Tests/Objects/\320\224\320\276\321\207\320\265\321\200\320\275\320\270\320\271\320\232\320\273\320\260\321\201\321\201.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -56,14 +53,14 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "PropertyStormnetFile"})] public class ДочернийКласс : NewPlatform.Flexberry.ORM.ODataService.Tests.КлассСМножествомТипов { - + private string fChildProperty; - + // *** Start programmer edit section *** (ДочернийКласс CustomMembers) // *** End programmer edit section *** (ДочернийКласс CustomMembers) - + /// /// ChildProperty. /// @@ -95,13 +92,13 @@ public virtual string ChildProperty // *** End programmer edit section *** (ДочернийКласс.ChildProperty Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "ДочернийКлассE" view. /// @@ -115,3 +112,4 @@ public static ICSSoft.STORMNET.View ДочернийКлассE } } } + diff --git "a/Tests/Objects/\320\226\321\203\321\200\320\275\320\260\320\273.cs" "b/Tests/Objects/\320\226\321\203\321\200\320\275\320\260\320\273.cs" index 7a37b5bc..6f753eef 100644 --- "a/Tests/Objects/\320\226\321\203\321\200\320\275\320\260\320\273.cs" +++ "b/Tests/Objects/\320\226\321\203\321\200\320\275\320\260\320\273.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -35,20 +32,20 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [MasterViewDefineAttribute("Dжурнал", "Автор2", ICSSoft.STORMNET.LookupTypeEnum.Standard, "", "Имя")] public class Журнал : ICSSoft.STORMNET.DataObject { - + private string fНазвание; - + private int fНомер; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Автор fАвтор2; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Библиотека fБиблиотека2; - + // *** Start programmer edit section *** (Журнал CustomMembers) // *** End programmer edit section *** (Журнал CustomMembers) - + /// /// Название. /// @@ -80,7 +77,7 @@ public virtual string Название // *** End programmer edit section *** (Журнал.Название Set end) } } - + /// /// Номер. /// @@ -111,7 +108,7 @@ public virtual int Номер // *** End programmer edit section *** (Журнал.Номер Set end) } } - + /// /// Журнал. /// @@ -145,7 +142,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Автор Авто // *** End programmer edit section *** (Журнал.Автор2 Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.Библиотека. /// @@ -180,13 +177,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Библиотека // *** End programmer edit section *** (Журнал.Библиотека2 Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "Dжурнал" view. /// @@ -199,7 +196,7 @@ public static ICSSoft.STORMNET.View Dжурнал } } } - + /// /// Detail array of Журнал. /// @@ -208,12 +205,12 @@ public static ICSSoft.STORMNET.View Dжурнал // *** End programmer edit section *** (DetailArrayDetailArrayOfЖурнал CustomAttributes) public class DetailArrayOfЖурнал : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЖурнал members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЖурнал members) - + /// /// Construct detail array. /// @@ -227,7 +224,7 @@ public DetailArrayOfЖурнал(NewPlatform.Flexberry.ORM.ODataService.Tests.Б base(typeof(Журнал), ((ICSSoft.STORMNET.DataObject)(fБиблиотека))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.Журнал this[int index] { get @@ -235,10 +232,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.Журнал this[int index] return ((NewPlatform.Flexberry.ORM.ODataService.Tests.Журнал)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.Журнал dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git "a/Tests/Objects/\320\232\320\273\320\260\321\201\321\201NotStored.cs" "b/Tests/Objects/\320\232\320\273\320\260\321\201\321\201NotStored.cs" index 2a12d8c2..270d2d4c 100644 --- "a/Tests/Objects/\320\232\320\273\320\260\321\201\321\201NotStored.cs" +++ "b/Tests/Objects/\320\232\320\273\320\260\321\201\321\201NotStored.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -33,14 +30,14 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "StrAttr"})] public class КлассNotStored : ICSSoft.STORMNET.DataObject { - + private string fStrAttr; - + // *** Start programmer edit section *** (КлассNotStored CustomMembers) // *** End programmer edit section *** (КлассNotStored CustomMembers) - + /// /// StrAttr. /// @@ -72,13 +69,13 @@ public virtual string StrAttr // *** End programmer edit section *** (КлассNotStored.StrAttr Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "КлассNotStoredE" view. /// @@ -92,3 +89,4 @@ public static ICSSoft.STORMNET.View КлассNotStoredE } } } + diff --git "a/Tests/Objects/\320\232\320\273\320\260\321\201\321\201StoredDerived.cs" "b/Tests/Objects/\320\232\320\273\320\260\321\201\321\201StoredDerived.cs" index 365c87be..a05be2c4 100644 --- "a/Tests/Objects/\320\232\320\273\320\260\321\201\321\201StoredDerived.cs" +++ "b/Tests/Objects/\320\232\320\273\320\260\321\201\321\201StoredDerived.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -34,14 +31,14 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "StrAttr"})] public class КлассStoredDerived : NewPlatform.Flexberry.ORM.ODataService.Tests.КлассNotStored { - + private string fStrAttr2; - + // *** Start programmer edit section *** (КлассStoredDerived CustomMembers) // *** End programmer edit section *** (КлассStoredDerived CustomMembers) - + /// /// StrAttr2. /// @@ -73,13 +70,13 @@ public virtual string StrAttr2 // *** End programmer edit section *** (КлассStoredDerived.StrAttr2 Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "КлассStoredDerivedE" view. /// @@ -93,3 +90,4 @@ public static ICSSoft.STORMNET.View КлассStoredDerivedE } } } + diff --git "a/Tests/Objects/\320\232\320\273\320\260\321\201\321\201\320\241\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276\320\274\320\242\320\270\320\277\320\276\320\262.cs" "b/Tests/Objects/\320\232\320\273\320\260\321\201\321\201\320\241\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276\320\274\320\242\320\270\320\277\320\276\320\262.cs" index 8602e492..ac94a2bf 100644 --- "a/Tests/Objects/\320\232\320\273\320\260\321\201\321\201\320\241\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276\320\274\320\242\320\270\320\277\320\276\320\262.cs" +++ "b/Tests/Objects/\320\232\320\273\320\260\321\201\321\201\320\241\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276\320\274\320\242\320\270\320\277\320\276\320\262.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -57,124 +54,85 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "PropertyGeography"})] public class КлассСМножествомТипов : ICSSoft.STORMNET.DataObject { - - private Microsoft.Spatial.Geography fPropertyGeography; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Цифра fPropertyEnum; - + private bool fPropertyBool; - - private int fPropertyInt; - + private System.DateTime fPropertyDateTime; - - private string fPropertyString; - - private float fPropertyFloat; - - private double fPropertyDouble; - + private decimal fPropertyDecimal; - - private System.Nullable fPropertySystemNullableDateTime; - - private System.Nullable fPropertySystemNullableInt; - - private System.Nullable fPropertySystemNullableGuid; - - private System.Nullable fPropertySystemNullableDecimal; - - private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fPropertyStormnetNullableDateTime; - - private ICSSoft.STORMNET.UserDataTypes.NullableInt fPropertyStormnetNullableInt; - - private ICSSoft.STORMNET.KeyGen.KeyGuid fPropertyStormnetKeyGuid; - - private ICSSoft.STORMNET.UserDataTypes.NullableDecimal fPropertyStormnetNullableDecimal; - - private ICSSoft.STORMNET.UserDataTypes.PartliedDate fPropertyStormnetPartliedDate; - - private ICSSoft.STORMNET.UserDataTypes.Contact fPropertyStormnetContact; - + + private double fPropertyDouble; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Цифра fPropertyEnum; + + private float fPropertyFloat; + + private Microsoft.Spatial.Geography fPropertyGeography; + + private int fPropertyInt; + private ICSSoft.STORMNET.UserDataTypes.Blob fPropertyStormnetBlob; - + + private ICSSoft.STORMNET.UserDataTypes.Contact fPropertyStormnetContact; + private ICSSoft.STORMNET.UserDataTypes.Event fPropertyStormnetEvent; - + + private ICSSoft.STORMNET.FileType.File fPropertyStormnetFile; + private ICSSoft.STORMNET.UserDataTypes.GeoData fPropertyStormnetGeoData; - + private ICSSoft.STORMNET.UserDataTypes.Image fPropertyStormnetImage; - + + private ICSSoft.STORMNET.KeyGen.KeyGuid fPropertyStormnetKeyGuid; + + private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fPropertyStormnetNullableDateTime; + + private ICSSoft.STORMNET.UserDataTypes.NullableDecimal fPropertyStormnetNullableDecimal; + + private ICSSoft.STORMNET.UserDataTypes.NullableInt fPropertyStormnetNullableInt; + + private ICSSoft.STORMNET.UserDataTypes.PartliedDate fPropertyStormnetPartliedDate; + private ICSSoft.STORMNET.UserDataTypes.WebFile fPropertyStormnetWebFile; - - private ICSSoft.STORMNET.FileType.File fPropertyStormnetFile; - - // *** Start programmer edit section *** (КлассСМножествомТипов CustomMembers) - // *** End programmer edit section *** (КлассСМножествомТипов CustomMembers) + private string fPropertyString; - - /// - /// PropertyGeography. - /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyGeography CustomAttributes) + private System.Nullable fPropertySystemNullableDateTime; - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyGeography CustomAttributes) - public virtual Microsoft.Spatial.Geography PropertyGeography - { - get - { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyGeography Get start) + private System.Nullable fPropertySystemNullableDecimal; - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyGeography Get start) - Microsoft.Spatial.Geography result = this.fPropertyGeography; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyGeography Get end) + private System.Nullable fPropertySystemNullableGuid; - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyGeography Get end) - return result; - } - set - { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyGeography Set start) + private System.Nullable fPropertySystemNullableInt; + + // *** Start programmer edit section *** (КлассСМножествомТипов CustomMembers) + + // *** End programmer edit section *** (КлассСМножествомТипов CustomMembers) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyGeography Set start) - this.fPropertyGeography = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyGeography Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyGeography Set end) - } - } - /// - /// PropertyEnum. + /// NotStoredProperty. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyEnum CustomAttributes) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyEnum CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Цифра PropertyEnum + // *** Start programmer edit section *** (КлассСМножествомТипов.NotStoredProperty CustomAttributes) + [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.SQLDataService), "@PropertyInt")] + // *** End programmer edit section *** (КлассСМножествомТипов.NotStoredProperty CustomAttributes) + [ICSSoft.STORMNET.NotStored()] + public virtual int NotStoredProperty { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyEnum Get start) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyEnum Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Цифра result = this.fPropertyEnum; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyEnum Get end) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyEnum Get end) - return result; + // *** Start programmer edit section *** (КлассСМножествомТипов.NotStoredProperty Get) + return PropertyInt; + // *** End programmer edit section *** (КлассСМножествомТипов.NotStoredProperty Get) } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyEnum Set start) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyEnum Set start) - this.fPropertyEnum = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyEnum Set end) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyEnum Set end) + // *** Start programmer edit section *** (КлассСМножествомТипов.NotStoredProperty Set) + PropertyInt = value; + // *** End programmer edit section *** (КлассСМножествомТипов.NotStoredProperty Set) } } - + /// /// PropertyBool. /// @@ -205,38 +163,7 @@ public virtual bool PropertyBool // *** End programmer edit section *** (КлассСМножествомТипов.PropertyBool Set end) } } - - /// - /// PropertyInt. - /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyInt CustomAttributes) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyInt CustomAttributes) - public virtual int PropertyInt - { - get - { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyInt Get start) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyInt Get start) - int result = this.fPropertyInt; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyInt Get end) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyInt Get end) - return result; - } - set - { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyInt Set start) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyInt Set start) - this.fPropertyInt = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyInt Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyInt Set end) - } - } - /// /// PropertyDateTime. /// @@ -267,70 +194,38 @@ public virtual System.DateTime PropertyDateTime // *** End programmer edit section *** (КлассСМножествомТипов.PropertyDateTime Set end) } } - - /// - /// PropertyString. - /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyString CustomAttributes) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyString CustomAttributes) - [StrLen(255)] - public virtual string PropertyString - { - get - { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyString Get start) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyString Get start) - string result = this.fPropertyString; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyString Get end) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyString Get end) - return result; - } - set - { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyString Set start) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyString Set start) - this.fPropertyString = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyString Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyString Set end) - } - } - /// - /// PropertyFloat. + /// PropertyDecimal. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyFloat CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyDecimal CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyFloat CustomAttributes) - public virtual float PropertyFloat + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyDecimal CustomAttributes) + public virtual decimal PropertyDecimal { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyFloat Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyFloat Get start) - float result = this.fPropertyFloat; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyFloat Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Get start) + decimal result = this.fPropertyDecimal; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyFloat Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyFloat Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyFloat Set start) - this.fPropertyFloat = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyFloat Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Set start) + this.fPropertyDecimal = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyFloat Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Set end) } } - + /// /// PropertyDouble. /// @@ -361,225 +256,317 @@ public virtual double PropertyDouble // *** End programmer edit section *** (КлассСМножествомТипов.PropertyDouble Set end) } } - + /// - /// PropertyDecimal. + /// PropertyEnum. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyDecimal CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyEnum CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyDecimal CustomAttributes) - public virtual decimal PropertyDecimal + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyEnum CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Цифра PropertyEnum { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyEnum Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Get start) - decimal result = this.fPropertyDecimal; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyEnum Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Цифра result = this.fPropertyEnum; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyEnum Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyEnum Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyEnum Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Set start) - this.fPropertyDecimal = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyEnum Set start) + this.fPropertyEnum = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyEnum Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyDecimal Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyEnum Set end) } } - + /// - /// PropertySystemNullableDateTime. + /// PropertyFloat. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyFloat CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime CustomAttributes) - public virtual System.Nullable PropertySystemNullableDateTime + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyFloat CustomAttributes) + public virtual float PropertyFloat { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyFloat Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Get start) - System.Nullable result = this.fPropertySystemNullableDateTime; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyFloat Get start) + float result = this.fPropertyFloat; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyFloat Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyFloat Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyFloat Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Set start) - this.fPropertySystemNullableDateTime = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyFloat Set start) + this.fPropertyFloat = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyFloat Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyFloat Set end) } } - + /// - /// PropertySystemNullableInt. + /// PropertyGeography. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyGeography CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt CustomAttributes) - public virtual System.Nullable PropertySystemNullableInt + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyGeography CustomAttributes) + public virtual Microsoft.Spatial.Geography PropertyGeography { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyGeography Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Get start) - System.Nullable result = this.fPropertySystemNullableInt; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyGeography Get start) + Microsoft.Spatial.Geography result = this.fPropertyGeography; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyGeography Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyGeography Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyGeography Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Set start) - this.fPropertySystemNullableInt = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyGeography Set start) + this.fPropertyGeography = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyGeography Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyGeography Set end) } } - + /// - /// PropertySystemNullableGuid. + /// PropertyInt. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyInt CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid CustomAttributes) - public virtual System.Nullable PropertySystemNullableGuid + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyInt CustomAttributes) + public virtual int PropertyInt { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyInt Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Get start) - System.Nullable result = this.fPropertySystemNullableGuid; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyInt Get start) + int result = this.fPropertyInt; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyInt Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyInt Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyInt Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Set start) - this.fPropertySystemNullableGuid = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyInt Set start) + this.fPropertyInt = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyInt Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyInt Set end) } } - + /// - /// PropertySystemNullableDecimal. + /// PropertyStormnetBlob. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal CustomAttributes) - public virtual System.Nullable PropertySystemNullableDecimal + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob CustomAttributes) + public virtual ICSSoft.STORMNET.UserDataTypes.Blob PropertyStormnetBlob { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Get start) - System.Nullable result = this.fPropertySystemNullableDecimal; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Get start) + ICSSoft.STORMNET.UserDataTypes.Blob result = this.fPropertyStormnetBlob; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Set start) - this.fPropertySystemNullableDecimal = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Set start) + this.fPropertyStormnetBlob = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Set end) } } - + /// - /// PropertyStormnetNullableDateTime. + /// PropertyStormnetContact. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime CustomAttributes) - [PropertyStorage("PropStormnetNullableDateTime")] - public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime PropertyStormnetNullableDateTime + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact CustomAttributes) + public virtual ICSSoft.STORMNET.UserDataTypes.Contact PropertyStormnetContact { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Get start) - ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fPropertyStormnetNullableDateTime; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Get start) + ICSSoft.STORMNET.UserDataTypes.Contact result = this.fPropertyStormnetContact; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Set start) - this.fPropertyStormnetNullableDateTime = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Set start) + this.fPropertyStormnetContact = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Set end) } } - + /// - /// PropertyStormnetNullableInt. + /// PropertyStormnetEvent. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt CustomAttributes) - public virtual ICSSoft.STORMNET.UserDataTypes.NullableInt PropertyStormnetNullableInt + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent CustomAttributes) + public virtual ICSSoft.STORMNET.UserDataTypes.Event PropertyStormnetEvent { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Get start) - ICSSoft.STORMNET.UserDataTypes.NullableInt result = this.fPropertyStormnetNullableInt; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Get start) + ICSSoft.STORMNET.UserDataTypes.Event result = this.fPropertyStormnetEvent; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Set start) - this.fPropertyStormnetNullableInt = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Set start) + this.fPropertyStormnetEvent = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Set end) } } - + + /// + /// PropertyStormnetFile. + /// + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile CustomAttributes) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile CustomAttributes) + public virtual ICSSoft.STORMNET.FileType.File PropertyStormnetFile + { + get + { + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Get start) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Get start) + ICSSoft.STORMNET.FileType.File result = this.fPropertyStormnetFile; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Get end) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Get end) + return result; + } + set + { + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Set start) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Set start) + this.fPropertyStormnetFile = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Set end) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Set end) + } + } + + /// + /// PropertyStormnetGeoData. + /// + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData CustomAttributes) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData CustomAttributes) + public virtual ICSSoft.STORMNET.UserDataTypes.GeoData PropertyStormnetGeoData + { + get + { + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Get start) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Get start) + ICSSoft.STORMNET.UserDataTypes.GeoData result = this.fPropertyStormnetGeoData; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Get end) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Get end) + return result; + } + set + { + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Set start) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Set start) + this.fPropertyStormnetGeoData = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Set end) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Set end) + } + } + + /// + /// PropertyStormnetImage. + /// + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage CustomAttributes) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage CustomAttributes) + public virtual ICSSoft.STORMNET.UserDataTypes.Image PropertyStormnetImage + { + get + { + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Get start) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Get start) + ICSSoft.STORMNET.UserDataTypes.Image result = this.fPropertyStormnetImage; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Get end) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Get end) + return result; + } + set + { + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Set start) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Set start) + this.fPropertyStormnetImage = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Set end) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Set end) + } + } + /// /// PropertyStormnetKeyGuid. /// @@ -610,39 +597,102 @@ public virtual ICSSoft.STORMNET.KeyGen.KeyGuid PropertyStormnetKeyGuid // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetKeyGuid Set end) } } - + + /// + /// PropertyStormnetNullableDateTime. + /// + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime CustomAttributes) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime CustomAttributes) + [PropertyStorage("PropStormnetNullableDateTime")] + public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime PropertyStormnetNullableDateTime + { + get + { + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Get start) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Get start) + ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fPropertyStormnetNullableDateTime; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Get end) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Get end) + return result; + } + set + { + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Set start) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Set start) + this.fPropertyStormnetNullableDateTime = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Set end) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDateTime Set end) + } + } + /// /// PropertyStormnetNullableDecimal. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal CustomAttributes) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal CustomAttributes) + [PropertyStorage("PropStormnetNullableDecimal")] + public virtual ICSSoft.STORMNET.UserDataTypes.NullableDecimal PropertyStormnetNullableDecimal + { + get + { + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Get start) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Get start) + ICSSoft.STORMNET.UserDataTypes.NullableDecimal result = this.fPropertyStormnetNullableDecimal; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Get end) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Get end) + return result; + } + set + { + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Set start) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Set start) + this.fPropertyStormnetNullableDecimal = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Set end) + + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Set end) + } + } + + /// + /// PropertyStormnetNullableInt. + /// + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal CustomAttributes) - [PropertyStorage("PropStormnetNullableDecimal")] - public virtual ICSSoft.STORMNET.UserDataTypes.NullableDecimal PropertyStormnetNullableDecimal + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt CustomAttributes) + public virtual ICSSoft.STORMNET.UserDataTypes.NullableInt PropertyStormnetNullableInt { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Get start) - ICSSoft.STORMNET.UserDataTypes.NullableDecimal result = this.fPropertyStormnetNullableDecimal; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Get start) + ICSSoft.STORMNET.UserDataTypes.NullableInt result = this.fPropertyStormnetNullableInt; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Set start) - this.fPropertyStormnetNullableDecimal = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Set start) + this.fPropertyStormnetNullableInt = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableDecimal Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetNullableInt Set end) } } - + /// /// PropertyStormnetPartliedDate. /// @@ -673,253 +723,200 @@ public virtual ICSSoft.STORMNET.UserDataTypes.PartliedDate PropertyStormnetPartl // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetPartliedDate Set end) } } - - /// - /// PropertyStormnetContact. - /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact CustomAttributes) - public virtual ICSSoft.STORMNET.UserDataTypes.Contact PropertyStormnetContact - { - get - { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Get start) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Get start) - ICSSoft.STORMNET.UserDataTypes.Contact result = this.fPropertyStormnetContact; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Get end) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Get end) - return result; - } - set - { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Set start) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Set start) - this.fPropertyStormnetContact = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Set end) - - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetContact Set end) - } - } - /// - /// PropertyStormnetBlob. + /// PropertyStormnetWebFile. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob CustomAttributes) - public virtual ICSSoft.STORMNET.UserDataTypes.Blob PropertyStormnetBlob + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile CustomAttributes) + public virtual ICSSoft.STORMNET.UserDataTypes.WebFile PropertyStormnetWebFile { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Get start) - ICSSoft.STORMNET.UserDataTypes.Blob result = this.fPropertyStormnetBlob; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Get start) + ICSSoft.STORMNET.UserDataTypes.WebFile result = this.fPropertyStormnetWebFile; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Set start) - this.fPropertyStormnetBlob = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Set start) + this.fPropertyStormnetWebFile = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetBlob Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Set end) } } - + /// - /// PropertyStormnetEvent. + /// PropertyString. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyString CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent CustomAttributes) - public virtual ICSSoft.STORMNET.UserDataTypes.Event PropertyStormnetEvent + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyString CustomAttributes) + [StrLen(255)] + public virtual string PropertyString { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyString Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Get start) - ICSSoft.STORMNET.UserDataTypes.Event result = this.fPropertyStormnetEvent; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyString Get start) + string result = this.fPropertyString; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyString Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyString Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyString Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Set start) - this.fPropertyStormnetEvent = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyString Set start) + this.fPropertyString = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyString Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetEvent Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertyString Set end) } } - + /// - /// PropertyStormnetGeoData. + /// PropertySystemNullableDateTime. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData CustomAttributes) - public virtual ICSSoft.STORMNET.UserDataTypes.GeoData PropertyStormnetGeoData + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime CustomAttributes) + public virtual System.Nullable PropertySystemNullableDateTime { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Get start) - ICSSoft.STORMNET.UserDataTypes.GeoData result = this.fPropertyStormnetGeoData; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Get start) + System.Nullable result = this.fPropertySystemNullableDateTime; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Set start) - this.fPropertyStormnetGeoData = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Set start) + this.fPropertySystemNullableDateTime = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetGeoData Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDateTime Set end) } } - + /// - /// PropertyStormnetImage. + /// PropertySystemNullableDecimal. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage CustomAttributes) - public virtual ICSSoft.STORMNET.UserDataTypes.Image PropertyStormnetImage + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal CustomAttributes) + public virtual System.Nullable PropertySystemNullableDecimal { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Get start) - ICSSoft.STORMNET.UserDataTypes.Image result = this.fPropertyStormnetImage; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Get start) + System.Nullable result = this.fPropertySystemNullableDecimal; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Set start) - this.fPropertyStormnetImage = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Set start) + this.fPropertySystemNullableDecimal = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetImage Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableDecimal Set end) } } - + /// - /// PropertyStormnetWebFile. + /// PropertySystemNullableGuid. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile CustomAttributes) - public virtual ICSSoft.STORMNET.UserDataTypes.WebFile PropertyStormnetWebFile + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid CustomAttributes) + public virtual System.Nullable PropertySystemNullableGuid { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Get start) - ICSSoft.STORMNET.UserDataTypes.WebFile result = this.fPropertyStormnetWebFile; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Get start) + System.Nullable result = this.fPropertySystemNullableGuid; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Set start) - this.fPropertyStormnetWebFile = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Set start) + this.fPropertySystemNullableGuid = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetWebFile Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableGuid Set end) } } - + /// - /// PropertyStormnetFile. + /// PropertySystemNullableInt. /// - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile CustomAttributes) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt CustomAttributes) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile CustomAttributes) - public virtual ICSSoft.STORMNET.FileType.File PropertyStormnetFile + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt CustomAttributes) + public virtual System.Nullable PropertySystemNullableInt { get { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Get start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Get start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Get start) - ICSSoft.STORMNET.FileType.File result = this.fPropertyStormnetFile; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Get start) + System.Nullable result = this.fPropertySystemNullableInt; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Get end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Get end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Get end) return result; } set { - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Set start) + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Set start) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Set start) - this.fPropertyStormnetFile = value; - // *** Start programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Set end) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Set start) + this.fPropertySystemNullableInt = value; + // *** Start programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Set end) - // *** End programmer edit section *** (КлассСМножествомТипов.PropertyStormnetFile Set end) - } - } - - /// - /// NotStoredProperty. - /// - // *** Start programmer edit section *** (КлассСМножествомТипов.NotStoredProperty CustomAttributes) - [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.SQLDataService), "@PropertyInt")] - // *** End programmer edit section *** (КлассСМножествомТипов.NotStoredProperty CustomAttributes) - [ICSSoft.STORMNET.NotStored()] - public virtual int NotStoredProperty - { - get - { - // *** Start programmer edit section *** (КлассСМножествомТипов.NotStoredProperty Get) - return PropertyInt; - // *** End programmer edit section *** (КлассСМножествомТипов.NotStoredProperty Get) - } - set - { - // *** Start programmer edit section *** (КлассСМножествомТипов.NotStoredProperty Set) - PropertyInt = value; - // *** End programmer edit section *** (КлассСМножествомТипов.NotStoredProperty Set) + // *** End programmer edit section *** (КлассСМножествомТипов.PropertySystemNullableInt Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "КлассСМножествомТиповE" view. /// @@ -933,3 +930,4 @@ public static ICSSoft.STORMNET.View КлассСМножествомТиповE } } } + diff --git "a/Tests/Objects/\320\232\320\273\320\260\321\201\321\201\320\241\320\276\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\274\320\232\320\273\321\216\321\207\320\276\320\274.cs" "b/Tests/Objects/\320\232\320\273\320\260\321\201\321\201\320\241\320\276\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\274\320\232\320\273\321\216\321\207\320\276\320\274.cs" index 91ae343c..96773f5b 100644 --- "a/Tests/Objects/\320\232\320\273\320\260\321\201\321\201\320\241\320\276\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\274\320\232\320\273\321\216\321\207\320\276\320\274.cs" +++ "b/Tests/Objects/\320\232\320\273\320\260\321\201\321\201\320\241\320\276\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\274\320\232\320\273\321\216\321\207\320\276\320\274.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -32,9 +29,9 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class КлассСоСтроковымКлючом : ICSSoft.STORMNET.DataObject { - + private string fStoragePrimaryKey; - + // *** Start programmer edit section *** (КлассСоСтроковымКлючом CustomMembers) /// /// Gets or sets __PrimaryKey. @@ -56,7 +53,7 @@ public override object __PrimaryKey } // *** End programmer edit section *** (КлассСоСтроковымКлючом CustomMembers) - + /// /// StoragePrimaryKey. /// @@ -91,3 +88,4 @@ public virtual string StoragePrimaryKey } } } + diff --git "a/Tests/Objects/\320\232\320\275\320\270\320\263\320\260.cs" "b/Tests/Objects/\320\232\320\275\320\270\320\263\320\260.cs" index 43fb15d5..f1ca133b 100644 --- "a/Tests/Objects/\320\232\320\275\320\270\320\263\320\260.cs" +++ "b/Tests/Objects/\320\232\320\275\320\270\320\263\320\260.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -34,18 +31,18 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [MasterViewDefineAttribute("Dкнига", "Автор1", ICSSoft.STORMNET.LookupTypeEnum.Standard, "", "Имя")] public class Книга : ICSSoft.STORMNET.DataObject { - + private string fНазвание; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Автор fАвтор1; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Библиотека fБиблиотека1; - + // *** Start programmer edit section *** (Книга CustomMembers) // *** End programmer edit section *** (Книга CustomMembers) - + /// /// Название. /// @@ -77,7 +74,7 @@ public virtual string Название // *** End programmer edit section *** (Книга.Название Set end) } } - + /// /// Книга. /// @@ -111,7 +108,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Автор Авто // *** End programmer edit section *** (Книга.Автор1 Set end) } } - + /// /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.Библиотека. /// @@ -146,13 +143,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Библиотека // *** End programmer edit section *** (Книга.Библиотека1 Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "Dкнига" view. /// @@ -165,7 +162,7 @@ public static ICSSoft.STORMNET.View Dкнига } } } - + /// /// Detail array of Книга. /// @@ -174,12 +171,12 @@ public static ICSSoft.STORMNET.View Dкнига // *** End programmer edit section *** (DetailArrayDetailArrayOfКнига CustomAttributes) public class DetailArrayOfКнига : ICSSoft.STORMNET.DetailArray { - + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfКнига members) // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfКнига members) - + /// /// Construct detail array. /// @@ -193,7 +190,7 @@ public DetailArrayOfКнига(NewPlatform.Flexberry.ORM.ODataService.Tests.Би base(typeof(Книга), ((ICSSoft.STORMNET.DataObject)(fБиблиотека))) { } - + public NewPlatform.Flexberry.ORM.ODataService.Tests.Книга this[int index] { get @@ -201,10 +198,11 @@ public NewPlatform.Flexberry.ORM.ODataService.Tests.Книга this[int index] return ((NewPlatform.Flexberry.ORM.ODataService.Tests.Книга)(this.ItemByIndex(index))); } } - + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.Книга dataobject) { this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); } } } + diff --git "a/Tests/Objects/\320\232\320\276\321\202\320\265\320\275\320\276\320\272.cs" "b/Tests/Objects/\320\232\320\276\321\202\320\265\320\275\320\276\320\272.cs" index 15442547..517b5e80 100644 --- "a/Tests/Objects/\320\232\320\276\321\202\320\265\320\275\320\276\320\272.cs" +++ "b/Tests/Objects/\320\232\320\276\321\202\320\265\320\275\320\276\320\272.cs" @@ -1,140 +1,138 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - using ICSSoft.STORMNET; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// Котенок. - /// - // *** Start programmer edit section *** (Котенок CustomAttributes) - - // *** End programmer edit section *** (Котенок CustomAttributes) - [AutoAltered()] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - public class Котенок : ICSSoft.STORMNET.DataObject - { - - private string fКличкаКотенка; - - private int fГлупость; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка fКошка; - - // *** Start programmer edit section *** (Котенок CustomMembers) - - // *** End programmer edit section *** (Котенок CustomMembers) - - - /// - /// КличкаКотенка. - /// - // *** Start programmer edit section *** (Котенок.КличкаКотенка CustomAttributes) - - // *** End programmer edit section *** (Котенок.КличкаКотенка CustomAttributes) - [StrLen(255)] - public virtual string КличкаКотенка - { - get - { - // *** Start programmer edit section *** (Котенок.КличкаКотенка Get start) - - // *** End programmer edit section *** (Котенок.КличкаКотенка Get start) - string result = this.fКличкаКотенка; - // *** Start programmer edit section *** (Котенок.КличкаКотенка Get end) - - // *** End programmer edit section *** (Котенок.КличкаКотенка Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Котенок.КличкаКотенка Set start) - - // *** End programmer edit section *** (Котенок.КличкаКотенка Set start) - this.fКличкаКотенка = value; - // *** Start programmer edit section *** (Котенок.КличкаКотенка Set end) - - // *** End programmer edit section *** (Котенок.КличкаКотенка Set end) - } - } - - /// - /// Глупость. - /// - // *** Start programmer edit section *** (Котенок.Глупость CustomAttributes) - - // *** End programmer edit section *** (Котенок.Глупость CustomAttributes) - public virtual int Глупость - { - get - { - // *** Start programmer edit section *** (Котенок.Глупость Get start) - - // *** End programmer edit section *** (Котенок.Глупость Get start) - int result = this.fГлупость; - // *** Start programmer edit section *** (Котенок.Глупость Get end) - - // *** End programmer edit section *** (Котенок.Глупость Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Котенок.Глупость Set start) - - // *** End programmer edit section *** (Котенок.Глупость Set start) - this.fГлупость = value; - // *** Start programmer edit section *** (Котенок.Глупость Set end) - - // *** End programmer edit section *** (Котенок.Глупость Set end) - } - } - - /// - /// Котенок. - /// - // *** Start programmer edit section *** (Котенок.Кошка CustomAttributes) - - // *** End programmer edit section *** (Котенок.Кошка CustomAttributes) - [NotNull()] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка Кошка - { - get - { - // *** Start programmer edit section *** (Котенок.Кошка Get start) - - // *** End programmer edit section *** (Котенок.Кошка Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка result = this.fКошка; - // *** Start programmer edit section *** (Котенок.Кошка Get end) - - // *** End programmer edit section *** (Котенок.Кошка Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Котенок.Кошка Set start) - - // *** End programmer edit section *** (Котенок.Кошка Set start) - this.fКошка = value; - // *** Start programmer edit section *** (Котенок.Кошка Set end) - - // *** End programmer edit section *** (Котенок.Кошка Set end) - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// Котенок. + /// + // *** Start programmer edit section *** (Котенок CustomAttributes) + + // *** End programmer edit section *** (Котенок CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class Котенок : ICSSoft.STORMNET.DataObject + { + + private int fГлупость; + + private string fКличкаКотенка; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка fКошка; + + // *** Start programmer edit section *** (Котенок CustomMembers) + + // *** End programmer edit section *** (Котенок CustomMembers) + + + /// + /// Глупость. + /// + // *** Start programmer edit section *** (Котенок.Глупость CustomAttributes) + + // *** End programmer edit section *** (Котенок.Глупость CustomAttributes) + public virtual int Глупость + { + get + { + // *** Start programmer edit section *** (Котенок.Глупость Get start) + + // *** End programmer edit section *** (Котенок.Глупость Get start) + int result = this.fГлупость; + // *** Start programmer edit section *** (Котенок.Глупость Get end) + + // *** End programmer edit section *** (Котенок.Глупость Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Котенок.Глупость Set start) + + // *** End programmer edit section *** (Котенок.Глупость Set start) + this.fГлупость = value; + // *** Start programmer edit section *** (Котенок.Глупость Set end) + + // *** End programmer edit section *** (Котенок.Глупость Set end) + } + } + + /// + /// КличкаКотенка. + /// + // *** Start programmer edit section *** (Котенок.КличкаКотенка CustomAttributes) + + // *** End programmer edit section *** (Котенок.КличкаКотенка CustomAttributes) + [StrLen(255)] + public virtual string КличкаКотенка + { + get + { + // *** Start programmer edit section *** (Котенок.КличкаКотенка Get start) + + // *** End programmer edit section *** (Котенок.КличкаКотенка Get start) + string result = this.fКличкаКотенка; + // *** Start programmer edit section *** (Котенок.КличкаКотенка Get end) + + // *** End programmer edit section *** (Котенок.КличкаКотенка Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Котенок.КличкаКотенка Set start) + + // *** End programmer edit section *** (Котенок.КличкаКотенка Set start) + this.fКличкаКотенка = value; + // *** Start programmer edit section *** (Котенок.КличкаКотенка Set end) + + // *** End programmer edit section *** (Котенок.КличкаКотенка Set end) + } + } + + /// + /// Котенок. + /// + // *** Start programmer edit section *** (Котенок.Кошка CustomAttributes) + + // *** End programmer edit section *** (Котенок.Кошка CustomAttributes) + [NotNull()] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка Кошка + { + get + { + // *** Start programmer edit section *** (Котенок.Кошка Get start) + + // *** End programmer edit section *** (Котенок.Кошка Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка result = this.fКошка; + // *** Start programmer edit section *** (Котенок.Кошка Get end) + + // *** End programmer edit section *** (Котенок.Кошка Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Котенок.Кошка Set start) + + // *** End programmer edit section *** (Котенок.Кошка Set start) + this.fКошка = value; + // *** Start programmer edit section *** (Котенок.Кошка Set end) + + // *** End programmer edit section *** (Котенок.Кошка Set end) + } + } + } +} + diff --git "a/Tests/Objects/\320\232\320\276\321\210\320\272\320\260.cs" "b/Tests/Objects/\320\232\320\276\321\210\320\272\320\260.cs" index 7f7bbcb6..645787b0 100644 --- "a/Tests/Objects/\320\232\320\276\321\210\320\272\320\260.cs" +++ "b/Tests/Objects/\320\232\320\276\321\210\320\272\320\260.cs" @@ -1,401 +1,399 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - using ICSSoft.STORMNET.Business; - using ICSSoft.STORMNET; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// Кошка. - /// - // *** Start programmer edit section *** (Кошка CustomAttributes) - - // *** End programmer edit section *** (Кошка CustomAttributes) - [BusinessServer("NewPlatform.Flexberry.ORM.ODataService.Tests.CatsBS, NewPlatform.Flexberry.ORM.OD" + - "ataService.Tests.BusinessServers", ICSSoft.STORMNET.Business.DataServiceObjectEvents.OnAllEvents)] - [AutoAltered()] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - [View("КошкаE", new string[] { - "Кличка", - "ДатаРождения", - "Тип", - "ПородаСтрокой", - "Агрессивная", - "КоличествоУсовСлева", - "КоличествоУсовСправа", - "КошкаСтрокой", - "Порода.Название", - "Порода.ТипПороды.Название"})] - public class Кошка : ICSSoft.STORMNET.DataObject - { - - private string fКличка; - - private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fДатаРождения; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.ТипКошки fТип; - - private string fПородаСтрокой; - - private bool fАгрессивная; - - private ICSSoft.STORMNET.UserDataTypes.NullableInt fКоличествоУсовСлева; - - private ICSSoft.STORMNET.UserDataTypes.NullableInt fКоличествоУсовСправа; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Порода fПорода; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЛапа fЛапа; - - // *** Start programmer edit section *** (Кошка CustomMembers) - - // *** End programmer edit section *** (Кошка CustomMembers) - - - /// - /// Кличка. - /// - // *** Start programmer edit section *** (Кошка.Кличка CustomAttributes) - - // *** End programmer edit section *** (Кошка.Кличка CustomAttributes) - [StrLen(255)] - public virtual string Кличка - { - get - { - // *** Start programmer edit section *** (Кошка.Кличка Get start) - - // *** End programmer edit section *** (Кошка.Кличка Get start) - string result = this.fКличка; - // *** Start programmer edit section *** (Кошка.Кличка Get end) - - // *** End programmer edit section *** (Кошка.Кличка Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Кошка.Кличка Set start) - - // *** End programmer edit section *** (Кошка.Кличка Set start) - this.fКличка = value; - // *** Start programmer edit section *** (Кошка.Кличка Set end) - - // *** End programmer edit section *** (Кошка.Кличка Set end) - } - } - - /// - /// ДатаРождения. - /// - // *** Start programmer edit section *** (Кошка.ДатаРождения CustomAttributes) - - // *** End programmer edit section *** (Кошка.ДатаРождения CustomAttributes) - public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаРождения - { - get - { - // *** Start programmer edit section *** (Кошка.ДатаРождения Get start) - - // *** End programmer edit section *** (Кошка.ДатаРождения Get start) - ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fДатаРождения; - // *** Start programmer edit section *** (Кошка.ДатаРождения Get end) - - // *** End programmer edit section *** (Кошка.ДатаРождения Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Кошка.ДатаРождения Set start) - - // *** End programmer edit section *** (Кошка.ДатаРождения Set start) - this.fДатаРождения = value; - // *** Start programmer edit section *** (Кошка.ДатаРождения Set end) - - // *** End programmer edit section *** (Кошка.ДатаРождения Set end) - } - } - - /// - /// Тип. - /// - // *** Start programmer edit section *** (Кошка.Тип CustomAttributes) - - // *** End programmer edit section *** (Кошка.Тип CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.ТипКошки Тип - { - get - { - // *** Start programmer edit section *** (Кошка.Тип Get start) - - // *** End programmer edit section *** (Кошка.Тип Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.ТипКошки result = this.fТип; - // *** Start programmer edit section *** (Кошка.Тип Get end) - - // *** End programmer edit section *** (Кошка.Тип Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Кошка.Тип Set start) - - // *** End programmer edit section *** (Кошка.Тип Set start) - this.fТип = value; - // *** Start programmer edit section *** (Кошка.Тип Set end) - - // *** End programmer edit section *** (Кошка.Тип Set end) - } - } - - /// - /// ПородаСтрокой. - /// - // *** Start programmer edit section *** (Кошка.ПородаСтрокой CustomAttributes) - - // *** End programmer edit section *** (Кошка.ПородаСтрокой CustomAttributes) - [StrLen(255)] - public virtual string ПородаСтрокой - { - get - { - // *** Start programmer edit section *** (Кошка.ПородаСтрокой Get start) - - // *** End programmer edit section *** (Кошка.ПородаСтрокой Get start) - string result = this.fПородаСтрокой; - // *** Start programmer edit section *** (Кошка.ПородаСтрокой Get end) - - // *** End programmer edit section *** (Кошка.ПородаСтрокой Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Кошка.ПородаСтрокой Set start) - - // *** End programmer edit section *** (Кошка.ПородаСтрокой Set start) - this.fПородаСтрокой = value; - // *** Start programmer edit section *** (Кошка.ПородаСтрокой Set end) - - // *** End programmer edit section *** (Кошка.ПородаСтрокой Set end) - } - } - - /// - /// Агрессивная. - /// - // *** Start programmer edit section *** (Кошка.Агрессивная CustomAttributes) - - // *** End programmer edit section *** (Кошка.Агрессивная CustomAttributes) - public virtual bool Агрессивная - { - get - { - // *** Start programmer edit section *** (Кошка.Агрессивная Get start) - - // *** End programmer edit section *** (Кошка.Агрессивная Get start) - bool result = this.fАгрессивная; - // *** Start programmer edit section *** (Кошка.Агрессивная Get end) - - // *** End programmer edit section *** (Кошка.Агрессивная Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Кошка.Агрессивная Set start) - - // *** End programmer edit section *** (Кошка.Агрессивная Set start) - this.fАгрессивная = value; - // *** Start programmer edit section *** (Кошка.Агрессивная Set end) - - // *** End programmer edit section *** (Кошка.Агрессивная Set end) - } - } - - /// - /// КоличествоУсовСлева. - /// - // *** Start programmer edit section *** (Кошка.КоличествоУсовСлева CustomAttributes) - - // *** End programmer edit section *** (Кошка.КоличествоУсовСлева CustomAttributes) - [PropertyStorage("УсыСлева")] - public virtual ICSSoft.STORMNET.UserDataTypes.NullableInt КоличествоУсовСлева - { - get - { - // *** Start programmer edit section *** (Кошка.КоличествоУсовСлева Get start) - - // *** End programmer edit section *** (Кошка.КоличествоУсовСлева Get start) - ICSSoft.STORMNET.UserDataTypes.NullableInt result = this.fКоличествоУсовСлева; - // *** Start programmer edit section *** (Кошка.КоличествоУсовСлева Get end) - - // *** End programmer edit section *** (Кошка.КоличествоУсовСлева Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Кошка.КоличествоУсовСлева Set start) - - // *** End programmer edit section *** (Кошка.КоличествоУсовСлева Set start) - this.fКоличествоУсовСлева = value; - // *** Start programmer edit section *** (Кошка.КоличествоУсовСлева Set end) - - // *** End programmer edit section *** (Кошка.КоличествоУсовСлева Set end) - } - } - - /// - /// КоличествоУсовСправа. - /// - // *** Start programmer edit section *** (Кошка.КоличествоУсовСправа CustomAttributes) - - // *** End programmer edit section *** (Кошка.КоличествоУсовСправа CustomAttributes) - [PropertyStorage("УсыСправа")] - public virtual ICSSoft.STORMNET.UserDataTypes.NullableInt КоличествоУсовСправа - { - get - { - // *** Start programmer edit section *** (Кошка.КоличествоУсовСправа Get start) - - // *** End programmer edit section *** (Кошка.КоличествоУсовСправа Get start) - ICSSoft.STORMNET.UserDataTypes.NullableInt result = this.fКоличествоУсовСправа; - // *** Start programmer edit section *** (Кошка.КоличествоУсовСправа Get end) - - // *** End programmer edit section *** (Кошка.КоличествоУсовСправа Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Кошка.КоличествоУсовСправа Set start) - - // *** End programmer edit section *** (Кошка.КоличествоУсовСправа Set start) - this.fКоличествоУсовСправа = value; - // *** Start programmer edit section *** (Кошка.КоличествоУсовСправа Set end) - - // *** End programmer edit section *** (Кошка.КоличествоУсовСправа Set end) - } - } - - /// - /// КошкаСтрокой. - /// - // *** Start programmer edit section *** (Кошка.КошкаСтрокой CustomAttributes) - - // *** End programmer edit section *** (Кошка.КошкаСтрокой CustomAttributes) - [ICSSoft.STORMNET.NotStored()] - [StrLen(255)] - public virtual string КошкаСтрокой - { - get - { - // *** Start programmer edit section *** (Кошка.КошкаСтрокой Get) - return null; - // *** End programmer edit section *** (Кошка.КошкаСтрокой Get) - } - set - { - // *** Start programmer edit section *** (Кошка.КошкаСтрокой Set) - - // *** End programmer edit section *** (Кошка.КошкаСтрокой Set) - } - } - - /// - /// Кошка. - /// - // *** Start programmer edit section *** (Кошка.Порода CustomAttributes) - - // *** End programmer edit section *** (Кошка.Порода CustomAttributes) - [NotNull()] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Порода Порода - { - get - { - // *** Start programmer edit section *** (Кошка.Порода Get start) - - // *** End programmer edit section *** (Кошка.Порода Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Порода result = this.fПорода; - // *** Start programmer edit section *** (Кошка.Порода Get end) - - // *** End programmer edit section *** (Кошка.Порода Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Кошка.Порода Set start) - - // *** End programmer edit section *** (Кошка.Порода Set start) - this.fПорода = value; - // *** Start programmer edit section *** (Кошка.Порода Set end) - - // *** End programmer edit section *** (Кошка.Порода Set end) - } - } - - /// - /// Кошка. - /// - // *** Start programmer edit section *** (Кошка.Лапа CustomAttributes) - - // *** End programmer edit section *** (Кошка.Лапа CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЛапа Лапа - { - get - { - // *** Start programmer edit section *** (Кошка.Лапа Get start) - - // *** End programmer edit section *** (Кошка.Лапа Get start) - if ((this.fЛапа == null)) - { - this.fЛапа = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЛапа(this); - } - NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЛапа result = this.fЛапа; - // *** Start programmer edit section *** (Кошка.Лапа Get end) - - // *** End programmer edit section *** (Кошка.Лапа Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Кошка.Лапа Set start) - - // *** End programmer edit section *** (Кошка.Лапа Set start) - this.fЛапа = value; - // *** Start programmer edit section *** (Кошка.Лапа Set end) - - // *** End programmer edit section *** (Кошка.Лапа Set end) - } - } - - /// - /// Class views container. - /// - public class Views - { - - /// - /// "КошкаE" view. - /// - public static ICSSoft.STORMNET.View КошкаE - { - get - { - return ICSSoft.STORMNET.Information.GetView("КошкаE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка)); - } - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET.Business; + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// Кошка. + /// + // *** Start programmer edit section *** (Кошка CustomAttributes) + + // *** End programmer edit section *** (Кошка CustomAttributes) + [BusinessServer("NewPlatform.Flexberry.ORM.ODataService.Tests.CatsBS, NewPlatform.Flexberry.ORM.OD" + + "ataService.Tests.BusinessServers", ICSSoft.STORMNET.Business.DataServiceObjectEvents.OnAllEvents)] + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + [View("КошкаE", new string[] { + "Кличка", + "ДатаРождения", + "Тип", + "ПородаСтрокой", + "Агрессивная", + "КоличествоУсовСлева", + "КоличествоУсовСправа", + "КошкаСтрокой", + "Порода.Название", + "Порода.ТипПороды.Название"})] + public class Кошка : ICSSoft.STORMNET.DataObject + { + + private bool fАгрессивная; + + private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fДатаРождения; + + private string fКличка; + + private ICSSoft.STORMNET.UserDataTypes.NullableInt fКоличествоУсовСлева; + + private ICSSoft.STORMNET.UserDataTypes.NullableInt fКоличествоУсовСправа; + + private string fПородаСтрокой; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.ТипКошки fТип; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Порода fПорода; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЛапа fЛапа; + + // *** Start programmer edit section *** (Кошка CustomMembers) + + // *** End programmer edit section *** (Кошка CustomMembers) + + + /// + /// Агрессивная. + /// + // *** Start programmer edit section *** (Кошка.Агрессивная CustomAttributes) + + // *** End programmer edit section *** (Кошка.Агрессивная CustomAttributes) + public virtual bool Агрессивная + { + get + { + // *** Start programmer edit section *** (Кошка.Агрессивная Get start) + + // *** End programmer edit section *** (Кошка.Агрессивная Get start) + bool result = this.fАгрессивная; + // *** Start programmer edit section *** (Кошка.Агрессивная Get end) + + // *** End programmer edit section *** (Кошка.Агрессивная Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Кошка.Агрессивная Set start) + + // *** End programmer edit section *** (Кошка.Агрессивная Set start) + this.fАгрессивная = value; + // *** Start programmer edit section *** (Кошка.Агрессивная Set end) + + // *** End programmer edit section *** (Кошка.Агрессивная Set end) + } + } + + /// + /// ДатаРождения. + /// + // *** Start programmer edit section *** (Кошка.ДатаРождения CustomAttributes) + + // *** End programmer edit section *** (Кошка.ДатаРождения CustomAttributes) + public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаРождения + { + get + { + // *** Start programmer edit section *** (Кошка.ДатаРождения Get start) + + // *** End programmer edit section *** (Кошка.ДатаРождения Get start) + ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fДатаРождения; + // *** Start programmer edit section *** (Кошка.ДатаРождения Get end) + + // *** End programmer edit section *** (Кошка.ДатаРождения Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Кошка.ДатаРождения Set start) + + // *** End programmer edit section *** (Кошка.ДатаРождения Set start) + this.fДатаРождения = value; + // *** Start programmer edit section *** (Кошка.ДатаРождения Set end) + + // *** End programmer edit section *** (Кошка.ДатаРождения Set end) + } + } + + /// + /// Кличка. + /// + // *** Start programmer edit section *** (Кошка.Кличка CustomAttributes) + + // *** End programmer edit section *** (Кошка.Кличка CustomAttributes) + [StrLen(255)] + public virtual string Кличка + { + get + { + // *** Start programmer edit section *** (Кошка.Кличка Get start) + + // *** End programmer edit section *** (Кошка.Кличка Get start) + string result = this.fКличка; + // *** Start programmer edit section *** (Кошка.Кличка Get end) + + // *** End programmer edit section *** (Кошка.Кличка Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Кошка.Кличка Set start) + + // *** End programmer edit section *** (Кошка.Кличка Set start) + this.fКличка = value; + // *** Start programmer edit section *** (Кошка.Кличка Set end) + + // *** End programmer edit section *** (Кошка.Кличка Set end) + } + } + + /// + /// КоличествоУсовСлева. + /// + // *** Start programmer edit section *** (Кошка.КоличествоУсовСлева CustomAttributes) + + // *** End programmer edit section *** (Кошка.КоличествоУсовСлева CustomAttributes) + [PropertyStorage("УсыСлева")] + public virtual ICSSoft.STORMNET.UserDataTypes.NullableInt КоличествоУсовСлева + { + get + { + // *** Start programmer edit section *** (Кошка.КоличествоУсовСлева Get start) + + // *** End programmer edit section *** (Кошка.КоличествоУсовСлева Get start) + ICSSoft.STORMNET.UserDataTypes.NullableInt result = this.fКоличествоУсовСлева; + // *** Start programmer edit section *** (Кошка.КоличествоУсовСлева Get end) + + // *** End programmer edit section *** (Кошка.КоличествоУсовСлева Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Кошка.КоличествоУсовСлева Set start) + + // *** End programmer edit section *** (Кошка.КоличествоУсовСлева Set start) + this.fКоличествоУсовСлева = value; + // *** Start programmer edit section *** (Кошка.КоличествоУсовСлева Set end) + + // *** End programmer edit section *** (Кошка.КоличествоУсовСлева Set end) + } + } + + /// + /// КоличествоУсовСправа. + /// + // *** Start programmer edit section *** (Кошка.КоличествоУсовСправа CustomAttributes) + + // *** End programmer edit section *** (Кошка.КоличествоУсовСправа CustomAttributes) + [PropertyStorage("УсыСправа")] + public virtual ICSSoft.STORMNET.UserDataTypes.NullableInt КоличествоУсовСправа + { + get + { + // *** Start programmer edit section *** (Кошка.КоличествоУсовСправа Get start) + + // *** End programmer edit section *** (Кошка.КоличествоУсовСправа Get start) + ICSSoft.STORMNET.UserDataTypes.NullableInt result = this.fКоличествоУсовСправа; + // *** Start programmer edit section *** (Кошка.КоличествоУсовСправа Get end) + + // *** End programmer edit section *** (Кошка.КоличествоУсовСправа Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Кошка.КоличествоУсовСправа Set start) + + // *** End programmer edit section *** (Кошка.КоличествоУсовСправа Set start) + this.fКоличествоУсовСправа = value; + // *** Start programmer edit section *** (Кошка.КоличествоУсовСправа Set end) + + // *** End programmer edit section *** (Кошка.КоличествоУсовСправа Set end) + } + } + + /// + /// КошкаСтрокой. + /// + // *** Start programmer edit section *** (Кошка.КошкаСтрокой CustomAttributes) + + // *** End programmer edit section *** (Кошка.КошкаСтрокой CustomAttributes) + [ICSSoft.STORMNET.NotStored()] + [StrLen(255)] + public virtual string КошкаСтрокой + { + get + { + // *** Start programmer edit section *** (Кошка.КошкаСтрокой Get) + return null; + // *** End programmer edit section *** (Кошка.КошкаСтрокой Get) + } + set + { + // *** Start programmer edit section *** (Кошка.КошкаСтрокой Set) + + // *** End programmer edit section *** (Кошка.КошкаСтрокой Set) + } + } + + /// + /// ПородаСтрокой. + /// + // *** Start programmer edit section *** (Кошка.ПородаСтрокой CustomAttributes) + + // *** End programmer edit section *** (Кошка.ПородаСтрокой CustomAttributes) + [StrLen(255)] + public virtual string ПородаСтрокой + { + get + { + // *** Start programmer edit section *** (Кошка.ПородаСтрокой Get start) + + // *** End programmer edit section *** (Кошка.ПородаСтрокой Get start) + string result = this.fПородаСтрокой; + // *** Start programmer edit section *** (Кошка.ПородаСтрокой Get end) + + // *** End programmer edit section *** (Кошка.ПородаСтрокой Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Кошка.ПородаСтрокой Set start) + + // *** End programmer edit section *** (Кошка.ПородаСтрокой Set start) + this.fПородаСтрокой = value; + // *** Start programmer edit section *** (Кошка.ПородаСтрокой Set end) + + // *** End programmer edit section *** (Кошка.ПородаСтрокой Set end) + } + } + + /// + /// Тип. + /// + // *** Start programmer edit section *** (Кошка.Тип CustomAttributes) + + // *** End programmer edit section *** (Кошка.Тип CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.ТипКошки Тип + { + get + { + // *** Start programmer edit section *** (Кошка.Тип Get start) + + // *** End programmer edit section *** (Кошка.Тип Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.ТипКошки result = this.fТип; + // *** Start programmer edit section *** (Кошка.Тип Get end) + + // *** End programmer edit section *** (Кошка.Тип Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Кошка.Тип Set start) + + // *** End programmer edit section *** (Кошка.Тип Set start) + this.fТип = value; + // *** Start programmer edit section *** (Кошка.Тип Set end) + + // *** End programmer edit section *** (Кошка.Тип Set end) + } + } + + /// + /// Кошка. + /// + // *** Start programmer edit section *** (Кошка.Порода CustomAttributes) + + // *** End programmer edit section *** (Кошка.Порода CustomAttributes) + [NotNull()] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Порода Порода + { + get + { + // *** Start programmer edit section *** (Кошка.Порода Get start) + + // *** End programmer edit section *** (Кошка.Порода Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Порода result = this.fПорода; + // *** Start programmer edit section *** (Кошка.Порода Get end) + + // *** End programmer edit section *** (Кошка.Порода Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Кошка.Порода Set start) + + // *** End programmer edit section *** (Кошка.Порода Set start) + this.fПорода = value; + // *** Start programmer edit section *** (Кошка.Порода Set end) + + // *** End programmer edit section *** (Кошка.Порода Set end) + } + } + + /// + /// Кошка. + /// + // *** Start programmer edit section *** (Кошка.Лапа CustomAttributes) + + // *** End programmer edit section *** (Кошка.Лапа CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЛапа Лапа + { + get + { + // *** Start programmer edit section *** (Кошка.Лапа Get start) + + // *** End programmer edit section *** (Кошка.Лапа Get start) + if ((this.fЛапа == null)) + { + this.fЛапа = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЛапа(this); + } + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЛапа result = this.fЛапа; + // *** Start programmer edit section *** (Кошка.Лапа Get end) + + // *** End programmer edit section *** (Кошка.Лапа Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Кошка.Лапа Set start) + + // *** End programmer edit section *** (Кошка.Лапа Set start) + this.fЛапа = value; + // *** Start programmer edit section *** (Кошка.Лапа Set end) + + // *** End programmer edit section *** (Кошка.Лапа Set end) + } + } + + /// + /// Class views container. + /// + public class Views + { + + /// + /// "КошкаE" view. + /// + public static ICSSoft.STORMNET.View КошкаE + { + get + { + return ICSSoft.STORMNET.Information.GetView("КошкаE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка)); + } + } + } + } +} + diff --git "a/Tests/Objects/\320\233\320\260\320\277\320\260.cs" "b/Tests/Objects/\320\233\320\260\320\277\320\260.cs" index eab85af1..0a28d8e4 100644 --- "a/Tests/Objects/\320\233\320\260\320\277\320\260.cs" +++ "b/Tests/Objects/\320\233\320\260\320\277\320\260.cs" @@ -1,565 +1,563 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - using ICSSoft.STORMNET.Business; - using ICSSoft.STORMNET; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// Лапа. - /// - // *** Start programmer edit section *** (Лапа CustomAttributes) - - // *** End programmer edit section *** (Лапа CustomAttributes) - [BusinessServer("NewPlatform.Flexberry.ORM.ODataService.Tests.CatsBS, NewPlatform.Flexberry.ORM.OD" + - "ataService.Tests.BusinessServers", ICSSoft.STORMNET.Business.DataServiceObjectEvents.OnAllEvents)] - [AutoAltered()] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - [View("ЛапаE", new string[] { - "Цвет", - "Размер", - "ДатаРождения", - "БылиЛиПереломы", - "Сторона", - "Номер", - "РазмерСтрокой", - "РазмерDouble", - "РазмерFloat", - "РазмерDecimal", - "РазмерChar", - "Кошка.Кличка"})] - public class Лапа : ICSSoft.STORMNET.DataObject - { - - private string fЦвет; - - private int fРазмер; - - private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fДатаРождения; - - private bool fБылиЛиПереломы; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Сторона fСторона; - - private int fНомер; - - private double fРазмерDouble; - - private float fРазмерFloat; - - private decimal fРазмерDecimal; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.ТипЛапы fТипЛапы; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfПерелом fПерелом; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка fКошка; - - // *** Start programmer edit section *** (Лапа CustomMembers) - - // *** End programmer edit section *** (Лапа CustomMembers) - - - /// - /// Цвет. - /// - // *** Start programmer edit section *** (Лапа.Цвет CustomAttributes) - - // *** End programmer edit section *** (Лапа.Цвет CustomAttributes) - [StrLen(255)] - public virtual string Цвет - { - get - { - // *** Start programmer edit section *** (Лапа.Цвет Get start) - - // *** End programmer edit section *** (Лапа.Цвет Get start) - string result = this.fЦвет; - // *** Start programmer edit section *** (Лапа.Цвет Get end) - - // *** End programmer edit section *** (Лапа.Цвет Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Лапа.Цвет Set start) - - // *** End programmer edit section *** (Лапа.Цвет Set start) - this.fЦвет = value; - // *** Start programmer edit section *** (Лапа.Цвет Set end) - - // *** End programmer edit section *** (Лапа.Цвет Set end) - } - } - - /// - /// Размер. - /// - // *** Start programmer edit section *** (Лапа.Размер CustomAttributes) - - // *** End programmer edit section *** (Лапа.Размер CustomAttributes) - public virtual int Размер - { - get - { - // *** Start programmer edit section *** (Лапа.Размер Get start) - - // *** End programmer edit section *** (Лапа.Размер Get start) - int result = this.fРазмер; - // *** Start programmer edit section *** (Лапа.Размер Get end) - - // *** End programmer edit section *** (Лапа.Размер Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Лапа.Размер Set start) - - // *** End programmer edit section *** (Лапа.Размер Set start) - this.fРазмер = value; - // *** Start programmer edit section *** (Лапа.Размер Set end) - - // *** End programmer edit section *** (Лапа.Размер Set end) - } - } - - /// - /// ДатаРождения. - /// - // *** Start programmer edit section *** (Лапа.ДатаРождения CustomAttributes) - - // *** End programmer edit section *** (Лапа.ДатаРождения CustomAttributes) - public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаРождения - { - get - { - // *** Start programmer edit section *** (Лапа.ДатаРождения Get start) - - // *** End programmer edit section *** (Лапа.ДатаРождения Get start) - ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fДатаРождения; - // *** Start programmer edit section *** (Лапа.ДатаРождения Get end) - - // *** End programmer edit section *** (Лапа.ДатаРождения Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Лапа.ДатаРождения Set start) - - // *** End programmer edit section *** (Лапа.ДатаРождения Set start) - this.fДатаРождения = value; - // *** Start programmer edit section *** (Лапа.ДатаРождения Set end) - - // *** End programmer edit section *** (Лапа.ДатаРождения Set end) - } - } - - /// - /// БылиЛиПереломы. - /// - // *** Start programmer edit section *** (Лапа.БылиЛиПереломы CustomAttributes) - - // *** End programmer edit section *** (Лапа.БылиЛиПереломы CustomAttributes) - public virtual bool БылиЛиПереломы - { - get - { - // *** Start programmer edit section *** (Лапа.БылиЛиПереломы Get start) - - // *** End programmer edit section *** (Лапа.БылиЛиПереломы Get start) - bool result = this.fБылиЛиПереломы; - // *** Start programmer edit section *** (Лапа.БылиЛиПереломы Get end) - - // *** End programmer edit section *** (Лапа.БылиЛиПереломы Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Лапа.БылиЛиПереломы Set start) - - // *** End programmer edit section *** (Лапа.БылиЛиПереломы Set start) - this.fБылиЛиПереломы = value; - // *** Start programmer edit section *** (Лапа.БылиЛиПереломы Set end) - - // *** End programmer edit section *** (Лапа.БылиЛиПереломы Set end) - } - } - - /// - /// Сторона. - /// - // *** Start programmer edit section *** (Лапа.Сторона CustomAttributes) - - // *** End programmer edit section *** (Лапа.Сторона CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Сторона Сторона - { - get - { - // *** Start programmer edit section *** (Лапа.Сторона Get start) - - // *** End programmer edit section *** (Лапа.Сторона Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Сторона result = this.fСторона; - // *** Start programmer edit section *** (Лапа.Сторона Get end) - - // *** End programmer edit section *** (Лапа.Сторона Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Лапа.Сторона Set start) - - // *** End programmer edit section *** (Лапа.Сторона Set start) - this.fСторона = value; - // *** Start programmer edit section *** (Лапа.Сторона Set end) - - // *** End programmer edit section *** (Лапа.Сторона Set end) - } - } - - /// - /// Номер. - /// - // *** Start programmer edit section *** (Лапа.Номер CustomAttributes) - - // *** End programmer edit section *** (Лапа.Номер CustomAttributes) - public virtual int Номер - { - get - { - // *** Start programmer edit section *** (Лапа.Номер Get start) - - // *** End programmer edit section *** (Лапа.Номер Get start) - int result = this.fНомер; - // *** Start programmer edit section *** (Лапа.Номер Get end) - - // *** End programmer edit section *** (Лапа.Номер Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Лапа.Номер Set start) - - // *** End programmer edit section *** (Лапа.Номер Set start) - this.fНомер = value; - // *** Start programmer edit section *** (Лапа.Номер Set end) - - // *** End programmer edit section *** (Лапа.Номер Set end) - } - } - - /// - /// РазмерСтрокой. - /// - // *** Start programmer edit section *** (Лапа.РазмерСтрокой CustomAttributes) - - // *** End programmer edit section *** (Лапа.РазмерСтрокой CustomAttributes) - [ICSSoft.STORMNET.NotStored()] - [StrLen(255)] - public virtual string РазмерСтрокой - { - get - { - // *** Start programmer edit section *** (Лапа.РазмерСтрокой Get) - return null; - // *** End programmer edit section *** (Лапа.РазмерСтрокой Get) - } - set - { - // *** Start programmer edit section *** (Лапа.РазмерСтрокой Set) - - // *** End programmer edit section *** (Лапа.РазмерСтрокой Set) - } - } - - /// - /// РазмерDouble. - /// - // *** Start programmer edit section *** (Лапа.РазмерDouble CustomAttributes) - - // *** End programmer edit section *** (Лапа.РазмерDouble CustomAttributes) - public virtual double РазмерDouble - { - get - { - // *** Start programmer edit section *** (Лапа.РазмерDouble Get start) - - // *** End programmer edit section *** (Лапа.РазмерDouble Get start) - double result = this.fРазмерDouble; - // *** Start programmer edit section *** (Лапа.РазмерDouble Get end) - - // *** End programmer edit section *** (Лапа.РазмерDouble Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Лапа.РазмерDouble Set start) - - // *** End programmer edit section *** (Лапа.РазмерDouble Set start) - this.fРазмерDouble = value; - // *** Start programmer edit section *** (Лапа.РазмерDouble Set end) - - // *** End programmer edit section *** (Лапа.РазмерDouble Set end) - } - } - - /// - /// РазмерFloat. - /// - // *** Start programmer edit section *** (Лапа.РазмерFloat CustomAttributes) - - // *** End programmer edit section *** (Лапа.РазмерFloat CustomAttributes) - public virtual float РазмерFloat - { - get - { - // *** Start programmer edit section *** (Лапа.РазмерFloat Get start) - - // *** End programmer edit section *** (Лапа.РазмерFloat Get start) - float result = this.fРазмерFloat; - // *** Start programmer edit section *** (Лапа.РазмерFloat Get end) - - // *** End programmer edit section *** (Лапа.РазмерFloat Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Лапа.РазмерFloat Set start) - - // *** End programmer edit section *** (Лапа.РазмерFloat Set start) - this.fРазмерFloat = value; - // *** Start programmer edit section *** (Лапа.РазмерFloat Set end) - - // *** End programmer edit section *** (Лапа.РазмерFloat Set end) - } - } - - /// - /// РазмерDecimal. - /// - // *** Start programmer edit section *** (Лапа.РазмерDecimal CustomAttributes) - - // *** End programmer edit section *** (Лапа.РазмерDecimal CustomAttributes) - public virtual decimal РазмерDecimal - { - get - { - // *** Start programmer edit section *** (Лапа.РазмерDecimal Get start) - - // *** End programmer edit section *** (Лапа.РазмерDecimal Get start) - decimal result = this.fРазмерDecimal; - // *** Start programmer edit section *** (Лапа.РазмерDecimal Get end) - - // *** End programmer edit section *** (Лапа.РазмерDecimal Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Лапа.РазмерDecimal Set start) - - // *** End programmer edit section *** (Лапа.РазмерDecimal Set start) - this.fРазмерDecimal = value; - // *** Start programmer edit section *** (Лапа.РазмерDecimal Set end) - - // *** End programmer edit section *** (Лапа.РазмерDecimal Set end) - } - } - - /// - /// РазмерChar. - /// - // *** Start programmer edit section *** (Лапа.РазмерChar CustomAttributes) - - // *** End programmer edit section *** (Лапа.РазмерChar CustomAttributes) - [ICSSoft.STORMNET.NotStored()] - public virtual char РазмерChar - { - get - { - // *** Start programmer edit section *** (Лапа.РазмерChar Get) - return ' '; - // *** End programmer edit section *** (Лапа.РазмерChar Get) - } - set - { - // *** Start programmer edit section *** (Лапа.РазмерChar Set) - - // *** End programmer edit section *** (Лапа.РазмерChar Set) - } - } - - /// - /// Лапа. - /// - // *** Start programmer edit section *** (Лапа.ТипЛапы CustomAttributes) - - // *** End programmer edit section *** (Лапа.ТипЛапы CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.ТипЛапы ТипЛапы - { - get - { - // *** Start programmer edit section *** (Лапа.ТипЛапы Get start) - - // *** End programmer edit section *** (Лапа.ТипЛапы Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.ТипЛапы result = this.fТипЛапы; - // *** Start programmer edit section *** (Лапа.ТипЛапы Get end) - - // *** End programmer edit section *** (Лапа.ТипЛапы Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Лапа.ТипЛапы Set start) - - // *** End programmer edit section *** (Лапа.ТипЛапы Set start) - this.fТипЛапы = value; - // *** Start programmer edit section *** (Лапа.ТипЛапы Set end) - - // *** End programmer edit section *** (Лапа.ТипЛапы Set end) - } - } - - /// - /// Лапа. - /// - // *** Start programmer edit section *** (Лапа.Перелом CustomAttributes) - - // *** End programmer edit section *** (Лапа.Перелом CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfПерелом Перелом - { - get - { - // *** Start programmer edit section *** (Лапа.Перелом Get start) - - // *** End programmer edit section *** (Лапа.Перелом Get start) - if ((this.fПерелом == null)) - { - this.fПерелом = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfПерелом(this); - } - NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfПерелом result = this.fПерелом; - // *** Start programmer edit section *** (Лапа.Перелом Get end) - - // *** End programmer edit section *** (Лапа.Перелом Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Лапа.Перелом Set start) - - // *** End programmer edit section *** (Лапа.Перелом Set start) - this.fПерелом = value; - // *** Start programmer edit section *** (Лапа.Перелом Set end) - - // *** End programmer edit section *** (Лапа.Перелом Set end) - } - } - - /// - /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка. - /// - // *** Start programmer edit section *** (Лапа.Кошка CustomAttributes) - - // *** End programmer edit section *** (Лапа.Кошка CustomAttributes) - [Agregator()] - [NotNull()] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка Кошка - { - get - { - // *** Start programmer edit section *** (Лапа.Кошка Get start) - - // *** End programmer edit section *** (Лапа.Кошка Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка result = this.fКошка; - // *** Start programmer edit section *** (Лапа.Кошка Get end) - - // *** End programmer edit section *** (Лапа.Кошка Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Лапа.Кошка Set start) - - // *** End programmer edit section *** (Лапа.Кошка Set start) - this.fКошка = value; - // *** Start programmer edit section *** (Лапа.Кошка Set end) - - // *** End programmer edit section *** (Лапа.Кошка Set end) - } - } - - /// - /// Class views container. - /// - public class Views - { - - /// - /// "ЛапаE" view. - /// - public static ICSSoft.STORMNET.View ЛапаE - { - get - { - return ICSSoft.STORMNET.Information.GetView("ЛапаE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа)); - } - } - } - } - - /// - /// Detail array of Лапа. - /// - // *** Start programmer edit section *** (DetailArrayDetailArrayOfЛапа CustomAttributes) - - // *** End programmer edit section *** (DetailArrayDetailArrayOfЛапа CustomAttributes) - public class DetailArrayOfЛапа : ICSSoft.STORMNET.DetailArray - { - - // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЛапа members) - - // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЛапа members) - - - /// - /// Construct detail array. - /// - /// - /// Returns object with type Лапа by index. - /// - /// - /// Adds object with type Лапа. - /// - public DetailArrayOfЛапа(NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка fКошка) : - base(typeof(Лапа), ((ICSSoft.STORMNET.DataObject)(fКошка))) - { - } - - public NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа this[int index] - { - get - { - return ((NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа)(this.ItemByIndex(index))); - } - } - - public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа dataobject) - { - this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET.Business; + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// Лапа. + /// + // *** Start programmer edit section *** (Лапа CustomAttributes) + + // *** End programmer edit section *** (Лапа CustomAttributes) + [BusinessServer("NewPlatform.Flexberry.ORM.ODataService.Tests.CatsBS, NewPlatform.Flexberry.ORM.OD" + + "ataService.Tests.BusinessServers", ICSSoft.STORMNET.Business.DataServiceObjectEvents.OnAllEvents)] + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + [View("ЛапаE", new string[] { + "Цвет", + "Размер", + "ДатаРождения", + "БылиЛиПереломы", + "Сторона", + "Номер", + "РазмерСтрокой", + "РазмерDouble", + "РазмерFloat", + "РазмерDecimal", + "РазмерChar", + "Кошка.Кличка"})] + public class Лапа : ICSSoft.STORMNET.DataObject + { + + private bool fБылиЛиПереломы; + + private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fДатаРождения; + + private int fНомер; + + private int fРазмер; + + private decimal fРазмерDecimal; + + private double fРазмерDouble; + + private float fРазмерFloat; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Сторона fСторона; + + private string fЦвет; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.ТипЛапы fТипЛапы; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfПерелом fПерелом; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка fКошка; + + // *** Start programmer edit section *** (Лапа CustomMembers) + + // *** End programmer edit section *** (Лапа CustomMembers) + + + /// + /// БылиЛиПереломы. + /// + // *** Start programmer edit section *** (Лапа.БылиЛиПереломы CustomAttributes) + + // *** End programmer edit section *** (Лапа.БылиЛиПереломы CustomAttributes) + public virtual bool БылиЛиПереломы + { + get + { + // *** Start programmer edit section *** (Лапа.БылиЛиПереломы Get start) + + // *** End programmer edit section *** (Лапа.БылиЛиПереломы Get start) + bool result = this.fБылиЛиПереломы; + // *** Start programmer edit section *** (Лапа.БылиЛиПереломы Get end) + + // *** End programmer edit section *** (Лапа.БылиЛиПереломы Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Лапа.БылиЛиПереломы Set start) + + // *** End programmer edit section *** (Лапа.БылиЛиПереломы Set start) + this.fБылиЛиПереломы = value; + // *** Start programmer edit section *** (Лапа.БылиЛиПереломы Set end) + + // *** End programmer edit section *** (Лапа.БылиЛиПереломы Set end) + } + } + + /// + /// ДатаРождения. + /// + // *** Start programmer edit section *** (Лапа.ДатаРождения CustomAttributes) + + // *** End programmer edit section *** (Лапа.ДатаРождения CustomAttributes) + public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаРождения + { + get + { + // *** Start programmer edit section *** (Лапа.ДатаРождения Get start) + + // *** End programmer edit section *** (Лапа.ДатаРождения Get start) + ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fДатаРождения; + // *** Start programmer edit section *** (Лапа.ДатаРождения Get end) + + // *** End programmer edit section *** (Лапа.ДатаРождения Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Лапа.ДатаРождения Set start) + + // *** End programmer edit section *** (Лапа.ДатаРождения Set start) + this.fДатаРождения = value; + // *** Start programmer edit section *** (Лапа.ДатаРождения Set end) + + // *** End programmer edit section *** (Лапа.ДатаРождения Set end) + } + } + + /// + /// Номер. + /// + // *** Start programmer edit section *** (Лапа.Номер CustomAttributes) + + // *** End programmer edit section *** (Лапа.Номер CustomAttributes) + public virtual int Номер + { + get + { + // *** Start programmer edit section *** (Лапа.Номер Get start) + + // *** End programmer edit section *** (Лапа.Номер Get start) + int result = this.fНомер; + // *** Start programmer edit section *** (Лапа.Номер Get end) + + // *** End programmer edit section *** (Лапа.Номер Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Лапа.Номер Set start) + + // *** End programmer edit section *** (Лапа.Номер Set start) + this.fНомер = value; + // *** Start programmer edit section *** (Лапа.Номер Set end) + + // *** End programmer edit section *** (Лапа.Номер Set end) + } + } + + /// + /// Размер. + /// + // *** Start programmer edit section *** (Лапа.Размер CustomAttributes) + + // *** End programmer edit section *** (Лапа.Размер CustomAttributes) + public virtual int Размер + { + get + { + // *** Start programmer edit section *** (Лапа.Размер Get start) + + // *** End programmer edit section *** (Лапа.Размер Get start) + int result = this.fРазмер; + // *** Start programmer edit section *** (Лапа.Размер Get end) + + // *** End programmer edit section *** (Лапа.Размер Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Лапа.Размер Set start) + + // *** End programmer edit section *** (Лапа.Размер Set start) + this.fРазмер = value; + // *** Start programmer edit section *** (Лапа.Размер Set end) + + // *** End programmer edit section *** (Лапа.Размер Set end) + } + } + + /// + /// РазмерСтрокой. + /// + // *** Start programmer edit section *** (Лапа.РазмерСтрокой CustomAttributes) + + // *** End programmer edit section *** (Лапа.РазмерСтрокой CustomAttributes) + [ICSSoft.STORMNET.NotStored()] + [StrLen(255)] + public virtual string РазмерСтрокой + { + get + { + // *** Start programmer edit section *** (Лапа.РазмерСтрокой Get) + return null; + // *** End programmer edit section *** (Лапа.РазмерСтрокой Get) + } + set + { + // *** Start programmer edit section *** (Лапа.РазмерСтрокой Set) + + // *** End programmer edit section *** (Лапа.РазмерСтрокой Set) + } + } + + /// + /// РазмерChar. + /// + // *** Start programmer edit section *** (Лапа.РазмерChar CustomAttributes) + + // *** End programmer edit section *** (Лапа.РазмерChar CustomAttributes) + [ICSSoft.STORMNET.NotStored()] + public virtual char РазмерChar + { + get + { + // *** Start programmer edit section *** (Лапа.РазмерChar Get) + return ' '; + // *** End programmer edit section *** (Лапа.РазмерChar Get) + } + set + { + // *** Start programmer edit section *** (Лапа.РазмерChar Set) + + // *** End programmer edit section *** (Лапа.РазмерChar Set) + } + } + + /// + /// РазмерDecimal. + /// + // *** Start programmer edit section *** (Лапа.РазмерDecimal CustomAttributes) + + // *** End programmer edit section *** (Лапа.РазмерDecimal CustomAttributes) + public virtual decimal РазмерDecimal + { + get + { + // *** Start programmer edit section *** (Лапа.РазмерDecimal Get start) + + // *** End programmer edit section *** (Лапа.РазмерDecimal Get start) + decimal result = this.fРазмерDecimal; + // *** Start programmer edit section *** (Лапа.РазмерDecimal Get end) + + // *** End programmer edit section *** (Лапа.РазмерDecimal Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Лапа.РазмерDecimal Set start) + + // *** End programmer edit section *** (Лапа.РазмерDecimal Set start) + this.fРазмерDecimal = value; + // *** Start programmer edit section *** (Лапа.РазмерDecimal Set end) + + // *** End programmer edit section *** (Лапа.РазмерDecimal Set end) + } + } + + /// + /// РазмерDouble. + /// + // *** Start programmer edit section *** (Лапа.РазмерDouble CustomAttributes) + + // *** End programmer edit section *** (Лапа.РазмерDouble CustomAttributes) + public virtual double РазмерDouble + { + get + { + // *** Start programmer edit section *** (Лапа.РазмерDouble Get start) + + // *** End programmer edit section *** (Лапа.РазмерDouble Get start) + double result = this.fРазмерDouble; + // *** Start programmer edit section *** (Лапа.РазмерDouble Get end) + + // *** End programmer edit section *** (Лапа.РазмерDouble Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Лапа.РазмерDouble Set start) + + // *** End programmer edit section *** (Лапа.РазмерDouble Set start) + this.fРазмерDouble = value; + // *** Start programmer edit section *** (Лапа.РазмерDouble Set end) + + // *** End programmer edit section *** (Лапа.РазмерDouble Set end) + } + } + + /// + /// РазмерFloat. + /// + // *** Start programmer edit section *** (Лапа.РазмерFloat CustomAttributes) + + // *** End programmer edit section *** (Лапа.РазмерFloat CustomAttributes) + public virtual float РазмерFloat + { + get + { + // *** Start programmer edit section *** (Лапа.РазмерFloat Get start) + + // *** End programmer edit section *** (Лапа.РазмерFloat Get start) + float result = this.fРазмерFloat; + // *** Start programmer edit section *** (Лапа.РазмерFloat Get end) + + // *** End programmer edit section *** (Лапа.РазмерFloat Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Лапа.РазмерFloat Set start) + + // *** End programmer edit section *** (Лапа.РазмерFloat Set start) + this.fРазмерFloat = value; + // *** Start programmer edit section *** (Лапа.РазмерFloat Set end) + + // *** End programmer edit section *** (Лапа.РазмерFloat Set end) + } + } + + /// + /// Сторона. + /// + // *** Start programmer edit section *** (Лапа.Сторона CustomAttributes) + + // *** End programmer edit section *** (Лапа.Сторона CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Сторона Сторона + { + get + { + // *** Start programmer edit section *** (Лапа.Сторона Get start) + + // *** End programmer edit section *** (Лапа.Сторона Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Сторона result = this.fСторона; + // *** Start programmer edit section *** (Лапа.Сторона Get end) + + // *** End programmer edit section *** (Лапа.Сторона Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Лапа.Сторона Set start) + + // *** End programmer edit section *** (Лапа.Сторона Set start) + this.fСторона = value; + // *** Start programmer edit section *** (Лапа.Сторона Set end) + + // *** End programmer edit section *** (Лапа.Сторона Set end) + } + } + + /// + /// Цвет. + /// + // *** Start programmer edit section *** (Лапа.Цвет CustomAttributes) + + // *** End programmer edit section *** (Лапа.Цвет CustomAttributes) + [StrLen(255)] + public virtual string Цвет + { + get + { + // *** Start programmer edit section *** (Лапа.Цвет Get start) + + // *** End programmer edit section *** (Лапа.Цвет Get start) + string result = this.fЦвет; + // *** Start programmer edit section *** (Лапа.Цвет Get end) + + // *** End programmer edit section *** (Лапа.Цвет Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Лапа.Цвет Set start) + + // *** End programmer edit section *** (Лапа.Цвет Set start) + this.fЦвет = value; + // *** Start programmer edit section *** (Лапа.Цвет Set end) + + // *** End programmer edit section *** (Лапа.Цвет Set end) + } + } + + /// + /// Лапа. + /// + // *** Start programmer edit section *** (Лапа.ТипЛапы CustomAttributes) + + // *** End programmer edit section *** (Лапа.ТипЛапы CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.ТипЛапы ТипЛапы + { + get + { + // *** Start programmer edit section *** (Лапа.ТипЛапы Get start) + + // *** End programmer edit section *** (Лапа.ТипЛапы Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.ТипЛапы result = this.fТипЛапы; + // *** Start programmer edit section *** (Лапа.ТипЛапы Get end) + + // *** End programmer edit section *** (Лапа.ТипЛапы Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Лапа.ТипЛапы Set start) + + // *** End programmer edit section *** (Лапа.ТипЛапы Set start) + this.fТипЛапы = value; + // *** Start programmer edit section *** (Лапа.ТипЛапы Set end) + + // *** End programmer edit section *** (Лапа.ТипЛапы Set end) + } + } + + /// + /// Лапа. + /// + // *** Start programmer edit section *** (Лапа.Перелом CustomAttributes) + + // *** End programmer edit section *** (Лапа.Перелом CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfПерелом Перелом + { + get + { + // *** Start programmer edit section *** (Лапа.Перелом Get start) + + // *** End programmer edit section *** (Лапа.Перелом Get start) + if ((this.fПерелом == null)) + { + this.fПерелом = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfПерелом(this); + } + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfПерелом result = this.fПерелом; + // *** Start programmer edit section *** (Лапа.Перелом Get end) + + // *** End programmer edit section *** (Лапа.Перелом Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Лапа.Перелом Set start) + + // *** End programmer edit section *** (Лапа.Перелом Set start) + this.fПерелом = value; + // *** Start programmer edit section *** (Лапа.Перелом Set end) + + // *** End programmer edit section *** (Лапа.Перелом Set end) + } + } + + /// + /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка. + /// + // *** Start programmer edit section *** (Лапа.Кошка CustomAttributes) + + // *** End programmer edit section *** (Лапа.Кошка CustomAttributes) + [Agregator()] + [NotNull()] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка Кошка + { + get + { + // *** Start programmer edit section *** (Лапа.Кошка Get start) + + // *** End programmer edit section *** (Лапа.Кошка Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка result = this.fКошка; + // *** Start programmer edit section *** (Лапа.Кошка Get end) + + // *** End programmer edit section *** (Лапа.Кошка Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Лапа.Кошка Set start) + + // *** End programmer edit section *** (Лапа.Кошка Set start) + this.fКошка = value; + // *** Start programmer edit section *** (Лапа.Кошка Set end) + + // *** End programmer edit section *** (Лапа.Кошка Set end) + } + } + + /// + /// Class views container. + /// + public class Views + { + + /// + /// "ЛапаE" view. + /// + public static ICSSoft.STORMNET.View ЛапаE + { + get + { + return ICSSoft.STORMNET.Information.GetView("ЛапаE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа)); + } + } + } + } + + /// + /// Detail array of Лапа. + /// + // *** Start programmer edit section *** (DetailArrayDetailArrayOfЛапа CustomAttributes) + + // *** End programmer edit section *** (DetailArrayDetailArrayOfЛапа CustomAttributes) + public class DetailArrayOfЛапа : ICSSoft.STORMNET.DetailArray + { + + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЛапа members) + + // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfЛапа members) + + + /// + /// Construct detail array. + /// + /// + /// Returns object with type Лапа by index. + /// + /// + /// Adds object with type Лапа. + /// + public DetailArrayOfЛапа(NewPlatform.Flexberry.ORM.ODataService.Tests.Кошка fКошка) : + base(typeof(Лапа), ((ICSSoft.STORMNET.DataObject)(fКошка))) + { + } + + public NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа this[int index] + { + get + { + return ((NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа)(this.ItemByIndex(index))); + } + } + + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа dataobject) + { + this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); + } + } +} + diff --git "a/Tests/Objects/\320\233\320\265\321\201.cs" "b/Tests/Objects/\320\233\320\265\321\201.cs" index 58845ab6..1eaea335 100644 --- "a/Tests/Objects/\320\233\320\265\321\201.cs" +++ "b/Tests/Objects/\320\233\320\265\321\201.cs" @@ -1,21 +1,18 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET.Business; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -46,148 +43,148 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "Страна.Название as \'Название\'"})] public class Лес : ICSSoft.STORMNET.DataObject { - + + private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fДатаПоследнегоОсмотра; + + private bool fЗаповедник; + private string fНазвание; - + private int fПлощадь; - - private bool fЗаповедник; - - private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fДатаПоследнегоОсмотра; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Страна fСтрана; - + // *** Start programmer edit section *** (Лес CustomMembers) // *** End programmer edit section *** (Лес CustomMembers) - + /// - /// Название. + /// ДатаПоследнегоОсмотра. /// - // *** Start programmer edit section *** (Лес.Название CustomAttributes) + // *** Start programmer edit section *** (Лес.ДатаПоследнегоОсмотра CustomAttributes) - // *** End programmer edit section *** (Лес.Название CustomAttributes) - [StrLen(255)] - public virtual string Название + // *** End programmer edit section *** (Лес.ДатаПоследнегоОсмотра CustomAttributes) + [PropertyStorage("ДатаПослОсмотра")] + public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаПоследнегоОсмотра { get { - // *** Start programmer edit section *** (Лес.Название Get start) + // *** Start programmer edit section *** (Лес.ДатаПоследнегоОсмотра Get start) - // *** End programmer edit section *** (Лес.Название Get start) - string result = this.fНазвание; - // *** Start programmer edit section *** (Лес.Название Get end) + // *** End programmer edit section *** (Лес.ДатаПоследнегоОсмотра Get start) + ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fДатаПоследнегоОсмотра; + // *** Start programmer edit section *** (Лес.ДатаПоследнегоОсмотра Get end) - // *** End programmer edit section *** (Лес.Название Get end) + // *** End programmer edit section *** (Лес.ДатаПоследнегоОсмотра Get end) return result; } set { - // *** Start programmer edit section *** (Лес.Название Set start) + // *** Start programmer edit section *** (Лес.ДатаПоследнегоОсмотра Set start) - // *** End programmer edit section *** (Лес.Название Set start) - this.fНазвание = value; - // *** Start programmer edit section *** (Лес.Название Set end) + // *** End programmer edit section *** (Лес.ДатаПоследнегоОсмотра Set start) + this.fДатаПоследнегоОсмотра = value; + // *** Start programmer edit section *** (Лес.ДатаПоследнегоОсмотра Set end) - // *** End programmer edit section *** (Лес.Название Set end) + // *** End programmer edit section *** (Лес.ДатаПоследнегоОсмотра Set end) } } - + /// - /// Площадь. + /// Заповедник. /// - // *** Start programmer edit section *** (Лес.Площадь CustomAttributes) + // *** Start programmer edit section *** (Лес.Заповедник CustomAttributes) - // *** End programmer edit section *** (Лес.Площадь CustomAttributes) - public virtual int Площадь + // *** End programmer edit section *** (Лес.Заповедник CustomAttributes) + public virtual bool Заповедник { get { - // *** Start programmer edit section *** (Лес.Площадь Get start) + // *** Start programmer edit section *** (Лес.Заповедник Get start) - // *** End programmer edit section *** (Лес.Площадь Get start) - int result = this.fПлощадь; - // *** Start programmer edit section *** (Лес.Площадь Get end) + // *** End programmer edit section *** (Лес.Заповедник Get start) + bool result = this.fЗаповедник; + // *** Start programmer edit section *** (Лес.Заповедник Get end) - // *** End programmer edit section *** (Лес.Площадь Get end) + // *** End programmer edit section *** (Лес.Заповедник Get end) return result; } set { - // *** Start programmer edit section *** (Лес.Площадь Set start) + // *** Start programmer edit section *** (Лес.Заповедник Set start) - // *** End programmer edit section *** (Лес.Площадь Set start) - this.fПлощадь = value; - // *** Start programmer edit section *** (Лес.Площадь Set end) + // *** End programmer edit section *** (Лес.Заповедник Set start) + this.fЗаповедник = value; + // *** Start programmer edit section *** (Лес.Заповедник Set end) - // *** End programmer edit section *** (Лес.Площадь Set end) + // *** End programmer edit section *** (Лес.Заповедник Set end) } } - + /// - /// Заповедник. + /// Название. /// - // *** Start programmer edit section *** (Лес.Заповедник CustomAttributes) + // *** Start programmer edit section *** (Лес.Название CustomAttributes) - // *** End programmer edit section *** (Лес.Заповедник CustomAttributes) - public virtual bool Заповедник + // *** End programmer edit section *** (Лес.Название CustomAttributes) + [StrLen(255)] + public virtual string Название { get { - // *** Start programmer edit section *** (Лес.Заповедник Get start) + // *** Start programmer edit section *** (Лес.Название Get start) - // *** End programmer edit section *** (Лес.Заповедник Get start) - bool result = this.fЗаповедник; - // *** Start programmer edit section *** (Лес.Заповедник Get end) + // *** End programmer edit section *** (Лес.Название Get start) + string result = this.fНазвание; + // *** Start programmer edit section *** (Лес.Название Get end) - // *** End programmer edit section *** (Лес.Заповедник Get end) + // *** End programmer edit section *** (Лес.Название Get end) return result; } set { - // *** Start programmer edit section *** (Лес.Заповедник Set start) + // *** Start programmer edit section *** (Лес.Название Set start) - // *** End programmer edit section *** (Лес.Заповедник Set start) - this.fЗаповедник = value; - // *** Start programmer edit section *** (Лес.Заповедник Set end) + // *** End programmer edit section *** (Лес.Название Set start) + this.fНазвание = value; + // *** Start programmer edit section *** (Лес.Название Set end) - // *** End programmer edit section *** (Лес.Заповедник Set end) + // *** End programmer edit section *** (Лес.Название Set end) } } - + /// - /// ДатаПоследнегоОсмотра. + /// Площадь. /// - // *** Start programmer edit section *** (Лес.ДатаПоследнегоОсмотра CustomAttributes) + // *** Start programmer edit section *** (Лес.Площадь CustomAttributes) - // *** End programmer edit section *** (Лес.ДатаПоследнегоОсмотра CustomAttributes) - [PropertyStorage("ДатаПослОсмотра")] - public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаПоследнегоОсмотра + // *** End programmer edit section *** (Лес.Площадь CustomAttributes) + public virtual int Площадь { get { - // *** Start programmer edit section *** (Лес.ДатаПоследнегоОсмотра Get start) + // *** Start programmer edit section *** (Лес.Площадь Get start) - // *** End programmer edit section *** (Лес.ДатаПоследнегоОсмотра Get start) - ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fДатаПоследнегоОсмотра; - // *** Start programmer edit section *** (Лес.ДатаПоследнегоОсмотра Get end) + // *** End programmer edit section *** (Лес.Площадь Get start) + int result = this.fПлощадь; + // *** Start programmer edit section *** (Лес.Площадь Get end) - // *** End programmer edit section *** (Лес.ДатаПоследнегоОсмотра Get end) + // *** End programmer edit section *** (Лес.Площадь Get end) return result; } set { - // *** Start programmer edit section *** (Лес.ДатаПоследнегоОсмотра Set start) + // *** Start programmer edit section *** (Лес.Площадь Set start) - // *** End programmer edit section *** (Лес.ДатаПоследнегоОсмотра Set start) - this.fДатаПоследнегоОсмотра = value; - // *** Start programmer edit section *** (Лес.ДатаПоследнегоОсмотра Set end) + // *** End programmer edit section *** (Лес.Площадь Set start) + this.fПлощадь = value; + // *** Start programmer edit section *** (Лес.Площадь Set end) - // *** End programmer edit section *** (Лес.ДатаПоследнегоОсмотра Set end) + // *** End programmer edit section *** (Лес.Площадь Set end) } } - + /// /// Лес. /// @@ -220,13 +217,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Страна Стр // *** End programmer edit section *** (Лес.Страна Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "ЛесE" view. /// @@ -237,7 +234,7 @@ public static ICSSoft.STORMNET.View ЛесE return ICSSoft.STORMNET.Information.GetView("ЛесE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Лес)); } } - + /// /// "ЛесL" view. /// @@ -251,3 +248,4 @@ public static ICSSoft.STORMNET.View ЛесL } } } + diff --git "a/Tests/Objects/\320\234\320\260\321\201\321\202\320\265\321\200.cs" "b/Tests/Objects/\320\234\320\260\321\201\321\202\320\265\321\200.cs" index 7f254292..69010d7b 100644 --- "a/Tests/Objects/\320\234\320\260\321\201\321\202\320\265\321\200.cs" +++ "b/Tests/Objects/\320\234\320\260\321\201\321\202\320\265\321\200.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -30,16 +27,16 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class Мастер : ICSSoft.STORMNET.DataObject { - + private string fprop; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Мастер2 fМастер2; - + // *** Start programmer edit section *** (Мастер CustomMembers) // *** End programmer edit section *** (Мастер CustomMembers) - + /// /// prop. /// @@ -71,7 +68,7 @@ public virtual string prop // *** End programmer edit section *** (Мастер.prop Set end) } } - + /// /// Мастер. /// @@ -106,3 +103,4 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Мастер2 Мас } } } + diff --git "a/Tests/Objects/\320\234\320\260\321\201\321\202\320\265\321\2002.cs" "b/Tests/Objects/\320\234\320\260\321\201\321\202\320\265\321\2002.cs" index 3a282a17..59ca0237 100644 --- "a/Tests/Objects/\320\234\320\260\321\201\321\202\320\265\321\2002.cs" +++ "b/Tests/Objects/\320\234\320\260\321\201\321\202\320\265\321\2002.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -30,14 +27,14 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class Мастер2 : ICSSoft.STORMNET.DataObject { - + private int fсвойство2; - + // *** Start programmer edit section *** (Мастер2 CustomMembers) // *** End programmer edit section *** (Мастер2 CustomMembers) - + /// /// свойство2. /// @@ -70,3 +67,4 @@ public virtual int свойство2 } } } + diff --git "a/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" "b/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" index 2f2b5414..870b2994 100644 --- "a/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" +++ "b/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" @@ -1,23 +1,20 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET.Business; using ICSSoft.STORMNET; using ICSSoft.STORMNET.Business.Audit; using ICSSoft.STORMNET.Business.Audit.Objects; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -92,168 +89,154 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests ""})] public class Медведь : ICSSoft.STORMNET.DataObject, IDataObjectWithAuditFields { - + + private int fВес; + + private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fДатаРождения; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.tПол fПол; + private string fПолеБС; - + private int fПорядковыйНомер; - - private int fВес; - + private string fЦветГлаз; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.tПол fПол; - - private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fДатаРождения; - + private System.Nullable fCreateTime; - + private string fCreator; - - private System.Nullable fEditTime; - + private string fEditor; - + + private System.Nullable fEditTime; + private NewPlatform.Flexberry.ORM.ODataService.Tests.Лес fЛесОбитания; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fМама; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fПапа; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Страна fСтранаРождения; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога fБерлога; - + // *** Start programmer edit section *** (Медведь CustomMembers) // *** End programmer edit section *** (Медведь CustomMembers) - + /// - /// ПолеБС. + /// Вес. /// - // *** Start programmer edit section *** (Медведь.ПолеБС CustomAttributes) + // *** Start programmer edit section *** (Медведь.Вес CustomAttributes) - // *** End programmer edit section *** (Медведь.ПолеБС CustomAttributes) - [StrLen(255)] - public virtual string ПолеБС + // *** End programmer edit section *** (Медведь.Вес CustomAttributes) + public virtual int Вес { get { - // *** Start programmer edit section *** (Медведь.ПолеБС Get start) + // *** Start programmer edit section *** (Медведь.Вес Get start) - // *** End programmer edit section *** (Медведь.ПолеБС Get start) - string result = this.fПолеБС; - // *** Start programmer edit section *** (Медведь.ПолеБС Get end) + // *** End programmer edit section *** (Медведь.Вес Get start) + int result = this.fВес; + // *** Start programmer edit section *** (Медведь.Вес Get end) - // *** End programmer edit section *** (Медведь.ПолеБС Get end) + // *** End programmer edit section *** (Медведь.Вес Get end) return result; } set { - // *** Start programmer edit section *** (Медведь.ПолеБС Set start) + // *** Start programmer edit section *** (Медведь.Вес Set start) - // *** End programmer edit section *** (Медведь.ПолеБС Set start) - this.fПолеБС = value; - // *** Start programmer edit section *** (Медведь.ПолеБС Set end) + // *** End programmer edit section *** (Медведь.Вес Set start) + this.fВес = value; + // *** Start programmer edit section *** (Медведь.Вес Set end) - // *** End programmer edit section *** (Медведь.ПолеБС Set end) + // *** End programmer edit section *** (Медведь.Вес Set end) } } - + /// - /// ПорядковыйНомер. + /// ВычислимоеПоле. /// - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер CustomAttributes) + // *** Start programmer edit section *** (Медведь.ВычислимоеПоле CustomAttributes) - // *** End programmer edit section *** (Медведь.ПорядковыйНомер CustomAttributes) - public virtual int ПорядковыйНомер + // *** End programmer edit section *** (Медведь.ВычислимоеПоле CustomAttributes) + [ICSSoft.STORMNET.NotStored()] + [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "@ПорядковыйНомер@ + @Вес@")] + public virtual int ВычислимоеПоле { get { - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Get start) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер Get start) - int result = this.fПорядковыйНомер; - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Get end) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер Get end) - return result; + // *** Start programmer edit section *** (Медведь.ВычислимоеПоле Get) + return 0; + // *** End programmer edit section *** (Медведь.ВычислимоеПоле Get) } set { - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Set start) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер Set start) - this.fПорядковыйНомер = value; - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Set end) + // *** Start programmer edit section *** (Медведь.ВычислимоеПоле Set) - // *** End programmer edit section *** (Медведь.ПорядковыйНомер Set end) + // *** End programmer edit section *** (Медведь.ВычислимоеПоле Set) } } - + /// - /// Вес. + /// ДатаРождения. /// - // *** Start programmer edit section *** (Медведь.Вес CustomAttributes) + // *** Start programmer edit section *** (Медведь.ДатаРождения CustomAttributes) - // *** End programmer edit section *** (Медведь.Вес CustomAttributes) - public virtual int Вес + // *** End programmer edit section *** (Медведь.ДатаРождения CustomAttributes) + public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаРождения { get { - // *** Start programmer edit section *** (Медведь.Вес Get start) + // *** Start programmer edit section *** (Медведь.ДатаРождения Get start) - // *** End programmer edit section *** (Медведь.Вес Get start) - int result = this.fВес; - // *** Start programmer edit section *** (Медведь.Вес Get end) + // *** End programmer edit section *** (Медведь.ДатаРождения Get start) + ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fДатаРождения; + // *** Start programmer edit section *** (Медведь.ДатаРождения Get end) - // *** End programmer edit section *** (Медведь.Вес Get end) + // *** End programmer edit section *** (Медведь.ДатаРождения Get end) return result; } set { - // *** Start programmer edit section *** (Медведь.Вес Set start) + // *** Start programmer edit section *** (Медведь.ДатаРождения Set start) - // *** End programmer edit section *** (Медведь.Вес Set start) - this.fВес = value; - // *** Start programmer edit section *** (Медведь.Вес Set end) + // *** End programmer edit section *** (Медведь.ДатаРождения Set start) + this.fДатаРождения = value; + // *** Start programmer edit section *** (Медведь.ДатаРождения Set end) - // *** End programmer edit section *** (Медведь.Вес Set end) + // *** End programmer edit section *** (Медведь.ДатаРождения Set end) } } - + /// - /// ЦветГлаз. + /// МедведьСтрокой. /// - // *** Start programmer edit section *** (Медведь.ЦветГлаз CustomAttributes) + // *** Start programmer edit section *** (Медведь.МедведьСтрокой CustomAttributes) - // *** End programmer edit section *** (Медведь.ЦветГлаз CustomAttributes) + // *** End programmer edit section *** (Медведь.МедведьСтрокой CustomAttributes) + [ICSSoft.STORMNET.NotStored()] [StrLen(255)] - public virtual string ЦветГлаз + [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "\'ПорядковыйНомер:\' + @ПорядковыйНомер@ + \", Цвет глаз мамы:\" + isnull(@Мама.ЦветГ" + + "лаз@,\'\')")] + public virtual string МедведьСтрокой { get { - // *** Start programmer edit section *** (Медведь.ЦветГлаз Get start) - - // *** End programmer edit section *** (Медведь.ЦветГлаз Get start) - string result = this.fЦветГлаз; - // *** Start programmer edit section *** (Медведь.ЦветГлаз Get end) - - // *** End programmer edit section *** (Медведь.ЦветГлаз Get end) - return result; + // *** Start programmer edit section *** (Медведь.МедведьСтрокой Get) + return null; + // *** End programmer edit section *** (Медведь.МедведьСтрокой Get) } set { - // *** Start programmer edit section *** (Медведь.ЦветГлаз Set start) - - // *** End programmer edit section *** (Медведь.ЦветГлаз Set start) - this.fЦветГлаз = value; - // *** Start programmer edit section *** (Медведь.ЦветГлаз Set end) + // *** Start programmer edit section *** (Медведь.МедведьСтрокой Set) - // *** End programmer edit section *** (Медведь.ЦветГлаз Set end) + // *** End programmer edit section *** (Медведь.МедведьСтрокой Set) } } - + /// /// Пол. /// @@ -284,90 +267,102 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.tПол Пол // *** End programmer edit section *** (Медведь.Пол Set end) } } - + /// - /// ДатаРождения. + /// ПолеБС. /// - // *** Start programmer edit section *** (Медведь.ДатаРождения CustomAttributes) + // *** Start programmer edit section *** (Медведь.ПолеБС CustomAttributes) - // *** End programmer edit section *** (Медведь.ДатаРождения CustomAttributes) - public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаРождения + // *** End programmer edit section *** (Медведь.ПолеБС CustomAttributes) + [StrLen(255)] + public virtual string ПолеБС { get { - // *** Start programmer edit section *** (Медведь.ДатаРождения Get start) + // *** Start programmer edit section *** (Медведь.ПолеБС Get start) - // *** End programmer edit section *** (Медведь.ДатаРождения Get start) - ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fДатаРождения; - // *** Start programmer edit section *** (Медведь.ДатаРождения Get end) + // *** End programmer edit section *** (Медведь.ПолеБС Get start) + string result = this.fПолеБС; + // *** Start programmer edit section *** (Медведь.ПолеБС Get end) - // *** End programmer edit section *** (Медведь.ДатаРождения Get end) + // *** End programmer edit section *** (Медведь.ПолеБС Get end) return result; } set { - // *** Start programmer edit section *** (Медведь.ДатаРождения Set start) + // *** Start programmer edit section *** (Медведь.ПолеБС Set start) - // *** End programmer edit section *** (Медведь.ДатаРождения Set start) - this.fДатаРождения = value; - // *** Start programmer edit section *** (Медведь.ДатаРождения Set end) + // *** End programmer edit section *** (Медведь.ПолеБС Set start) + this.fПолеБС = value; + // *** Start programmer edit section *** (Медведь.ПолеБС Set end) - // *** End programmer edit section *** (Медведь.ДатаРождения Set end) + // *** End programmer edit section *** (Медведь.ПолеБС Set end) } } - + /// - /// МедведьСтрокой. + /// ПорядковыйНомер. /// - // *** Start programmer edit section *** (Медведь.МедведьСтрокой CustomAttributes) + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер CustomAttributes) - // *** End programmer edit section *** (Медведь.МедведьСтрокой CustomAttributes) - [ICSSoft.STORMNET.NotStored()] - [StrLen(255)] - [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "\'ПорядковыйНомер:\' + @ПорядковыйНомер@ + \", Цвет глаз мамы:\" + isnull(@Мама.ЦветГ" + - "лаз@,\'\')")] - [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.PostgresDataService), "\'ПорядковыйНомер:\' || @ПорядковыйНомер@ || \", Цвет глаз мамы:\" || coalesce(@Мама.ЦветГ" + - "лаз@,\'\')")] - public virtual string МедведьСтрокой + // *** End programmer edit section *** (Медведь.ПорядковыйНомер CustomAttributes) + public virtual int ПорядковыйНомер { get { - // *** Start programmer edit section *** (Медведь.МедведьСтрокой Get) - return null; - // *** End programmer edit section *** (Медведь.МедведьСтрокой Get) + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Get start) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер Get start) + int result = this.fПорядковыйНомер; + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Get end) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер Get end) + return result; } set { - // *** Start programmer edit section *** (Медведь.МедведьСтрокой Set) + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Set start) - // *** End programmer edit section *** (Медведь.МедведьСтрокой Set) + // *** End programmer edit section *** (Медведь.ПорядковыйНомер Set start) + this.fПорядковыйНомер = value; + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Set end) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер Set end) } } - + /// - /// ВычислимоеПоле. + /// ЦветГлаз. /// - // *** Start programmer edit section *** (Медведь.ВычислимоеПоле CustomAttributes) + // *** Start programmer edit section *** (Медведь.ЦветГлаз CustomAttributes) - // *** End programmer edit section *** (Медведь.ВычислимоеПоле CustomAttributes) - [ICSSoft.STORMNET.NotStored()] - [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "@ПорядковыйНомер@ + @Вес@")] - public virtual int ВычислимоеПоле + // *** End programmer edit section *** (Медведь.ЦветГлаз CustomAttributes) + [StrLen(255)] + public virtual string ЦветГлаз { get { - // *** Start programmer edit section *** (Медведь.ВычислимоеПоле Get) - return 0; - // *** End programmer edit section *** (Медведь.ВычислимоеПоле Get) + // *** Start programmer edit section *** (Медведь.ЦветГлаз Get start) + + // *** End programmer edit section *** (Медведь.ЦветГлаз Get start) + string result = this.fЦветГлаз; + // *** Start programmer edit section *** (Медведь.ЦветГлаз Get end) + + // *** End programmer edit section *** (Медведь.ЦветГлаз Get end) + return result; } set { - // *** Start programmer edit section *** (Медведь.ВычислимоеПоле Set) + // *** Start programmer edit section *** (Медведь.ЦветГлаз Set start) - // *** End programmer edit section *** (Медведь.ВычислимоеПоле Set) + // *** End programmer edit section *** (Медведь.ЦветГлаз Set start) + this.fЦветГлаз = value; + // *** Start programmer edit section *** (Медведь.ЦветГлаз Set end) + + // *** End programmer edit section *** (Медведь.ЦветГлаз Set end) } } - + /// /// Время создания объекта. /// @@ -398,7 +393,7 @@ public virtual System.Nullable CreateTime // *** End programmer edit section *** (Медведь.CreateTime Set end) } } - + /// /// Создатель объекта. /// @@ -430,38 +425,7 @@ public virtual string Creator // *** End programmer edit section *** (Медведь.Creator Set end) } } - - /// - /// Время последнего редактирования объекта. - /// - // *** Start programmer edit section *** (Медведь.EditTime CustomAttributes) - // *** End programmer edit section *** (Медведь.EditTime CustomAttributes) - public virtual System.Nullable EditTime - { - get - { - // *** Start programmer edit section *** (Медведь.EditTime Get start) - - // *** End programmer edit section *** (Медведь.EditTime Get start) - System.Nullable result = this.fEditTime; - // *** Start programmer edit section *** (Медведь.EditTime Get end) - - // *** End programmer edit section *** (Медведь.EditTime Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.EditTime Set start) - - // *** End programmer edit section *** (Медведь.EditTime Set start) - this.fEditTime = value; - // *** Start programmer edit section *** (Медведь.EditTime Set end) - - // *** End programmer edit section *** (Медведь.EditTime Set end) - } - } - /// /// Последний редактор объекта. /// @@ -493,7 +457,38 @@ public virtual string Editor // *** End programmer edit section *** (Медведь.Editor Set end) } } - + + /// + /// Время последнего редактирования объекта. + /// + // *** Start programmer edit section *** (Медведь.EditTime CustomAttributes) + + // *** End programmer edit section *** (Медведь.EditTime CustomAttributes) + public virtual System.Nullable EditTime + { + get + { + // *** Start programmer edit section *** (Медведь.EditTime Get start) + + // *** End programmer edit section *** (Медведь.EditTime Get start) + System.Nullable result = this.fEditTime; + // *** Start programmer edit section *** (Медведь.EditTime Get end) + + // *** End programmer edit section *** (Медведь.EditTime Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.EditTime Set start) + + // *** End programmer edit section *** (Медведь.EditTime Set start) + this.fEditTime = value; + // *** Start programmer edit section *** (Медведь.EditTime Set end) + + // *** End programmer edit section *** (Медведь.EditTime Set end) + } + } + /// /// Медведь ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. @@ -527,7 +522,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Лес ЛесОби // *** End programmer edit section *** (Медведь.ЛесОбитания Set end) } } - + /// /// Медведь ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. @@ -561,7 +556,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь Ма // *** End programmer edit section *** (Медведь.Мама Set end) } } - + /// /// Медведь ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. @@ -595,7 +590,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь Па // *** End programmer edit section *** (Медведь.Папа Set end) } } - + /// /// Медведь ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. @@ -629,7 +624,7 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Страна Стр // *** End programmer edit section *** (Медведь.СтранаРождения Set end) } } - + /// /// Медведь ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. @@ -665,13 +660,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБер // *** End programmer edit section *** (Медведь.Берлога Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// Представление для работы тестов на загрузку объектов. /// @@ -682,7 +677,7 @@ public static ICSSoft.STORMNET.View LoadTestView return ICSSoft.STORMNET.Information.GetView("LoadTestView", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); } } - + /// /// Представление для работы теста по использованию порядкового номера. /// @@ -693,7 +688,7 @@ public static ICSSoft.STORMNET.View OrderNumberTest return ICSSoft.STORMNET.Information.GetView("OrderNumberTest", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); } } - + /// /// "МедведьE" view. /// @@ -704,7 +699,7 @@ public static ICSSoft.STORMNET.View МедведьE return ICSSoft.STORMNET.Information.GetView("МедведьE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); } } - + /// /// "МедведьL" view. /// @@ -715,7 +710,7 @@ public static ICSSoft.STORMNET.View МедведьL return ICSSoft.STORMNET.Information.GetView("МедведьL", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); } } - + /// /// "МедведьShort" view. /// @@ -726,7 +721,7 @@ public static ICSSoft.STORMNET.View МедведьShort return ICSSoft.STORMNET.Information.GetView("МедведьShort", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); } } - + /// /// "МедведьСДелейломИВычислимымСвойством" view. /// @@ -738,93 +733,93 @@ public static ICSSoft.STORMNET.View МедведьСДелейломИВычис } } } - + /// /// Audit class settings. /// public class AuditSettings { - + /// /// Включён ли аудит для класса. /// public static bool AuditEnabled = true; - + /// /// Использовать имя представления для аудита по умолчанию. /// public static bool UseDefaultView = true; - + /// /// Включён ли аудит операции чтения. /// public static bool SelectAudit = true; - + /// /// Имя представления для аудирования операции чтения. /// public static string SelectAuditViewName = "AuditView"; - + /// /// Включён ли аудит операции создания. /// public static bool InsertAudit = true; - + /// /// Имя представления для аудирования операции создания. /// public static string InsertAuditViewName = "AuditView"; - + /// /// Включён ли аудит операции изменения. /// public static bool UpdateAudit = true; - + /// /// Имя представления для аудирования операции изменения. /// public static string UpdateAuditViewName = "AuditView"; - + /// /// Включён ли аудит операции удаления. /// public static bool DeleteAudit = true; - + /// /// Имя представления для аудирования операции удаления. /// public static string DeleteAuditViewName = "AuditView"; - + /// /// Путь к форме просмотра результатов аудита. /// public static string FormUrl = ""; - + /// /// Режим записи данных аудита (синхронный или асинхронный). /// public static ICSSoft.STORMNET.Business.Audit.Objects.tWriteMode WriteMode = ICSSoft.STORMNET.Business.Audit.Objects.tWriteMode.Synchronous; - + /// /// Максимальная длина сохраняемого значения поля (если 0, то строка обрезаться не будет). /// public static int PrunningLength = 0; - + /// /// Показывать ли пользователям в изменениях первичные ключи. /// public static bool ShowPrimaryKey = false; - + /// /// Сохранять ли старое значение. /// public static bool KeepOldValue = true; - + /// /// Сжимать ли сохраняемые значения. /// public static bool Compress = false; - + /// /// Сохранять ли все значения атрибутов, а не только изменяемые. /// @@ -832,3 +827,4 @@ public class AuditSettings } } } + diff --git "a/Tests/Objects/\320\235\320\260\321\201\320\273\320\265\320\264\320\275\320\270\320\272.cs" "b/Tests/Objects/\320\235\320\260\321\201\320\273\320\265\320\264\320\275\320\270\320\272.cs" index b0c5d049..39ec90e3 100644 --- "a/Tests/Objects/\320\235\320\260\321\201\320\273\320\265\320\264\320\275\320\270\320\272.cs" +++ "b/Tests/Objects/\320\235\320\260\321\201\320\273\320\265\320\264\320\275\320\270\320\272.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -30,18 +27,18 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests [AccessType(ICSSoft.STORMNET.AccessType.none)] public class Наследник : NewPlatform.Flexberry.ORM.ODataService.Tests.БазовыйКласс { - + private double fСвойство; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Master fMaster; - + private NewPlatform.Flexberry.ORM.ODataService.Tests.Мастер fМастер; - + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Master fMaster; + // *** Start programmer edit section *** (Наследник CustomMembers) // *** End programmer edit section *** (Наследник CustomMembers) - + /// /// Свойство. /// @@ -72,71 +69,72 @@ public virtual double Свойство // *** End programmer edit section *** (Наследник.Свойство Set end) } } - + /// /// Наследник. /// - // *** Start programmer edit section *** (Наследник.Master CustomAttributes) - - // *** End programmer edit section *** (Наследник.Master CustomAttributes) + // *** Start programmer edit section *** (Наследник.Мастер CustomAttributes) + [PublishName("MasterAlias")] + // *** End programmer edit section *** (Наследник.Мастер CustomAttributes) [PropertyStorage(new string[] { - "Master"})] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Master Master + "Мастер"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Мастер Мастер { get { - // *** Start programmer edit section *** (Наследник.Master Get start) + // *** Start programmer edit section *** (Наследник.Мастер Get start) - // *** End programmer edit section *** (Наследник.Master Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Master result = this.fMaster; - // *** Start programmer edit section *** (Наследник.Master Get end) + // *** End programmer edit section *** (Наследник.Мастер Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Мастер result = this.fМастер; + // *** Start programmer edit section *** (Наследник.Мастер Get end) - // *** End programmer edit section *** (Наследник.Master Get end) + // *** End programmer edit section *** (Наследник.Мастер Get end) return result; } set { - // *** Start programmer edit section *** (Наследник.Master Set start) + // *** Start programmer edit section *** (Наследник.Мастер Set start) - // *** End programmer edit section *** (Наследник.Master Set start) - this.fMaster = value; - // *** Start programmer edit section *** (Наследник.Master Set end) + // *** End programmer edit section *** (Наследник.Мастер Set start) + this.fМастер = value; + // *** Start programmer edit section *** (Наследник.Мастер Set end) - // *** End programmer edit section *** (Наследник.Master Set end) + // *** End programmer edit section *** (Наследник.Мастер Set end) } } - + /// /// Наследник. /// - // *** Start programmer edit section *** (Наследник.Мастер CustomAttributes) - [PublishName("MasterAlias")] - // *** End programmer edit section *** (Наследник.Мастер CustomAttributes) + // *** Start programmer edit section *** (Наследник.Master CustomAttributes) + + // *** End programmer edit section *** (Наследник.Master CustomAttributes) [PropertyStorage(new string[] { - "Мастер"})] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Мастер Мастер + "Master"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Master Master { get { - // *** Start programmer edit section *** (Наследник.Мастер Get start) + // *** Start programmer edit section *** (Наследник.Master Get start) - // *** End programmer edit section *** (Наследник.Мастер Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Мастер result = this.fМастер; - // *** Start programmer edit section *** (Наследник.Мастер Get end) + // *** End programmer edit section *** (Наследник.Master Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Master result = this.fMaster; + // *** Start programmer edit section *** (Наследник.Master Get end) - // *** End programmer edit section *** (Наследник.Мастер Get end) + // *** End programmer edit section *** (Наследник.Master Get end) return result; } set { - // *** Start programmer edit section *** (Наследник.Мастер Set start) + // *** Start programmer edit section *** (Наследник.Master Set start) - // *** End programmer edit section *** (Наследник.Мастер Set start) - this.fМастер = value; - // *** Start programmer edit section *** (Наследник.Мастер Set end) + // *** End programmer edit section *** (Наследник.Master Set start) + this.fMaster = value; + // *** Start programmer edit section *** (Наследник.Master Set end) - // *** End programmer edit section *** (Наследник.Мастер Set end) + // *** End programmer edit section *** (Наследник.Master Set end) } } } } + diff --git "a/Tests/Objects/\320\237\320\265\321\200\320\265\320\273\320\276\320\274.cs" "b/Tests/Objects/\320\237\320\265\321\200\320\265\320\273\320\276\320\274.cs" index a135a95b..20f27741 100644 --- "a/Tests/Objects/\320\237\320\265\321\200\320\265\320\273\320\276\320\274.cs" +++ "b/Tests/Objects/\320\237\320\265\321\200\320\265\320\273\320\276\320\274.cs" @@ -1,185 +1,183 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - using ICSSoft.STORMNET.Business; - using ICSSoft.STORMNET; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// Перелом. - /// - // *** Start programmer edit section *** (Перелом CustomAttributes) - - // *** End programmer edit section *** (Перелом CustomAttributes) - [BusinessServer("NewPlatform.Flexberry.ORM.ODataService.Tests.CatsBS, NewPlatform.Flexberry.ORM.OD" + - "ataService.Tests.BusinessServers", ICSSoft.STORMNET.Business.DataServiceObjectEvents.OnAllEvents)] - [AutoAltered()] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - public class Перелом : ICSSoft.STORMNET.DataObject - { - - private System.DateTime fДата; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.ТипПерелома fТип; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа fЛапа; - - // *** Start programmer edit section *** (Перелом CustomMembers) - - // *** End programmer edit section *** (Перелом CustomMembers) - - - /// - /// Дата. - /// - // *** Start programmer edit section *** (Перелом.Дата CustomAttributes) - - // *** End programmer edit section *** (Перелом.Дата CustomAttributes) - public virtual System.DateTime Дата - { - get - { - // *** Start programmer edit section *** (Перелом.Дата Get start) - - // *** End programmer edit section *** (Перелом.Дата Get start) - System.DateTime result = this.fДата; - // *** Start programmer edit section *** (Перелом.Дата Get end) - - // *** End programmer edit section *** (Перелом.Дата Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Перелом.Дата Set start) - - // *** End programmer edit section *** (Перелом.Дата Set start) - this.fДата = value; - // *** Start programmer edit section *** (Перелом.Дата Set end) - - // *** End programmer edit section *** (Перелом.Дата Set end) - } - } - - /// - /// Тип. - /// - // *** Start programmer edit section *** (Перелом.Тип CustomAttributes) - - // *** End programmer edit section *** (Перелом.Тип CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.ТипПерелома Тип - { - get - { - // *** Start programmer edit section *** (Перелом.Тип Get start) - - // *** End programmer edit section *** (Перелом.Тип Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.ТипПерелома result = this.fТип; - // *** Start programmer edit section *** (Перелом.Тип Get end) - - // *** End programmer edit section *** (Перелом.Тип Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Перелом.Тип Set start) - - // *** End programmer edit section *** (Перелом.Тип Set start) - this.fТип = value; - // *** Start programmer edit section *** (Перелом.Тип Set end) - - // *** End programmer edit section *** (Перелом.Тип Set end) - } - } - - /// - /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа. - /// - // *** Start programmer edit section *** (Перелом.Лапа CustomAttributes) - - // *** End programmer edit section *** (Перелом.Лапа CustomAttributes) - [Agregator()] - [NotNull()] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа Лапа - { - get - { - // *** Start programmer edit section *** (Перелом.Лапа Get start) - - // *** End programmer edit section *** (Перелом.Лапа Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа result = this.fЛапа; - // *** Start programmer edit section *** (Перелом.Лапа Get end) - - // *** End programmer edit section *** (Перелом.Лапа Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Перелом.Лапа Set start) - - // *** End programmer edit section *** (Перелом.Лапа Set start) - this.fЛапа = value; - // *** Start programmer edit section *** (Перелом.Лапа Set end) - - // *** End programmer edit section *** (Перелом.Лапа Set end) - } - } - } - - /// - /// Detail array of Перелом. - /// - // *** Start programmer edit section *** (DetailArrayDetailArrayOfПерелом CustomAttributes) - - // *** End programmer edit section *** (DetailArrayDetailArrayOfПерелом CustomAttributes) - public class DetailArrayOfПерелом : ICSSoft.STORMNET.DetailArray - { - - // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfПерелом members) - - // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfПерелом members) - - - /// - /// Construct detail array. - /// - /// - /// Returns object with type Перелом by index. - /// - /// - /// Adds object with type Перелом. - /// - public DetailArrayOfПерелом(NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа fЛапа) : - base(typeof(Перелом), ((ICSSoft.STORMNET.DataObject)(fЛапа))) - { - } - - public NewPlatform.Flexberry.ORM.ODataService.Tests.Перелом this[int index] - { - get - { - return ((NewPlatform.Flexberry.ORM.ODataService.Tests.Перелом)(this.ItemByIndex(index))); - } - } - - public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.Перелом dataobject) - { - this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET.Business; + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// Перелом. + /// + // *** Start programmer edit section *** (Перелом CustomAttributes) + + // *** End programmer edit section *** (Перелом CustomAttributes) + [BusinessServer("NewPlatform.Flexberry.ORM.ODataService.Tests.CatsBS, NewPlatform.Flexberry.ORM.OD" + + "ataService.Tests.BusinessServers", ICSSoft.STORMNET.Business.DataServiceObjectEvents.OnAllEvents)] + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class Перелом : ICSSoft.STORMNET.DataObject + { + + private System.DateTime fДата; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.ТипПерелома fТип; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа fЛапа; + + // *** Start programmer edit section *** (Перелом CustomMembers) + + // *** End programmer edit section *** (Перелом CustomMembers) + + + /// + /// Дата. + /// + // *** Start programmer edit section *** (Перелом.Дата CustomAttributes) + + // *** End programmer edit section *** (Перелом.Дата CustomAttributes) + public virtual System.DateTime Дата + { + get + { + // *** Start programmer edit section *** (Перелом.Дата Get start) + + // *** End programmer edit section *** (Перелом.Дата Get start) + System.DateTime result = this.fДата; + // *** Start programmer edit section *** (Перелом.Дата Get end) + + // *** End programmer edit section *** (Перелом.Дата Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Перелом.Дата Set start) + + // *** End programmer edit section *** (Перелом.Дата Set start) + this.fДата = value; + // *** Start programmer edit section *** (Перелом.Дата Set end) + + // *** End programmer edit section *** (Перелом.Дата Set end) + } + } + + /// + /// Тип. + /// + // *** Start programmer edit section *** (Перелом.Тип CustomAttributes) + + // *** End programmer edit section *** (Перелом.Тип CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.ТипПерелома Тип + { + get + { + // *** Start programmer edit section *** (Перелом.Тип Get start) + + // *** End programmer edit section *** (Перелом.Тип Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.ТипПерелома result = this.fТип; + // *** Start programmer edit section *** (Перелом.Тип Get end) + + // *** End programmer edit section *** (Перелом.Тип Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Перелом.Тип Set start) + + // *** End programmer edit section *** (Перелом.Тип Set start) + this.fТип = value; + // *** Start programmer edit section *** (Перелом.Тип Set end) + + // *** End programmer edit section *** (Перелом.Тип Set end) + } + } + + /// + /// мастеровая ссылка на шапку NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа. + /// + // *** Start programmer edit section *** (Перелом.Лапа CustomAttributes) + + // *** End programmer edit section *** (Перелом.Лапа CustomAttributes) + [Agregator()] + [NotNull()] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа Лапа + { + get + { + // *** Start programmer edit section *** (Перелом.Лапа Get start) + + // *** End programmer edit section *** (Перелом.Лапа Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа result = this.fЛапа; + // *** Start programmer edit section *** (Перелом.Лапа Get end) + + // *** End programmer edit section *** (Перелом.Лапа Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Перелом.Лапа Set start) + + // *** End programmer edit section *** (Перелом.Лапа Set start) + this.fЛапа = value; + // *** Start programmer edit section *** (Перелом.Лапа Set end) + + // *** End programmer edit section *** (Перелом.Лапа Set end) + } + } + } + + /// + /// Detail array of Перелом. + /// + // *** Start programmer edit section *** (DetailArrayDetailArrayOfПерелом CustomAttributes) + + // *** End programmer edit section *** (DetailArrayDetailArrayOfПерелом CustomAttributes) + public class DetailArrayOfПерелом : ICSSoft.STORMNET.DetailArray + { + + // *** Start programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfПерелом members) + + // *** End programmer edit section *** (NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfПерелом members) + + + /// + /// Construct detail array. + /// + /// + /// Returns object with type Перелом by index. + /// + /// + /// Adds object with type Перелом. + /// + public DetailArrayOfПерелом(NewPlatform.Flexberry.ORM.ODataService.Tests.Лапа fЛапа) : + base(typeof(Перелом), ((ICSSoft.STORMNET.DataObject)(fЛапа))) + { + } + + public NewPlatform.Flexberry.ORM.ODataService.Tests.Перелом this[int index] + { + get + { + return ((NewPlatform.Flexberry.ORM.ODataService.Tests.Перелом)(this.ItemByIndex(index))); + } + } + + public virtual void Add(NewPlatform.Flexberry.ORM.ODataService.Tests.Перелом dataobject) + { + this.AddObject(((ICSSoft.STORMNET.DataObject)(dataobject))); + } + } +} + diff --git "a/Tests/Objects/\320\237\320\276\321\200\320\276\320\264\320\260.cs" "b/Tests/Objects/\320\237\320\276\321\200\320\276\320\264\320\260.cs" index 17b9a647..91cff119 100644 --- "a/Tests/Objects/\320\237\320\276\321\200\320\276\320\264\320\260.cs" +++ "b/Tests/Objects/\320\237\320\276\321\200\320\276\320\264\320\260.cs" @@ -1,165 +1,163 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - using ICSSoft.STORMNET; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// Порода. - /// - // *** Start programmer edit section *** (Порода CustomAttributes) - - // *** End programmer edit section *** (Порода CustomAttributes) - [AutoAltered()] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - [View("ПородаE", new string[] { - "Название", - "ТипПороды", - "ТипПороды.Название", - "Иерархия", - "Иерархия.Название"}, Hidden=new string[] { - "ТипПороды", - "Иерархия"})] - public class Порода : ICSSoft.STORMNET.DataObject - { - - private string fНазвание; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Порода fИерархия; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.ТипПороды fТипПороды; - - // *** Start programmer edit section *** (Порода CustomMembers) - - // *** End programmer edit section *** (Порода CustomMembers) - - - /// - /// Название. - /// - // *** Start programmer edit section *** (Порода.Название CustomAttributes) - - // *** End programmer edit section *** (Порода.Название CustomAttributes) - [StrLen(255)] - public virtual string Название - { - get - { - // *** Start programmer edit section *** (Порода.Название Get start) - - // *** End programmer edit section *** (Порода.Название Get start) - string result = this.fНазвание; - // *** Start programmer edit section *** (Порода.Название Get end) - - // *** End programmer edit section *** (Порода.Название Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Порода.Название Set start) - - // *** End programmer edit section *** (Порода.Название Set start) - this.fНазвание = value; - // *** Start programmer edit section *** (Порода.Название Set end) - - // *** End programmer edit section *** (Порода.Название Set end) - } - } - - /// - /// Порода. - /// - // *** Start programmer edit section *** (Порода.Иерархия CustomAttributes) - - // *** End programmer edit section *** (Порода.Иерархия CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Порода Иерархия - { - get - { - // *** Start programmer edit section *** (Порода.Иерархия Get start) - - // *** End programmer edit section *** (Порода.Иерархия Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Порода result = this.fИерархия; - // *** Start programmer edit section *** (Порода.Иерархия Get end) - - // *** End programmer edit section *** (Порода.Иерархия Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Порода.Иерархия Set start) - - // *** End programmer edit section *** (Порода.Иерархия Set start) - this.fИерархия = value; - // *** Start programmer edit section *** (Порода.Иерархия Set end) - - // *** End programmer edit section *** (Порода.Иерархия Set end) - } - } - - /// - /// Порода. - /// - // *** Start programmer edit section *** (Порода.ТипПороды CustomAttributes) - - // *** End programmer edit section *** (Порода.ТипПороды CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.ТипПороды ТипПороды - { - get - { - // *** Start programmer edit section *** (Порода.ТипПороды Get start) - - // *** End programmer edit section *** (Порода.ТипПороды Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.ТипПороды result = this.fТипПороды; - // *** Start programmer edit section *** (Порода.ТипПороды Get end) - - // *** End programmer edit section *** (Порода.ТипПороды Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Порода.ТипПороды Set start) - - // *** End programmer edit section *** (Порода.ТипПороды Set start) - this.fТипПороды = value; - // *** Start programmer edit section *** (Порода.ТипПороды Set end) - - // *** End programmer edit section *** (Порода.ТипПороды Set end) - } - } - - /// - /// Class views container. - /// - public class Views - { - - /// - /// "ПородаE" view. - /// - public static ICSSoft.STORMNET.View ПородаE - { - get - { - return ICSSoft.STORMNET.Information.GetView("ПородаE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Порода)); - } - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// Порода. + /// + // *** Start programmer edit section *** (Порода CustomAttributes) + + // *** End programmer edit section *** (Порода CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + [View("ПородаE", new string[] { + "Название", + "ТипПороды", + "ТипПороды.Название", + "Иерархия", + "Иерархия.Название"}, Hidden=new string[] { + "ТипПороды", + "Иерархия"})] + public class Порода : ICSSoft.STORMNET.DataObject + { + + private string fНазвание; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Порода fИерархия; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.ТипПороды fТипПороды; + + // *** Start programmer edit section *** (Порода CustomMembers) + + // *** End programmer edit section *** (Порода CustomMembers) + + + /// + /// Название. + /// + // *** Start programmer edit section *** (Порода.Название CustomAttributes) + + // *** End programmer edit section *** (Порода.Название CustomAttributes) + [StrLen(255)] + public virtual string Название + { + get + { + // *** Start programmer edit section *** (Порода.Название Get start) + + // *** End programmer edit section *** (Порода.Название Get start) + string result = this.fНазвание; + // *** Start programmer edit section *** (Порода.Название Get end) + + // *** End programmer edit section *** (Порода.Название Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Порода.Название Set start) + + // *** End programmer edit section *** (Порода.Название Set start) + this.fНазвание = value; + // *** Start programmer edit section *** (Порода.Название Set end) + + // *** End programmer edit section *** (Порода.Название Set end) + } + } + + /// + /// Порода. + /// + // *** Start programmer edit section *** (Порода.Иерархия CustomAttributes) + + // *** End programmer edit section *** (Порода.Иерархия CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Порода Иерархия + { + get + { + // *** Start programmer edit section *** (Порода.Иерархия Get start) + + // *** End programmer edit section *** (Порода.Иерархия Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Порода result = this.fИерархия; + // *** Start programmer edit section *** (Порода.Иерархия Get end) + + // *** End programmer edit section *** (Порода.Иерархия Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Порода.Иерархия Set start) + + // *** End programmer edit section *** (Порода.Иерархия Set start) + this.fИерархия = value; + // *** Start programmer edit section *** (Порода.Иерархия Set end) + + // *** End programmer edit section *** (Порода.Иерархия Set end) + } + } + + /// + /// Порода. + /// + // *** Start programmer edit section *** (Порода.ТипПороды CustomAttributes) + + // *** End programmer edit section *** (Порода.ТипПороды CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.ТипПороды ТипПороды + { + get + { + // *** Start programmer edit section *** (Порода.ТипПороды Get start) + + // *** End programmer edit section *** (Порода.ТипПороды Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.ТипПороды result = this.fТипПороды; + // *** Start programmer edit section *** (Порода.ТипПороды Get end) + + // *** End programmer edit section *** (Порода.ТипПороды Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Порода.ТипПороды Set start) + + // *** End programmer edit section *** (Порода.ТипПороды Set start) + this.fТипПороды = value; + // *** Start programmer edit section *** (Порода.ТипПороды Set end) + + // *** End programmer edit section *** (Порода.ТипПороды Set end) + } + } + + /// + /// Class views container. + /// + public class Views + { + + /// + /// "ПородаE" view. + /// + public static ICSSoft.STORMNET.View ПородаE + { + get + { + return ICSSoft.STORMNET.Information.GetView("ПородаE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Порода)); + } + } + } + } +} + diff --git "a/Tests/Objects/\320\237\320\276\321\201\321\202\320\260\320\262\321\211\320\270\320\272\320\232\320\275\320\270\320\263.cs" "b/Tests/Objects/\320\237\320\276\321\201\321\202\320\260\320\262\321\211\320\270\320\272\320\232\320\275\320\270\320\263.cs" index 7923774c..02ddda3e 100644 --- "a/Tests/Objects/\320\237\320\276\321\201\321\202\320\260\320\262\321\211\320\270\320\272\320\232\320\275\320\270\320\263.cs" +++ "b/Tests/Objects/\320\237\320\276\321\201\321\202\320\260\320\262\321\211\320\270\320\272\320\232\320\275\320\270\320\263.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -35,14 +32,14 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "Мастер as \'Мастер\'"})] public class ПоставщикКниг : ICSSoft.STORMNET.DataObject { - + private System.Guid fСсылка; - + // *** Start programmer edit section *** (ПоставщикКниг CustomMembers) // *** End programmer edit section *** (ПоставщикКниг CustomMembers) - + /// /// Ссылка. /// @@ -73,7 +70,7 @@ public virtual System.Guid Ссылка // *** End programmer edit section *** (ПоставщикКниг.Ссылка Set end) } } - + /// /// ПоставщикКниг. /// @@ -99,13 +96,13 @@ public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Библиотека // *** End programmer edit section *** (ПоставщикКниг.Мастер Set) } } - + /// /// Class views container. /// public class Views { - + /// /// "View" view. /// @@ -116,7 +113,7 @@ public static ICSSoft.STORMNET.View View return ICSSoft.STORMNET.Information.GetView("View", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.ПоставщикКниг)); } } - + /// /// "ViewFull" view. /// @@ -130,3 +127,4 @@ public static ICSSoft.STORMNET.View ViewFull } } } + diff --git "a/Tests/Objects/\320\241\321\202\320\276\321\200\320\276\320\275\320\260.cs" "b/Tests/Objects/\320\241\321\202\320\276\321\200\320\276\320\275\320\260.cs" index ab8e7b07..a26bb57d 100644 --- "a/Tests/Objects/\320\241\321\202\320\276\321\200\320\276\320\275\320\260.cs" +++ "b/Tests/Objects/\320\241\321\202\320\276\321\200\320\276\320\275\320\260.cs" @@ -1,46 +1,44 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// Сторона. - /// - // *** Start programmer edit section *** (Сторона CustomAttributes) - - // *** End programmer edit section *** (Сторона CustomAttributes) - public enum Сторона - { - - // *** Start programmer edit section *** (Сторона.НетЗначения CustomAttributes) - - // *** End programmer edit section *** (Сторона.НетЗначения CustomAttributes) - НетЗначения, - - // *** Start programmer edit section *** (Сторона.Левая CustomAttributes) - - // *** End programmer edit section *** (Сторона.Левая CustomAttributes) - Левая, - - // *** Start programmer edit section *** (Сторона.Правая CustomAttributes) - - // *** End programmer edit section *** (Сторона.Правая CustomAttributes) - Правая, - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// Сторона. + /// + // *** Start programmer edit section *** (Сторона CustomAttributes) + + // *** End programmer edit section *** (Сторона CustomAttributes) + public enum Сторона + { + + // *** Start programmer edit section *** (Сторона.НетЗначения CustomAttributes) + + // *** End programmer edit section *** (Сторона.НетЗначения CustomAttributes) + НетЗначения, + + // *** Start programmer edit section *** (Сторона.Левая CustomAttributes) + + // *** End programmer edit section *** (Сторона.Левая CustomAttributes) + Левая, + + // *** Start programmer edit section *** (Сторона.Правая CustomAttributes) + + // *** End programmer edit section *** (Сторона.Правая CustomAttributes) + Правая, + } +} + diff --git "a/Tests/Objects/\320\241\321\202\321\200\320\260\320\275\320\260.cs" "b/Tests/Objects/\320\241\321\202\321\200\320\260\320\275\320\260.cs" index 5d5fdeec..d4ffa08b 100644 --- "a/Tests/Objects/\320\241\321\202\321\200\320\260\320\275\320\260.cs" +++ "b/Tests/Objects/\320\241\321\202\321\200\320\260\320\275\320\260.cs" @@ -1,20 +1,17 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; using ICSSoft.STORMNET; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -34,14 +31,14 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "Название as \'Название\'"})] public class Страна : ICSSoft.STORMNET.DataObject { - + private string fНазвание; - + // *** Start programmer edit section *** (Страна CustomMembers) // *** End programmer edit section *** (Страна CustomMembers) - + /// /// Название. /// @@ -73,13 +70,13 @@ public virtual string Название // *** End programmer edit section *** (Страна.Название Set end) } } - + /// /// Class views container. /// public class Views { - + /// /// "СтранаE" view. /// @@ -90,7 +87,7 @@ public static ICSSoft.STORMNET.View СтранаE return ICSSoft.STORMNET.Information.GetView("СтранаE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Страна)); } } - + /// /// "СтранаL" view. /// @@ -104,3 +101,4 @@ public static ICSSoft.STORMNET.View СтранаL } } } + diff --git "a/Tests/Objects/\320\242\320\270\320\277\320\232\320\276\321\210\320\272\320\270.cs" "b/Tests/Objects/\320\242\320\270\320\277\320\232\320\276\321\210\320\272\320\270.cs" index e4567d95..c6f6a7c8 100644 --- "a/Tests/Objects/\320\242\320\270\320\277\320\232\320\276\321\210\320\272\320\270.cs" +++ "b/Tests/Objects/\320\242\320\270\320\277\320\232\320\276\321\210\320\272\320\270.cs" @@ -1,46 +1,44 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// ТипКошки. - /// - // *** Start programmer edit section *** (ТипКошки CustomAttributes) - - // *** End programmer edit section *** (ТипКошки CustomAttributes) - public enum ТипКошки - { - - // *** Start programmer edit section *** (ТипКошки.НетЗначения CustomAttributes) - - // *** End programmer edit section *** (ТипКошки.НетЗначения CustomAttributes) - НетЗначения, - - // *** Start programmer edit section *** (ТипКошки.Дикая CustomAttributes) - - // *** End programmer edit section *** (ТипКошки.Дикая CustomAttributes) - Дикая, - - // *** Start programmer edit section *** (ТипКошки.Домашняя CustomAttributes) - - // *** End programmer edit section *** (ТипКошки.Домашняя CustomAttributes) - Домашняя, - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// ТипКошки. + /// + // *** Start programmer edit section *** (ТипКошки CustomAttributes) + + // *** End programmer edit section *** (ТипКошки CustomAttributes) + public enum ТипКошки + { + + // *** Start programmer edit section *** (ТипКошки.НетЗначения CustomAttributes) + + // *** End programmer edit section *** (ТипКошки.НетЗначения CustomAttributes) + НетЗначения, + + // *** Start programmer edit section *** (ТипКошки.Дикая CustomAttributes) + + // *** End programmer edit section *** (ТипКошки.Дикая CustomAttributes) + Дикая, + + // *** Start programmer edit section *** (ТипКошки.Домашняя CustomAttributes) + + // *** End programmer edit section *** (ТипКошки.Домашняя CustomAttributes) + Домашняя, + } +} + diff --git "a/Tests/Objects/\320\242\320\270\320\277\320\233\320\260\320\277\321\213.cs" "b/Tests/Objects/\320\242\320\270\320\277\320\233\320\260\320\277\321\213.cs" index f5977b04..8a958583 100644 --- "a/Tests/Objects/\320\242\320\270\320\277\320\233\320\260\320\277\321\213.cs" +++ "b/Tests/Objects/\320\242\320\270\320\277\320\233\320\260\320\277\321\213.cs" @@ -1,106 +1,104 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - using ICSSoft.STORMNET; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// ТипЛапы. - /// - // *** Start programmer edit section *** (ТипЛапы CustomAttributes) - - // *** End programmer edit section *** (ТипЛапы CustomAttributes) - [AutoAltered()] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - public class ТипЛапы : ICSSoft.STORMNET.DataObject - { - - private string fНазвание; - - private bool fАктуально; - - // *** Start programmer edit section *** (ТипЛапы CustomMembers) - - // *** End programmer edit section *** (ТипЛапы CustomMembers) - - - /// - /// Название. - /// - // *** Start programmer edit section *** (ТипЛапы.Название CustomAttributes) - - // *** End programmer edit section *** (ТипЛапы.Название CustomAttributes) - [StrLen(255)] - public virtual string Название - { - get - { - // *** Start programmer edit section *** (ТипЛапы.Название Get start) - - // *** End programmer edit section *** (ТипЛапы.Название Get start) - string result = this.fНазвание; - // *** Start programmer edit section *** (ТипЛапы.Название Get end) - - // *** End programmer edit section *** (ТипЛапы.Название Get end) - return result; - } - set - { - // *** Start programmer edit section *** (ТипЛапы.Название Set start) - - // *** End programmer edit section *** (ТипЛапы.Название Set start) - this.fНазвание = value; - // *** Start programmer edit section *** (ТипЛапы.Название Set end) - - // *** End programmer edit section *** (ТипЛапы.Название Set end) - } - } - - /// - /// Актуально. - /// - // *** Start programmer edit section *** (ТипЛапы.Актуально CustomAttributes) - - // *** End programmer edit section *** (ТипЛапы.Актуально CustomAttributes) - public virtual bool Актуально - { - get - { - // *** Start programmer edit section *** (ТипЛапы.Актуально Get start) - - // *** End programmer edit section *** (ТипЛапы.Актуально Get start) - bool result = this.fАктуально; - // *** Start programmer edit section *** (ТипЛапы.Актуально Get end) - - // *** End programmer edit section *** (ТипЛапы.Актуально Get end) - return result; - } - set - { - // *** Start programmer edit section *** (ТипЛапы.Актуально Set start) - - // *** End programmer edit section *** (ТипЛапы.Актуально Set start) - this.fАктуально = value; - // *** Start programmer edit section *** (ТипЛапы.Актуально Set end) - - // *** End programmer edit section *** (ТипЛапы.Актуально Set end) - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// ТипЛапы. + /// + // *** Start programmer edit section *** (ТипЛапы CustomAttributes) + + // *** End programmer edit section *** (ТипЛапы CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class ТипЛапы : ICSSoft.STORMNET.DataObject + { + + private bool fАктуально; + + private string fНазвание; + + // *** Start programmer edit section *** (ТипЛапы CustomMembers) + + // *** End programmer edit section *** (ТипЛапы CustomMembers) + + + /// + /// Актуально. + /// + // *** Start programmer edit section *** (ТипЛапы.Актуально CustomAttributes) + + // *** End programmer edit section *** (ТипЛапы.Актуально CustomAttributes) + public virtual bool Актуально + { + get + { + // *** Start programmer edit section *** (ТипЛапы.Актуально Get start) + + // *** End programmer edit section *** (ТипЛапы.Актуально Get start) + bool result = this.fАктуально; + // *** Start programmer edit section *** (ТипЛапы.Актуально Get end) + + // *** End programmer edit section *** (ТипЛапы.Актуально Get end) + return result; + } + set + { + // *** Start programmer edit section *** (ТипЛапы.Актуально Set start) + + // *** End programmer edit section *** (ТипЛапы.Актуально Set start) + this.fАктуально = value; + // *** Start programmer edit section *** (ТипЛапы.Актуально Set end) + + // *** End programmer edit section *** (ТипЛапы.Актуально Set end) + } + } + + /// + /// Название. + /// + // *** Start programmer edit section *** (ТипЛапы.Название CustomAttributes) + + // *** End programmer edit section *** (ТипЛапы.Название CustomAttributes) + [StrLen(255)] + public virtual string Название + { + get + { + // *** Start programmer edit section *** (ТипЛапы.Название Get start) + + // *** End programmer edit section *** (ТипЛапы.Название Get start) + string result = this.fНазвание; + // *** Start programmer edit section *** (ТипЛапы.Название Get end) + + // *** End programmer edit section *** (ТипЛапы.Название Get end) + return result; + } + set + { + // *** Start programmer edit section *** (ТипЛапы.Название Set start) + + // *** End programmer edit section *** (ТипЛапы.Название Set start) + this.fНазвание = value; + // *** Start programmer edit section *** (ТипЛапы.Название Set end) + + // *** End programmer edit section *** (ТипЛапы.Название Set end) + } + } + } +} + diff --git "a/Tests/Objects/\320\242\320\270\320\277\320\237\320\265\321\200\320\265\320\273\320\276\320\274\320\260.cs" "b/Tests/Objects/\320\242\320\270\320\277\320\237\320\265\321\200\320\265\320\273\320\276\320\274\320\260.cs" index c101a941..aca53710 100644 --- "a/Tests/Objects/\320\242\320\270\320\277\320\237\320\265\321\200\320\265\320\273\320\276\320\274\320\260.cs" +++ "b/Tests/Objects/\320\242\320\270\320\277\320\237\320\265\321\200\320\265\320\273\320\276\320\274\320\260.cs" @@ -1,41 +1,39 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// ТипПерелома. - /// - // *** Start programmer edit section *** (ТипПерелома CustomAttributes) - - // *** End programmer edit section *** (ТипПерелома CustomAttributes) - public enum ТипПерелома - { - - // *** Start programmer edit section *** (ТипПерелома.Открытый CustomAttributes) - - // *** End programmer edit section *** (ТипПерелома.Открытый CustomAttributes) - Открытый, - - // *** Start programmer edit section *** (ТипПерелома.Закрытый CustomAttributes) - - // *** End programmer edit section *** (ТипПерелома.Закрытый CustomAttributes) - Закрытый, - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// ТипПерелома. + /// + // *** Start programmer edit section *** (ТипПерелома CustomAttributes) + + // *** End programmer edit section *** (ТипПерелома CustomAttributes) + public enum ТипПерелома + { + + // *** Start programmer edit section *** (ТипПерелома.Открытый CustomAttributes) + + // *** End programmer edit section *** (ТипПерелома.Открытый CustomAttributes) + Открытый, + + // *** Start programmer edit section *** (ТипПерелома.Закрытый CustomAttributes) + + // *** End programmer edit section *** (ТипПерелома.Закрытый CustomAttributes) + Закрытый, + } +} + diff --git "a/Tests/Objects/\320\242\320\270\320\277\320\237\320\276\321\200\320\276\320\264\321\213.cs" "b/Tests/Objects/\320\242\320\270\320\277\320\237\320\276\321\200\320\276\320\264\321\213.cs" index 0c1bc9c5..7c4898b0 100644 --- "a/Tests/Objects/\320\242\320\270\320\277\320\237\320\276\321\200\320\276\320\264\321\213.cs" +++ "b/Tests/Objects/\320\242\320\270\320\277\320\237\320\276\321\200\320\276\320\264\321\213.cs" @@ -1,106 +1,104 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using System; - using System.Xml; - using ICSSoft.STORMNET; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// ТипПороды. - /// - // *** Start programmer edit section *** (ТипПороды CustomAttributes) - - // *** End programmer edit section *** (ТипПороды CustomAttributes) - [AutoAltered()] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - public class ТипПороды : ICSSoft.STORMNET.DataObject - { - - private string fНазвание; - - private System.DateTime fДатаРегистрации; - - // *** Start programmer edit section *** (ТипПороды CustomMembers) - - // *** End programmer edit section *** (ТипПороды CustomMembers) - - - /// - /// Название. - /// - // *** Start programmer edit section *** (ТипПороды.Название CustomAttributes) - - // *** End programmer edit section *** (ТипПороды.Название CustomAttributes) - [StrLen(255)] - public virtual string Название - { - get - { - // *** Start programmer edit section *** (ТипПороды.Название Get start) - - // *** End programmer edit section *** (ТипПороды.Название Get start) - string result = this.fНазвание; - // *** Start programmer edit section *** (ТипПороды.Название Get end) - - // *** End programmer edit section *** (ТипПороды.Название Get end) - return result; - } - set - { - // *** Start programmer edit section *** (ТипПороды.Название Set start) - - // *** End programmer edit section *** (ТипПороды.Название Set start) - this.fНазвание = value; - // *** Start programmer edit section *** (ТипПороды.Название Set end) - - // *** End programmer edit section *** (ТипПороды.Название Set end) - } - } - - /// - /// ДатаРегистрации. - /// - // *** Start programmer edit section *** (ТипПороды.ДатаРегистрации CustomAttributes) - - // *** End programmer edit section *** (ТипПороды.ДатаРегистрации CustomAttributes) - public virtual System.DateTime ДатаРегистрации - { - get - { - // *** Start programmer edit section *** (ТипПороды.ДатаРегистрации Get start) - - // *** End programmer edit section *** (ТипПороды.ДатаРегистрации Get start) - System.DateTime result = this.fДатаРегистрации; - // *** Start programmer edit section *** (ТипПороды.ДатаРегистрации Get end) - - // *** End programmer edit section *** (ТипПороды.ДатаРегистрации Get end) - return result; - } - set - { - // *** Start programmer edit section *** (ТипПороды.ДатаРегистрации Set start) - - // *** End programmer edit section *** (ТипПороды.ДатаРегистрации Set start) - this.fДатаРегистрации = value; - // *** Start programmer edit section *** (ТипПороды.ДатаРегистрации Set end) - - // *** End programmer edit section *** (ТипПороды.ДатаРегистрации Set end) - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// ТипПороды. + /// + // *** Start programmer edit section *** (ТипПороды CustomAttributes) + + // *** End programmer edit section *** (ТипПороды CustomAttributes) + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + public class ТипПороды : ICSSoft.STORMNET.DataObject + { + + private System.DateTime fДатаРегистрации; + + private string fНазвание; + + // *** Start programmer edit section *** (ТипПороды CustomMembers) + + // *** End programmer edit section *** (ТипПороды CustomMembers) + + + /// + /// ДатаРегистрации. + /// + // *** Start programmer edit section *** (ТипПороды.ДатаРегистрации CustomAttributes) + + // *** End programmer edit section *** (ТипПороды.ДатаРегистрации CustomAttributes) + public virtual System.DateTime ДатаРегистрации + { + get + { + // *** Start programmer edit section *** (ТипПороды.ДатаРегистрации Get start) + + // *** End programmer edit section *** (ТипПороды.ДатаРегистрации Get start) + System.DateTime result = this.fДатаРегистрации; + // *** Start programmer edit section *** (ТипПороды.ДатаРегистрации Get end) + + // *** End programmer edit section *** (ТипПороды.ДатаРегистрации Get end) + return result; + } + set + { + // *** Start programmer edit section *** (ТипПороды.ДатаРегистрации Set start) + + // *** End programmer edit section *** (ТипПороды.ДатаРегистрации Set start) + this.fДатаРегистрации = value; + // *** Start programmer edit section *** (ТипПороды.ДатаРегистрации Set end) + + // *** End programmer edit section *** (ТипПороды.ДатаРегистрации Set end) + } + } + + /// + /// Название. + /// + // *** Start programmer edit section *** (ТипПороды.Название CustomAttributes) + + // *** End programmer edit section *** (ТипПороды.Название CustomAttributes) + [StrLen(255)] + public virtual string Название + { + get + { + // *** Start programmer edit section *** (ТипПороды.Название Get start) + + // *** End programmer edit section *** (ТипПороды.Название Get start) + string result = this.fНазвание; + // *** Start programmer edit section *** (ТипПороды.Название Get end) + + // *** End programmer edit section *** (ТипПороды.Название Get end) + return result; + } + set + { + // *** Start programmer edit section *** (ТипПороды.Название Set start) + + // *** End programmer edit section *** (ТипПороды.Название Set start) + this.fНазвание = value; + // *** Start programmer edit section *** (ТипПороды.Название Set end) + + // *** End programmer edit section *** (ТипПороды.Название Set end) + } + } + } +} + diff --git "a/Tests/Objects/\320\246\320\270\321\204\321\200\320\260.cs" "b/Tests/Objects/\320\246\320\270\321\204\321\200\320\260.cs" index 2c0fb7e9..1b55767a 100644 --- "a/Tests/Objects/\320\246\320\270\321\204\321\200\320\260.cs" +++ "b/Tests/Objects/\320\246\320\270\321\204\321\200\320\260.cs" @@ -1,19 +1,16 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.42000 +// This code was generated by a tool. // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ namespace NewPlatform.Flexberry.ORM.ODataService.Tests { - using System; - using System.Xml; - - + + // *** Start programmer edit section *** (Using statements) // *** End programmer edit section *** (Using statements) @@ -27,55 +24,56 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests // *** End programmer edit section *** (Цифра CustomAttributes) public enum Цифра { - + // *** Start programmer edit section *** (Цифра.Ноль CustomAttributes) // *** End programmer edit section *** (Цифра.Ноль CustomAttributes) Ноль, - + // *** Start programmer edit section *** (Цифра.Один CustomAttributes) // *** End programmer edit section *** (Цифра.Один CustomAttributes) Один, - + // *** Start programmer edit section *** (Цифра.Два CustomAttributes) // *** End programmer edit section *** (Цифра.Два CustomAttributes) Два, - + // *** Start programmer edit section *** (Цифра.Три CustomAttributes) // *** End programmer edit section *** (Цифра.Три CustomAttributes) Три, - + // *** Start programmer edit section *** (Цифра.Четыре CustomAttributes) // *** End programmer edit section *** (Цифра.Четыре CustomAttributes) Четыре, - + // *** Start programmer edit section *** (Цифра.Пять CustomAttributes) // *** End programmer edit section *** (Цифра.Пять CustomAttributes) Пять, - + // *** Start programmer edit section *** (Цифра.Шесть CustomAttributes) // *** End programmer edit section *** (Цифра.Шесть CustomAttributes) Шесть, - + // *** Start programmer edit section *** (Цифра.Семь CustomAttributes) // *** End programmer edit section *** (Цифра.Семь CustomAttributes) Семь, - + // *** Start programmer edit section *** (Цифра.Восемь CustomAttributes) // *** End programmer edit section *** (Цифра.Восемь CustomAttributes) Восемь, - + // *** Start programmer edit section *** (Цифра.Девять CustomAttributes) // *** End programmer edit section *** (Цифра.Девять CustomAttributes) Девять, } } + From 95b9418b699a3cc176b4e2810910341d41a584d2 Mon Sep 17 00:00:00 2001 From: tosotova Date: Fri, 16 Feb 2024 12:03:11 +0500 Subject: [PATCH 53/77] Updated Flexberry ORM up to 7.2.0-beta01 --- .../NewPlatform.Flexberry.ORM.ODataService.Files.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj | 2 +- .../NewPlatform.Flexberry.ORM.ODataService.csproj | 2 +- ...wPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj | 2 +- ...lexberry.ORM.ODataService.Tests.BusinessServers.csproj | 8 ++++---- .../NewPlatform.Flexberry.ORM.ODataService.Tests.csproj | 6 +++--- ...atform.Flexberry.ORM.ODataService.Tests.Objects.csproj | 8 ++++---- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj index 70e898ff..10fbaa27 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj @@ -21,7 +21,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj b/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj index 38b63eb3..a2f3ab89 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj @@ -22,7 +22,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index 0dec1c9e..dfdf4602 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -26,7 +26,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj index ccd211a7..39ffb566 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj @@ -26,7 +26,7 @@ - + diff --git a/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj b/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj index 1d422150..d2f0fb4f 100644 --- a/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj +++ b/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj @@ -14,10 +14,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj index f7a7c68f..610d78f4 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj @@ -40,9 +40,9 @@ - - - + + + diff --git a/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj b/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj index b73f9f3b..8934ab9c 100644 --- a/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj +++ b/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj @@ -14,10 +14,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive From ecf82c2328846f3e87d4743f3eb20a76734065ea Mon Sep 17 00:00:00 2001 From: tosotova Date: Fri, 16 Feb 2024 12:11:46 +0500 Subject: [PATCH 54/77] Changed version of NewPlatform.Flexberry.ORM.ODataService up to 7.2.0-beta02 --- CHANGELOG.md | 1 + NewPlatform.Flexberry.ORM.ODataService.nuspec | 14 ++++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd386d32..477c9832 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added ### Changed +1. Updated Flexberry ORM up to 7.2.0-beta01. ### Fixed 1. Fixed loading of object with crushing of already loaded masters. diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index f8b448ee..5afc0ad2 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 7.2.0-beta01 + 7.2.0-beta02 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -12,6 +12,8 @@ true Flexberry ORM OData Service Package. + Changed + 1. Updated Flexberry ORM up to 7.2.0-beta01. Fixed 1. Fixed loading of object with crushing of already loaded masters. 2. Fixed loading of details. @@ -27,31 +29,31 @@ - + - + - + - + - + From 21c6af6b1b41623febb75501670f98def305f213 Mon Sep 17 00:00:00 2001 From: tosotova Date: Fri, 16 Feb 2024 12:28:36 +0500 Subject: [PATCH 55/77] Added comment for variables --- .../Controllers/DataObjectController.ModifyData.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs index 1b139df9..9b8ce899 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs @@ -50,8 +50,14 @@ public partial class DataObjectController /// private List _removingFileDescriptions = new List(); + /// + /// Кэш типов, у которых одинакового типа детейлы и мастера. + /// private List _typesWithSameDetailAndMaster = new List(); + /// + /// Кэш типов, у которых нет одинакового типа детейлов и мастеров. + /// private List _typesWithNotSameDetailAndMaster = new List(); /// From 166a064186006b74369e15587c22c7c2c542a5c9 Mon Sep 17 00:00:00 2001 From: tosotova Date: Mon, 19 Feb 2024 09:29:01 +0500 Subject: [PATCH 56/77] Changes be CR --- .../CRUD/Update/ModifyDataTest.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs index 67aa9763..66353bfb 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs @@ -1616,6 +1616,7 @@ public void DeletePlainObjectTest() { ActODataService(args => { + // Arrange. // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. Медведь agregator = new Медведь() { МедведьСтрокой = "Agregator" }; args.DataService.UpdateObject(agregator); @@ -1628,9 +1629,11 @@ public void DeletePlainObjectTest() string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, agregator.__PrimaryKey); requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); + // Act. // Обращаемся к OData-сервису и обрабатываем ответ. using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) { + //Assert. // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); @@ -1649,6 +1652,7 @@ public void DeleteObjectWithSameDetailAndMasterEmptyTest() { ActODataService(args => { + // Arrange. // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. AgregatorSameMD agregator = new AgregatorSameMD() { Name = "Agregator" }; args.DataService.UpdateObject(agregator); @@ -1661,9 +1665,11 @@ public void DeleteObjectWithSameDetailAndMasterEmptyTest() string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(AgregatorSameMD)).Name, agregator.__PrimaryKey); requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); + // Act. // Обращаемся к OData-сервису и обрабатываем ответ. using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) { + // Assert. // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); @@ -1675,13 +1681,14 @@ public void DeleteObjectWithSameDetailAndMasterEmptyTest() } /// - /// Осуществляет проверку удаления данных, если детейл и мастер одного типа? но лишь детейл заполнен. + /// Осуществляет проверку удаления данных, если детейл и мастер одного типа, но лишь детейл заполнен. /// [Fact] public void DeleteObjectWithSameDetailAndMasterTest() { ActODataService(args => { + // Arrange. // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. AgregatorSameMD agregator = new AgregatorSameMD() { Name = "Agregator" }; args.DataService.UpdateObject(agregator); @@ -1704,9 +1711,11 @@ public void DeleteObjectWithSameDetailAndMasterTest() string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(AgregatorSameMD)).Name, agregator.__PrimaryKey); requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); + // Act. // Обращаемся к OData-сервису и обрабатываем ответ. using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) { + // Assert. // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); @@ -1725,6 +1734,7 @@ public void DeleteObjectWithSameDetailAndMaster2Test() { ActODataService(args => { + // Arrange. // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. AgregatorSameMD agregator = new AgregatorSameMD() { Name = "Agregator" }; args.DataService.UpdateObject(agregator); @@ -1750,9 +1760,11 @@ public void DeleteObjectWithSameDetailAndMaster2Test() string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(AgregatorSameMD)).Name, agregator.__PrimaryKey); requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); + // Act. // Обращаемся к OData-сервису и обрабатываем ответ. using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) { + // Assert. // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); From 361c3e1982aa02557c4f6f405443ed9ec1901f0a Mon Sep 17 00:00:00 2001 From: inaidanov Date: Wed, 17 Jan 2024 16:23:24 +0500 Subject: [PATCH 57/77] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B3=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20=D0=9C=D0=B5=D0=B4?= =?UTF-8?q?=D0=B2=D0=B5=D0=B4=D1=8F=20=D0=B8=20=D0=91=D0=B5=D1=80=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B8=202024=20=D0=B3=D0=BE=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\200\320\273\320\276\320\263\320\260.cs" | 7 +- ...20\264\320\262\320\265\320\264\321\214.cs" | 1662 +++++++++-------- 2 files changed, 838 insertions(+), 831 deletions(-) diff --git "a/Tests/Objects/\320\221\320\265\321\200\320\273\320\276\320\263\320\260.cs" "b/Tests/Objects/\320\221\320\265\321\200\320\273\320\276\320\263\320\260.cs" index 3467287d..1dd229ac 100644 --- "a/Tests/Objects/\320\221\320\265\321\200\320\273\320\276\320\263\320\260.cs" +++ "b/Tests/Objects/\320\221\320\265\321\200\320\273\320\276\320\263\320\260.cs" @@ -22,7 +22,12 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests /// Берлога. /// // *** Start programmer edit section *** (Берлога CustomAttributes) - + [View("БерлогаDefaultView", new string[] { + "ПолеБС", + "Наименование as \'Наименование\'", + "Комфортность as \'Комфортность\'", + "Заброшена as \'Заброшена\'", + "ПолеБС"})] // *** End programmer edit section *** (Берлога CustomAttributes) [BusinessServer("NewPlatform.Flexberry.ORM.ODataService.Tests.DenBS, NewPlatform.Flexberry.ORM.ODa" + "taService.Tests.BusinessServers", ICSSoft.STORMNET.Business.DataServiceObjectEvents.OnAllEvents)] diff --git "a/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" "b/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" index 870b2994..c379db99 100644 --- "a/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" +++ "b/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" @@ -1,830 +1,832 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using ICSSoft.STORMNET.Business; - using ICSSoft.STORMNET; - using ICSSoft.STORMNET.Business.Audit; - using ICSSoft.STORMNET.Business.Audit.Objects; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// Медведь - ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. - /// - // *** Start programmer edit section *** (Медведь CustomAttributes) - - // *** End programmer edit section *** (Медведь CustomAttributes) - [BusinessServer("NewPlatform.Flexberry.ORM.ODataService.Tests.BearBS, NewPlatform.Flexberry.ORM.OD" + - "ataService.Tests.BusinessServers", ICSSoft.STORMNET.Business.DataServiceObjectEvents.OnAllEvents)] - [AutoAltered()] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - [View("LoadTestView", new string[] { - "ЛесОбитания", - "ЛесОбитания.Заповедник", - "Мама", - "Мама.ЦветГлаз", - "Вес"})] - [AssociatedDetailViewAttribute("LoadTestView", "Берлога", "LoadTestView", true, "", "", true, new string[] { - ""})] - [View("OrderNumberTest", new string[] { - "ПорядковыйНомер", - "ЛесОбитания"})] - [View("МедведьE", new string[] { - "ПорядковыйНомер as \'Порядковый номер\'", - "Вес as \'Вес\'", - "ЦветГлаз as \'Цвет глаз\'", - "Пол as \'Пол\'", - "ДатаРождения as \'Дата рождения\'", - "Мама as \'Мама\'", - "Мама.ЦветГлаз as \'Цвет глаз\'", - "Мама.Вес", - "Папа as \'Папа\'", - "Папа.ЦветГлаз as \'Цвет глаз\'", - "Папа.Вес", - "ЛесОбитания as \'Лес обитания\'", - "ЛесОбитания.Название as \'Название\'", - "ПолеБС", - "СтранаРождения", - "СтранаРождения.Название"})] - [AssociatedDetailViewAttribute("МедведьE", "Берлога", "БерлогаE", true, "", "Берлога", true, new string[] { - ""})] - [View("МедведьL", new string[] { - "ПорядковыйНомер as \'Порядковый номер\'", - "Вес as \'Вес\'", - "ЦветГлаз as \'Цвет глаз\'", - "Пол as \'Пол\'", - "ДатаРождения as \'Дата рождения\'", - "Мама.ЦветГлаз as \'Цвет глаз\'", - "Папа.ЦветГлаз as \'Цвет глаз\'", - "ЛесОбитания.Название as \'Название\'"})] - [View("МедведьShort", new string[] { - "ПорядковыйНомер as \'Порядковый номер\'"})] - [View("МедведьСДелейломИВычислимымСвойством", new string[] { - "ПорядковыйНомер as \'Порядковый номер\'", - "Вес as \'Вес\'", - "ЦветГлаз as \'Цвет глаз\'", - "Пол as \'Пол\'", - "ДатаРождения as \'Дата рождения\'", - "Мама as \'Мама\'", - "Мама.ЦветГлаз as \'Цвет глаз\'", - "Папа as \'Папа\'", - "Папа.ЦветГлаз as \'Цвет глаз\'", - "ЛесОбитания as \'Лес обитания\'", - "ЛесОбитания.Название as \'Название\'", - "МедведьСтрокой"})] - [AssociatedDetailViewAttribute("МедведьСДелейломИВычислимымСвойством", "Берлога", "БерлогаE", true, "", "Берлога", true, new string[] { - ""})] - public class Медведь : ICSSoft.STORMNET.DataObject, IDataObjectWithAuditFields - { - - private int fВес; - - private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fДатаРождения; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.tПол fПол; - - private string fПолеБС; - - private int fПорядковыйНомер; - - private string fЦветГлаз; - - private System.Nullable fCreateTime; - - private string fCreator; - - private string fEditor; - - private System.Nullable fEditTime; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Лес fЛесОбитания; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fМама; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fПапа; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Страна fСтранаРождения; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога fБерлога; - - // *** Start programmer edit section *** (Медведь CustomMembers) - - // *** End programmer edit section *** (Медведь CustomMembers) - - - /// - /// Вес. - /// - // *** Start programmer edit section *** (Медведь.Вес CustomAttributes) - - // *** End programmer edit section *** (Медведь.Вес CustomAttributes) - public virtual int Вес - { - get - { - // *** Start programmer edit section *** (Медведь.Вес Get start) - - // *** End programmer edit section *** (Медведь.Вес Get start) - int result = this.fВес; - // *** Start programmer edit section *** (Медведь.Вес Get end) - - // *** End programmer edit section *** (Медведь.Вес Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Вес Set start) - - // *** End programmer edit section *** (Медведь.Вес Set start) - this.fВес = value; - // *** Start programmer edit section *** (Медведь.Вес Set end) - - // *** End programmer edit section *** (Медведь.Вес Set end) - } - } - - /// - /// ВычислимоеПоле. - /// - // *** Start programmer edit section *** (Медведь.ВычислимоеПоле CustomAttributes) - - // *** End programmer edit section *** (Медведь.ВычислимоеПоле CustomAttributes) - [ICSSoft.STORMNET.NotStored()] - [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "@ПорядковыйНомер@ + @Вес@")] - public virtual int ВычислимоеПоле - { - get - { - // *** Start programmer edit section *** (Медведь.ВычислимоеПоле Get) - return 0; - // *** End programmer edit section *** (Медведь.ВычислимоеПоле Get) - } - set - { - // *** Start programmer edit section *** (Медведь.ВычислимоеПоле Set) - - // *** End programmer edit section *** (Медведь.ВычислимоеПоле Set) - } - } - - /// - /// ДатаРождения. - /// - // *** Start programmer edit section *** (Медведь.ДатаРождения CustomAttributes) - - // *** End programmer edit section *** (Медведь.ДатаРождения CustomAttributes) - public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаРождения - { - get - { - // *** Start programmer edit section *** (Медведь.ДатаРождения Get start) - - // *** End programmer edit section *** (Медведь.ДатаРождения Get start) - ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fДатаРождения; - // *** Start programmer edit section *** (Медведь.ДатаРождения Get end) - - // *** End programmer edit section *** (Медведь.ДатаРождения Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.ДатаРождения Set start) - - // *** End programmer edit section *** (Медведь.ДатаРождения Set start) - this.fДатаРождения = value; - // *** Start programmer edit section *** (Медведь.ДатаРождения Set end) - - // *** End programmer edit section *** (Медведь.ДатаРождения Set end) - } - } - - /// - /// МедведьСтрокой. - /// - // *** Start programmer edit section *** (Медведь.МедведьСтрокой CustomAttributes) - - // *** End programmer edit section *** (Медведь.МедведьСтрокой CustomAttributes) - [ICSSoft.STORMNET.NotStored()] - [StrLen(255)] - [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "\'ПорядковыйНомер:\' + @ПорядковыйНомер@ + \", Цвет глаз мамы:\" + isnull(@Мама.ЦветГ" + - "лаз@,\'\')")] - public virtual string МедведьСтрокой - { - get - { - // *** Start programmer edit section *** (Медведь.МедведьСтрокой Get) - return null; - // *** End programmer edit section *** (Медведь.МедведьСтрокой Get) - } - set - { - // *** Start programmer edit section *** (Медведь.МедведьСтрокой Set) - - // *** End programmer edit section *** (Медведь.МедведьСтрокой Set) - } - } - - /// - /// Пол. - /// - // *** Start programmer edit section *** (Медведь.Пол CustomAttributes) - - // *** End programmer edit section *** (Медведь.Пол CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.tПол Пол - { - get - { - // *** Start programmer edit section *** (Медведь.Пол Get start) - - // *** End programmer edit section *** (Медведь.Пол Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.tПол result = this.fПол; - // *** Start programmer edit section *** (Медведь.Пол Get end) - - // *** End programmer edit section *** (Медведь.Пол Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Пол Set start) - - // *** End programmer edit section *** (Медведь.Пол Set start) - this.fПол = value; - // *** Start programmer edit section *** (Медведь.Пол Set end) - - // *** End programmer edit section *** (Медведь.Пол Set end) - } - } - - /// - /// ПолеБС. - /// - // *** Start programmer edit section *** (Медведь.ПолеБС CustomAttributes) - - // *** End programmer edit section *** (Медведь.ПолеБС CustomAttributes) - [StrLen(255)] - public virtual string ПолеБС - { - get - { - // *** Start programmer edit section *** (Медведь.ПолеБС Get start) - - // *** End programmer edit section *** (Медведь.ПолеБС Get start) - string result = this.fПолеБС; - // *** Start programmer edit section *** (Медведь.ПолеБС Get end) - - // *** End programmer edit section *** (Медведь.ПолеБС Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.ПолеБС Set start) - - // *** End programmer edit section *** (Медведь.ПолеБС Set start) - this.fПолеБС = value; - // *** Start programmer edit section *** (Медведь.ПолеБС Set end) - - // *** End programmer edit section *** (Медведь.ПолеБС Set end) - } - } - - /// - /// ПорядковыйНомер. - /// - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер CustomAttributes) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер CustomAttributes) - public virtual int ПорядковыйНомер - { - get - { - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Get start) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер Get start) - int result = this.fПорядковыйНомер; - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Get end) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Set start) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер Set start) - this.fПорядковыйНомер = value; - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Set end) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер Set end) - } - } - - /// - /// ЦветГлаз. - /// - // *** Start programmer edit section *** (Медведь.ЦветГлаз CustomAttributes) - - // *** End programmer edit section *** (Медведь.ЦветГлаз CustomAttributes) - [StrLen(255)] - public virtual string ЦветГлаз - { - get - { - // *** Start programmer edit section *** (Медведь.ЦветГлаз Get start) - - // *** End programmer edit section *** (Медведь.ЦветГлаз Get start) - string result = this.fЦветГлаз; - // *** Start programmer edit section *** (Медведь.ЦветГлаз Get end) - - // *** End programmer edit section *** (Медведь.ЦветГлаз Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.ЦветГлаз Set start) - - // *** End programmer edit section *** (Медведь.ЦветГлаз Set start) - this.fЦветГлаз = value; - // *** Start programmer edit section *** (Медведь.ЦветГлаз Set end) - - // *** End programmer edit section *** (Медведь.ЦветГлаз Set end) - } - } - - /// - /// Время создания объекта. - /// - // *** Start programmer edit section *** (Медведь.CreateTime CustomAttributes) - - // *** End programmer edit section *** (Медведь.CreateTime CustomAttributes) - public virtual System.Nullable CreateTime - { - get - { - // *** Start programmer edit section *** (Медведь.CreateTime Get start) - - // *** End programmer edit section *** (Медведь.CreateTime Get start) - System.Nullable result = this.fCreateTime; - // *** Start programmer edit section *** (Медведь.CreateTime Get end) - - // *** End programmer edit section *** (Медведь.CreateTime Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.CreateTime Set start) - - // *** End programmer edit section *** (Медведь.CreateTime Set start) - this.fCreateTime = value; - // *** Start programmer edit section *** (Медведь.CreateTime Set end) - - // *** End programmer edit section *** (Медведь.CreateTime Set end) - } - } - - /// - /// Создатель объекта. - /// - // *** Start programmer edit section *** (Медведь.Creator CustomAttributes) - - // *** End programmer edit section *** (Медведь.Creator CustomAttributes) - [StrLen(255)] - public virtual string Creator - { - get - { - // *** Start programmer edit section *** (Медведь.Creator Get start) - - // *** End programmer edit section *** (Медведь.Creator Get start) - string result = this.fCreator; - // *** Start programmer edit section *** (Медведь.Creator Get end) - - // *** End programmer edit section *** (Медведь.Creator Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Creator Set start) - - // *** End programmer edit section *** (Медведь.Creator Set start) - this.fCreator = value; - // *** Start programmer edit section *** (Медведь.Creator Set end) - - // *** End programmer edit section *** (Медведь.Creator Set end) - } - } - - /// - /// Последний редактор объекта. - /// - // *** Start programmer edit section *** (Медведь.Editor CustomAttributes) - - // *** End programmer edit section *** (Медведь.Editor CustomAttributes) - [StrLen(255)] - public virtual string Editor - { - get - { - // *** Start programmer edit section *** (Медведь.Editor Get start) - - // *** End programmer edit section *** (Медведь.Editor Get start) - string result = this.fEditor; - // *** Start programmer edit section *** (Медведь.Editor Get end) - - // *** End programmer edit section *** (Медведь.Editor Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Editor Set start) - - // *** End programmer edit section *** (Медведь.Editor Set start) - this.fEditor = value; - // *** Start programmer edit section *** (Медведь.Editor Set end) - - // *** End programmer edit section *** (Медведь.Editor Set end) - } - } - - /// - /// Время последнего редактирования объекта. - /// - // *** Start programmer edit section *** (Медведь.EditTime CustomAttributes) - - // *** End programmer edit section *** (Медведь.EditTime CustomAttributes) - public virtual System.Nullable EditTime - { - get - { - // *** Start programmer edit section *** (Медведь.EditTime Get start) - - // *** End programmer edit section *** (Медведь.EditTime Get start) - System.Nullable result = this.fEditTime; - // *** Start programmer edit section *** (Медведь.EditTime Get end) - - // *** End programmer edit section *** (Медведь.EditTime Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.EditTime Set start) - - // *** End programmer edit section *** (Медведь.EditTime Set start) - this.fEditTime = value; - // *** Start programmer edit section *** (Медведь.EditTime Set end) - - // *** End programmer edit section *** (Медведь.EditTime Set end) - } - } - - /// - /// Медведь - ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. - /// - // *** Start programmer edit section *** (Медведь.ЛесОбитания CustomAttributes) - - // *** End programmer edit section *** (Медведь.ЛесОбитания CustomAttributes) - [PropertyStorage(new string[] { - "ЛесОбитания"})] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Лес ЛесОбитания - { - get - { - // *** Start programmer edit section *** (Медведь.ЛесОбитания Get start) - - // *** End programmer edit section *** (Медведь.ЛесОбитания Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Лес result = this.fЛесОбитания; - // *** Start programmer edit section *** (Медведь.ЛесОбитания Get end) - - // *** End programmer edit section *** (Медведь.ЛесОбитания Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.ЛесОбитания Set start) - - // *** End programmer edit section *** (Медведь.ЛесОбитания Set start) - this.fЛесОбитания = value; - // *** Start programmer edit section *** (Медведь.ЛесОбитания Set end) - - // *** End programmer edit section *** (Медведь.ЛесОбитания Set end) - } - } - - /// - /// Медведь - ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. - /// - // *** Start programmer edit section *** (Медведь.Мама CustomAttributes) - - // *** End programmer edit section *** (Медведь.Мама CustomAttributes) - [PropertyStorage(new string[] { - "Мама"})] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь Мама - { - get - { - // *** Start programmer edit section *** (Медведь.Мама Get start) - - // *** End programmer edit section *** (Медведь.Мама Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь result = this.fМама; - // *** Start programmer edit section *** (Медведь.Мама Get end) - - // *** End programmer edit section *** (Медведь.Мама Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Мама Set start) - - // *** End programmer edit section *** (Медведь.Мама Set start) - this.fМама = value; - // *** Start programmer edit section *** (Медведь.Мама Set end) - - // *** End programmer edit section *** (Медведь.Мама Set end) - } - } - - /// - /// Медведь - ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. - /// - // *** Start programmer edit section *** (Медведь.Папа CustomAttributes) - - // *** End programmer edit section *** (Медведь.Папа CustomAttributes) - [PropertyStorage(new string[] { - "Папа"})] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь Папа - { - get - { - // *** Start programmer edit section *** (Медведь.Папа Get start) - - // *** End programmer edit section *** (Медведь.Папа Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь result = this.fПапа; - // *** Start programmer edit section *** (Медведь.Папа Get end) - - // *** End programmer edit section *** (Медведь.Папа Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Папа Set start) - - // *** End programmer edit section *** (Медведь.Папа Set start) - this.fПапа = value; - // *** Start programmer edit section *** (Медведь.Папа Set end) - - // *** End programmer edit section *** (Медведь.Папа Set end) - } - } - - /// - /// Медведь - ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. - /// - // *** Start programmer edit section *** (Медведь.СтранаРождения CustomAttributes) - - // *** End programmer edit section *** (Медведь.СтранаРождения CustomAttributes) - [PropertyStorage(new string[] { - "Страна"})] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Страна СтранаРождения - { - get - { - // *** Start programmer edit section *** (Медведь.СтранаРождения Get start) - - // *** End programmer edit section *** (Медведь.СтранаРождения Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Страна result = this.fСтранаРождения; - // *** Start programmer edit section *** (Медведь.СтранаРождения Get end) - - // *** End programmer edit section *** (Медведь.СтранаРождения Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.СтранаРождения Set start) - - // *** End programmer edit section *** (Медведь.СтранаРождения Set start) - this.fСтранаРождения = value; - // *** Start programmer edit section *** (Медведь.СтранаРождения Set end) - - // *** End programmer edit section *** (Медведь.СтранаРождения Set end) - } - } - - /// - /// Медведь - ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. - /// - // *** Start programmer edit section *** (Медведь.Берлога CustomAttributes) - - // *** End programmer edit section *** (Медведь.Берлога CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога Берлога - { - get - { - // *** Start programmer edit section *** (Медведь.Берлога Get start) - - // *** End programmer edit section *** (Медведь.Берлога Get start) - if ((this.fБерлога == null)) - { - this.fБерлога = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога(this); - } - NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога result = this.fБерлога; - // *** Start programmer edit section *** (Медведь.Берлога Get end) - - // *** End programmer edit section *** (Медведь.Берлога Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Берлога Set start) - - // *** End programmer edit section *** (Медведь.Берлога Set start) - this.fБерлога = value; - // *** Start programmer edit section *** (Медведь.Берлога Set end) - - // *** End programmer edit section *** (Медведь.Берлога Set end) - } - } - - /// - /// Class views container. - /// - public class Views - { - - /// - /// Представление для работы тестов на загрузку объектов. - /// - public static ICSSoft.STORMNET.View LoadTestView - { - get - { - return ICSSoft.STORMNET.Information.GetView("LoadTestView", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - - /// - /// Представление для работы теста по использованию порядкового номера. - /// - public static ICSSoft.STORMNET.View OrderNumberTest - { - get - { - return ICSSoft.STORMNET.Information.GetView("OrderNumberTest", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - - /// - /// "МедведьE" view. - /// - public static ICSSoft.STORMNET.View МедведьE - { - get - { - return ICSSoft.STORMNET.Information.GetView("МедведьE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - - /// - /// "МедведьL" view. - /// - public static ICSSoft.STORMNET.View МедведьL - { - get - { - return ICSSoft.STORMNET.Information.GetView("МедведьL", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - - /// - /// "МедведьShort" view. - /// - public static ICSSoft.STORMNET.View МедведьShort - { - get - { - return ICSSoft.STORMNET.Information.GetView("МедведьShort", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - - /// - /// "МедведьСДелейломИВычислимымСвойством" view. - /// - public static ICSSoft.STORMNET.View МедведьСДелейломИВычислимымСвойством - { - get - { - return ICSSoft.STORMNET.Information.GetView("МедведьСДелейломИВычислимымСвойством", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - } - - /// - /// Audit class settings. - /// - public class AuditSettings - { - - /// - /// Включён ли аудит для класса. - /// - public static bool AuditEnabled = true; - - /// - /// Использовать имя представления для аудита по умолчанию. - /// - public static bool UseDefaultView = true; - - /// - /// Включён ли аудит операции чтения. - /// - public static bool SelectAudit = true; - - /// - /// Имя представления для аудирования операции чтения. - /// - public static string SelectAuditViewName = "AuditView"; - - /// - /// Включён ли аудит операции создания. - /// - public static bool InsertAudit = true; - - /// - /// Имя представления для аудирования операции создания. - /// - public static string InsertAuditViewName = "AuditView"; - - /// - /// Включён ли аудит операции изменения. - /// - public static bool UpdateAudit = true; - - /// - /// Имя представления для аудирования операции изменения. - /// - public static string UpdateAuditViewName = "AuditView"; - - /// - /// Включён ли аудит операции удаления. - /// - public static bool DeleteAudit = true; - - /// - /// Имя представления для аудирования операции удаления. - /// - public static string DeleteAuditViewName = "AuditView"; - - /// - /// Путь к форме просмотра результатов аудита. - /// - public static string FormUrl = ""; - - /// - /// Режим записи данных аудита (синхронный или асинхронный). - /// - public static ICSSoft.STORMNET.Business.Audit.Objects.tWriteMode WriteMode = ICSSoft.STORMNET.Business.Audit.Objects.tWriteMode.Synchronous; - - /// - /// Максимальная длина сохраняемого значения поля (если 0, то строка обрезаться не будет). - /// - public static int PrunningLength = 0; - - /// - /// Показывать ли пользователям в изменениях первичные ключи. - /// - public static bool ShowPrimaryKey = false; - - /// - /// Сохранять ли старое значение. - /// - public static bool KeepOldValue = true; - - /// - /// Сжимать ли сохраняемые значения. - /// - public static bool Compress = false; - - /// - /// Сохранять ли все значения атрибутов, а не только изменяемые. - /// - public static bool KeepAllValues = false; - } - } -} - +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET.Business; + using ICSSoft.STORMNET; + using ICSSoft.STORMNET.Business.Audit; + using ICSSoft.STORMNET.Business.Audit.Objects; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// Медведь + ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. + /// + // *** Start programmer edit section *** (Медведь CustomAttributes) + + // *** End programmer edit section *** (Медведь CustomAttributes) + [BusinessServer("NewPlatform.Flexberry.ORM.ODataService.Tests.BearBS, NewPlatform.Flexberry.ORM.OD" + + "ataService.Tests.BusinessServers", ICSSoft.STORMNET.Business.DataServiceObjectEvents.OnAllEvents)] + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + [View("LoadTestView", new string[] { + "ЛесОбитания", + "ЛесОбитания.Заповедник", + "Мама", + "Мама.ЦветГлаз", + "Вес"})] + [AssociatedDetailViewAttribute("LoadTestView", "Берлога", "LoadTestView", true, "", "", true, new string[] { + ""})] + [View("OrderNumberTest", new string[] { + "ПорядковыйНомер", + "ЛесОбитания"})] + [View("МедведьE", new string[] { + "ПорядковыйНомер as \'Порядковый номер\'", + "Вес as \'Вес\'", + "ЦветГлаз as \'Цвет глаз\'", + "Пол as \'Пол\'", + "ДатаРождения as \'Дата рождения\'", + "Мама as \'Мама\'", + "Мама.ЦветГлаз as \'Цвет глаз\'", + "Мама.Вес", + "Папа as \'Папа\'", + "Папа.ЦветГлаз as \'Цвет глаз\'", + "Папа.Вес", + "ЛесОбитания as \'Лес обитания\'", + "ЛесОбитания.Название as \'Название\'", + "ПолеБС", + "СтранаРождения", + "СтранаРождения.Название"})] + [AssociatedDetailViewAttribute("МедведьE", "Берлога", "БерлогаE", true, "", "Берлога", true, new string[] { + ""})] + [View("МедведьL", new string[] { + "ПорядковыйНомер as \'Порядковый номер\'", + "Вес as \'Вес\'", + "ЦветГлаз as \'Цвет глаз\'", + "Пол as \'Пол\'", + "ДатаРождения as \'Дата рождения\'", + "Мама.ЦветГлаз as \'Цвет глаз\'", + "Папа.ЦветГлаз as \'Цвет глаз\'", + "ЛесОбитания.Название as \'Название\'"})] + [View("МедведьShort", new string[] { + "ПорядковыйНомер as \'Порядковый номер\'"})] + [View("МедведьСДелейломИВычислимымСвойством", new string[] { + "ПорядковыйНомер as \'Порядковый номер\'", + "Вес as \'Вес\'", + "ЦветГлаз as \'Цвет глаз\'", + "Пол as \'Пол\'", + "ДатаРождения as \'Дата рождения\'", + "Мама as \'Мама\'", + "Мама.ЦветГлаз as \'Цвет глаз\'", + "Папа as \'Папа\'", + "Папа.ЦветГлаз as \'Цвет глаз\'", + "ЛесОбитания as \'Лес обитания\'", + "ЛесОбитания.Название as \'Название\'", + "МедведьСтрокой"})] + [AssociatedDetailViewAttribute("МедведьСДелейломИВычислимымСвойством", "Берлога", "БерлогаE", true, "", "Берлога", true, new string[] { + ""})] + public class Медведь : ICSSoft.STORMNET.DataObject, IDataObjectWithAuditFields + { + + private int fВес; + + private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fДатаРождения; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.tПол fПол; + + private string fПолеБС; + + private int fПорядковыйНомер; + + private string fЦветГлаз; + + private System.Nullable fCreateTime; + + private string fCreator; + + private string fEditor; + + private System.Nullable fEditTime; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Лес fЛесОбитания; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fМама; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fПапа; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Страна fСтранаРождения; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога fБерлога; + + // *** Start programmer edit section *** (Медведь CustomMembers) + + // *** End programmer edit section *** (Медведь CustomMembers) + + + /// + /// Вес. + /// + // *** Start programmer edit section *** (Медведь.Вес CustomAttributes) + + // *** End programmer edit section *** (Медведь.Вес CustomAttributes) + public virtual int Вес + { + get + { + // *** Start programmer edit section *** (Медведь.Вес Get start) + + // *** End programmer edit section *** (Медведь.Вес Get start) + int result = this.fВес; + // *** Start programmer edit section *** (Медведь.Вес Get end) + + // *** End programmer edit section *** (Медведь.Вес Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Вес Set start) + + // *** End programmer edit section *** (Медведь.Вес Set start) + this.fВес = value; + // *** Start programmer edit section *** (Медведь.Вес Set end) + + // *** End programmer edit section *** (Медведь.Вес Set end) + } + } + + /// + /// ВычислимоеПоле. + /// + // *** Start programmer edit section *** (Медведь.ВычислимоеПоле CustomAttributes) + + // *** End programmer edit section *** (Медведь.ВычислимоеПоле CustomAttributes) + [ICSSoft.STORMNET.NotStored()] + [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "@ПорядковыйНомер@ + @Вес@")] + public virtual int ВычислимоеПоле + { + get + { + // *** Start programmer edit section *** (Медведь.ВычислимоеПоле Get) + return 0; + // *** End programmer edit section *** (Медведь.ВычислимоеПоле Get) + } + set + { + // *** Start programmer edit section *** (Медведь.ВычислимоеПоле Set) + + // *** End programmer edit section *** (Медведь.ВычислимоеПоле Set) + } + } + + /// + /// ДатаРождения. + /// + // *** Start programmer edit section *** (Медведь.ДатаРождения CustomAttributes) + + // *** End programmer edit section *** (Медведь.ДатаРождения CustomAttributes) + public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаРождения + { + get + { + // *** Start programmer edit section *** (Медведь.ДатаРождения Get start) + + // *** End programmer edit section *** (Медведь.ДатаРождения Get start) + ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fДатаРождения; + // *** Start programmer edit section *** (Медведь.ДатаРождения Get end) + + // *** End programmer edit section *** (Медведь.ДатаРождения Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.ДатаРождения Set start) + + // *** End programmer edit section *** (Медведь.ДатаРождения Set start) + this.fДатаРождения = value; + // *** Start programmer edit section *** (Медведь.ДатаРождения Set end) + + // *** End programmer edit section *** (Медведь.ДатаРождения Set end) + } + } + + /// + /// МедведьСтрокой. + /// + // *** Start programmer edit section *** (Медведь.МедведьСтрокой CustomAttributes) + + // *** End programmer edit section *** (Медведь.МедведьСтрокой CustomAttributes) + [ICSSoft.STORMNET.NotStored()] + [StrLen(255)] + [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "\'ПорядковыйНомер:\' + @ПорядковыйНомер@ + \", Цвет глаз мамы:\" + isnull(@Мама.ЦветГ" + + "лаз@,\'\')")] + [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.PostgresDataService), "\'ПорядковыйНомер:\' || @ПорядковыйНомер@ || \", Цвет глаз мамы:\" || coalesce(@Мама.ЦветГ" + + "лаз@,\'\')")] + public virtual string МедведьСтрокой + { + get + { + // *** Start programmer edit section *** (Медведь.МедведьСтрокой Get) + return null; + // *** End programmer edit section *** (Медведь.МедведьСтрокой Get) + } + set + { + // *** Start programmer edit section *** (Медведь.МедведьСтрокой Set) + + // *** End programmer edit section *** (Медведь.МедведьСтрокой Set) + } + } + + /// + /// Пол. + /// + // *** Start programmer edit section *** (Медведь.Пол CustomAttributes) + + // *** End programmer edit section *** (Медведь.Пол CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.tПол Пол + { + get + { + // *** Start programmer edit section *** (Медведь.Пол Get start) + + // *** End programmer edit section *** (Медведь.Пол Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.tПол result = this.fПол; + // *** Start programmer edit section *** (Медведь.Пол Get end) + + // *** End programmer edit section *** (Медведь.Пол Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Пол Set start) + + // *** End programmer edit section *** (Медведь.Пол Set start) + this.fПол = value; + // *** Start programmer edit section *** (Медведь.Пол Set end) + + // *** End programmer edit section *** (Медведь.Пол Set end) + } + } + + /// + /// ПолеБС. + /// + // *** Start programmer edit section *** (Медведь.ПолеБС CustomAttributes) + + // *** End programmer edit section *** (Медведь.ПолеБС CustomAttributes) + [StrLen(255)] + public virtual string ПолеБС + { + get + { + // *** Start programmer edit section *** (Медведь.ПолеБС Get start) + + // *** End programmer edit section *** (Медведь.ПолеБС Get start) + string result = this.fПолеБС; + // *** Start programmer edit section *** (Медведь.ПолеБС Get end) + + // *** End programmer edit section *** (Медведь.ПолеБС Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.ПолеБС Set start) + + // *** End programmer edit section *** (Медведь.ПолеБС Set start) + this.fПолеБС = value; + // *** Start programmer edit section *** (Медведь.ПолеБС Set end) + + // *** End programmer edit section *** (Медведь.ПолеБС Set end) + } + } + + /// + /// ПорядковыйНомер. + /// + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер CustomAttributes) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер CustomAttributes) + public virtual int ПорядковыйНомер + { + get + { + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Get start) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер Get start) + int result = this.fПорядковыйНомер; + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Get end) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Set start) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер Set start) + this.fПорядковыйНомер = value; + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Set end) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер Set end) + } + } + + /// + /// ЦветГлаз. + /// + // *** Start programmer edit section *** (Медведь.ЦветГлаз CustomAttributes) + + // *** End programmer edit section *** (Медведь.ЦветГлаз CustomAttributes) + [StrLen(255)] + public virtual string ЦветГлаз + { + get + { + // *** Start programmer edit section *** (Медведь.ЦветГлаз Get start) + + // *** End programmer edit section *** (Медведь.ЦветГлаз Get start) + string result = this.fЦветГлаз; + // *** Start programmer edit section *** (Медведь.ЦветГлаз Get end) + + // *** End programmer edit section *** (Медведь.ЦветГлаз Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.ЦветГлаз Set start) + + // *** End programmer edit section *** (Медведь.ЦветГлаз Set start) + this.fЦветГлаз = value; + // *** Start programmer edit section *** (Медведь.ЦветГлаз Set end) + + // *** End programmer edit section *** (Медведь.ЦветГлаз Set end) + } + } + + /// + /// Время создания объекта. + /// + // *** Start programmer edit section *** (Медведь.CreateTime CustomAttributes) + + // *** End programmer edit section *** (Медведь.CreateTime CustomAttributes) + public virtual System.Nullable CreateTime + { + get + { + // *** Start programmer edit section *** (Медведь.CreateTime Get start) + + // *** End programmer edit section *** (Медведь.CreateTime Get start) + System.Nullable result = this.fCreateTime; + // *** Start programmer edit section *** (Медведь.CreateTime Get end) + + // *** End programmer edit section *** (Медведь.CreateTime Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.CreateTime Set start) + + // *** End programmer edit section *** (Медведь.CreateTime Set start) + this.fCreateTime = value; + // *** Start programmer edit section *** (Медведь.CreateTime Set end) + + // *** End programmer edit section *** (Медведь.CreateTime Set end) + } + } + + /// + /// Создатель объекта. + /// + // *** Start programmer edit section *** (Медведь.Creator CustomAttributes) + + // *** End programmer edit section *** (Медведь.Creator CustomAttributes) + [StrLen(255)] + public virtual string Creator + { + get + { + // *** Start programmer edit section *** (Медведь.Creator Get start) + + // *** End programmer edit section *** (Медведь.Creator Get start) + string result = this.fCreator; + // *** Start programmer edit section *** (Медведь.Creator Get end) + + // *** End programmer edit section *** (Медведь.Creator Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Creator Set start) + + // *** End programmer edit section *** (Медведь.Creator Set start) + this.fCreator = value; + // *** Start programmer edit section *** (Медведь.Creator Set end) + + // *** End programmer edit section *** (Медведь.Creator Set end) + } + } + + /// + /// Последний редактор объекта. + /// + // *** Start programmer edit section *** (Медведь.Editor CustomAttributes) + + // *** End programmer edit section *** (Медведь.Editor CustomAttributes) + [StrLen(255)] + public virtual string Editor + { + get + { + // *** Start programmer edit section *** (Медведь.Editor Get start) + + // *** End programmer edit section *** (Медведь.Editor Get start) + string result = this.fEditor; + // *** Start programmer edit section *** (Медведь.Editor Get end) + + // *** End programmer edit section *** (Медведь.Editor Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Editor Set start) + + // *** End programmer edit section *** (Медведь.Editor Set start) + this.fEditor = value; + // *** Start programmer edit section *** (Медведь.Editor Set end) + + // *** End programmer edit section *** (Медведь.Editor Set end) + } + } + + /// + /// Время последнего редактирования объекта. + /// + // *** Start programmer edit section *** (Медведь.EditTime CustomAttributes) + + // *** End programmer edit section *** (Медведь.EditTime CustomAttributes) + public virtual System.Nullable EditTime + { + get + { + // *** Start programmer edit section *** (Медведь.EditTime Get start) + + // *** End programmer edit section *** (Медведь.EditTime Get start) + System.Nullable result = this.fEditTime; + // *** Start programmer edit section *** (Медведь.EditTime Get end) + + // *** End programmer edit section *** (Медведь.EditTime Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.EditTime Set start) + + // *** End programmer edit section *** (Медведь.EditTime Set start) + this.fEditTime = value; + // *** Start programmer edit section *** (Медведь.EditTime Set end) + + // *** End programmer edit section *** (Медведь.EditTime Set end) + } + } + + /// + /// Медведь + ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. + /// + // *** Start programmer edit section *** (Медведь.ЛесОбитания CustomAttributes) + + // *** End programmer edit section *** (Медведь.ЛесОбитания CustomAttributes) + [PropertyStorage(new string[] { + "ЛесОбитания"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Лес ЛесОбитания + { + get + { + // *** Start programmer edit section *** (Медведь.ЛесОбитания Get start) + + // *** End programmer edit section *** (Медведь.ЛесОбитания Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Лес result = this.fЛесОбитания; + // *** Start programmer edit section *** (Медведь.ЛесОбитания Get end) + + // *** End programmer edit section *** (Медведь.ЛесОбитания Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.ЛесОбитания Set start) + + // *** End programmer edit section *** (Медведь.ЛесОбитания Set start) + this.fЛесОбитания = value; + // *** Start programmer edit section *** (Медведь.ЛесОбитания Set end) + + // *** End programmer edit section *** (Медведь.ЛесОбитания Set end) + } + } + + /// + /// Медведь + ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. + /// + // *** Start programmer edit section *** (Медведь.Мама CustomAttributes) + + // *** End programmer edit section *** (Медведь.Мама CustomAttributes) + [PropertyStorage(new string[] { + "Мама"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь Мама + { + get + { + // *** Start programmer edit section *** (Медведь.Мама Get start) + + // *** End programmer edit section *** (Медведь.Мама Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь result = this.fМама; + // *** Start programmer edit section *** (Медведь.Мама Get end) + + // *** End programmer edit section *** (Медведь.Мама Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Мама Set start) + + // *** End programmer edit section *** (Медведь.Мама Set start) + this.fМама = value; + // *** Start programmer edit section *** (Медведь.Мама Set end) + + // *** End programmer edit section *** (Медведь.Мама Set end) + } + } + + /// + /// Медведь + ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. + /// + // *** Start programmer edit section *** (Медведь.Папа CustomAttributes) + + // *** End programmer edit section *** (Медведь.Папа CustomAttributes) + [PropertyStorage(new string[] { + "Папа"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь Папа + { + get + { + // *** Start programmer edit section *** (Медведь.Папа Get start) + + // *** End programmer edit section *** (Медведь.Папа Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь result = this.fПапа; + // *** Start programmer edit section *** (Медведь.Папа Get end) + + // *** End programmer edit section *** (Медведь.Папа Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Папа Set start) + + // *** End programmer edit section *** (Медведь.Папа Set start) + this.fПапа = value; + // *** Start programmer edit section *** (Медведь.Папа Set end) + + // *** End programmer edit section *** (Медведь.Папа Set end) + } + } + + /// + /// Медведь + ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. + /// + // *** Start programmer edit section *** (Медведь.СтранаРождения CustomAttributes) + + // *** End programmer edit section *** (Медведь.СтранаРождения CustomAttributes) + [PropertyStorage(new string[] { + "Страна"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Страна СтранаРождения + { + get + { + // *** Start programmer edit section *** (Медведь.СтранаРождения Get start) + + // *** End programmer edit section *** (Медведь.СтранаРождения Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Страна result = this.fСтранаРождения; + // *** Start programmer edit section *** (Медведь.СтранаРождения Get end) + + // *** End programmer edit section *** (Медведь.СтранаРождения Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.СтранаРождения Set start) + + // *** End programmer edit section *** (Медведь.СтранаРождения Set start) + this.fСтранаРождения = value; + // *** Start programmer edit section *** (Медведь.СтранаРождения Set end) + + // *** End programmer edit section *** (Медведь.СтранаРождения Set end) + } + } + + /// + /// Медведь + ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. + /// + // *** Start programmer edit section *** (Медведь.Берлога CustomAttributes) + + // *** End programmer edit section *** (Медведь.Берлога CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога Берлога + { + get + { + // *** Start programmer edit section *** (Медведь.Берлога Get start) + + // *** End programmer edit section *** (Медведь.Берлога Get start) + if ((this.fБерлога == null)) + { + this.fБерлога = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога(this); + } + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога result = this.fБерлога; + // *** Start programmer edit section *** (Медведь.Берлога Get end) + + // *** End programmer edit section *** (Медведь.Берлога Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Берлога Set start) + + // *** End programmer edit section *** (Медведь.Берлога Set start) + this.fБерлога = value; + // *** Start programmer edit section *** (Медведь.Берлога Set end) + + // *** End programmer edit section *** (Медведь.Берлога Set end) + } + } + + /// + /// Class views container. + /// + public class Views + { + + /// + /// Представление для работы тестов на загрузку объектов. + /// + public static ICSSoft.STORMNET.View LoadTestView + { + get + { + return ICSSoft.STORMNET.Information.GetView("LoadTestView", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + + /// + /// Представление для работы теста по использованию порядкового номера. + /// + public static ICSSoft.STORMNET.View OrderNumberTest + { + get + { + return ICSSoft.STORMNET.Information.GetView("OrderNumberTest", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + + /// + /// "МедведьE" view. + /// + public static ICSSoft.STORMNET.View МедведьE + { + get + { + return ICSSoft.STORMNET.Information.GetView("МедведьE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + + /// + /// "МедведьL" view. + /// + public static ICSSoft.STORMNET.View МедведьL + { + get + { + return ICSSoft.STORMNET.Information.GetView("МедведьL", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + + /// + /// "МедведьShort" view. + /// + public static ICSSoft.STORMNET.View МедведьShort + { + get + { + return ICSSoft.STORMNET.Information.GetView("МедведьShort", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + + /// + /// "МедведьСДелейломИВычислимымСвойством" view. + /// + public static ICSSoft.STORMNET.View МедведьСДелейломИВычислимымСвойством + { + get + { + return ICSSoft.STORMNET.Information.GetView("МедведьСДелейломИВычислимымСвойством", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + } + + /// + /// Audit class settings. + /// + public class AuditSettings + { + + /// + /// Включён ли аудит для класса. + /// + public static bool AuditEnabled = true; + + /// + /// Использовать имя представления для аудита по умолчанию. + /// + public static bool UseDefaultView = true; + + /// + /// Включён ли аудит операции чтения. + /// + public static bool SelectAudit = true; + + /// + /// Имя представления для аудирования операции чтения. + /// + public static string SelectAuditViewName = "AuditView"; + + /// + /// Включён ли аудит операции создания. + /// + public static bool InsertAudit = true; + + /// + /// Имя представления для аудирования операции создания. + /// + public static string InsertAuditViewName = "AuditView"; + + /// + /// Включён ли аудит операции изменения. + /// + public static bool UpdateAudit = true; + + /// + /// Имя представления для аудирования операции изменения. + /// + public static string UpdateAuditViewName = "AuditView"; + + /// + /// Включён ли аудит операции удаления. + /// + public static bool DeleteAudit = true; + + /// + /// Имя представления для аудирования операции удаления. + /// + public static string DeleteAuditViewName = "AuditView"; + + /// + /// Путь к форме просмотра результатов аудита. + /// + public static string FormUrl = ""; + + /// + /// Режим записи данных аудита (синхронный или асинхронный). + /// + public static ICSSoft.STORMNET.Business.Audit.Objects.tWriteMode WriteMode = ICSSoft.STORMNET.Business.Audit.Objects.tWriteMode.Synchronous; + + /// + /// Максимальная длина сохраняемого значения поля (если 0, то строка обрезаться не будет). + /// + public static int PrunningLength = 0; + + /// + /// Показывать ли пользователям в изменениях первичные ключи. + /// + public static bool ShowPrimaryKey = false; + + /// + /// Сохранять ли старое значение. + /// + public static bool KeepOldValue = true; + + /// + /// Сжимать ли сохраняемые значения. + /// + public static bool Compress = false; + + /// + /// Сохранять ли все значения атрибутов, а не только изменяемые. + /// + public static bool KeepAllValues = false; + } + } +} + From 252324d906f2f74182b37f4ec005a36fc4e0fec9 Mon Sep 17 00:00:00 2001 From: inaidanov Date: Tue, 23 Jan 2024 11:08:04 +0500 Subject: [PATCH 58/77] =?UTF-8?q?=D0=92=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20UpdateView=20+=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataObjectController.ModifyData.cs | 2160 +++++----- .../Extensions/DataServiceExtensions.cs | 31 + .../Model/DataObjectEdmModel.cs | 33 +- .../Model/DataObjectEdmTypeSettings.cs | 5 + .../Model/DefaultDataObjectEdmModelBuilder.cs | 72 +- .../CRUD/Update/ModifyDataTest.cs | 3703 +++++++++-------- .../CRUD/Update/UpdateViewsTest.cs | 77 + ...tform.Flexberry.ORM.ODataService.Tests.crp | 2666 ++++++------ .../Helpers/ODataHelper.cs | 47 + .../Startups/UpdateViewsTestStartup.cs | 76 + ...21\200\320\273\320\276\320\263\320\260.cs" | 18 +- ...20\264\320\262\320\265\320\264\321\214.cs" | 18 + 12 files changed, 4713 insertions(+), 4193 deletions(-) create mode 100644 Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs create mode 100644 Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Helpers/ODataHelper.cs create mode 100644 Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startups/UpdateViewsTestStartup.cs diff --git a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs index 9b8ce899..fd604103 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs @@ -1,1078 +1,1082 @@ -namespace NewPlatform.Flexberry.ORM.ODataService.Controllers -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Net; - using System.Net.Http; - using System.Text; - using ICSSoft.STORMNET; - using ICSSoft.STORMNET.Business; - using ICSSoft.STORMNET.FunctionalLanguage; - using Microsoft.AspNet.OData; - using Microsoft.OData.Edm; - using NewPlatform.Flexberry.ORM.ODataService.Batch; - using NewPlatform.Flexberry.ORM.ODataService.Extensions; - using NewPlatform.Flexberry.ORM.ODataService.Files; - using NewPlatform.Flexberry.ORM.ODataService.Files.Providers; - using NewPlatform.Flexberry.ORM.ODataService.Formatter; - using Newtonsoft.Json; - using File = ICSSoft.STORMNET.FileType.File; - using KeySegment = Microsoft.OData.UriParser.KeySegment; - -#if NETFRAMEWORK - using System.Net.Http.Formatting; - using System.Web.Http; - using System.Web.Http.Results; - using System.Web.Http.Validation; - using NewPlatform.Flexberry.ORM.ODataService.Events; - using NewPlatform.Flexberry.ORM.ODataService.Handlers; -#endif -#if NETSTANDARD - using Microsoft.AspNet.OData.Formatter; - using Microsoft.AspNetCore.Http; - using Microsoft.AspNetCore.Mvc; - using Microsoft.AspNetCore.Mvc.Formatters; - using Microsoft.Extensions.Primitives; - using NewPlatform.Flexberry.ORM.ODataService.Middleware; -#endif - - /// - /// Определяет класс контроллера OData, который поддерживает запись и чтение данных с использованием OData формата. - /// - public partial class DataObjectController - { - /// - /// Метаданные файлов, временно загруженных в каталог файлового хранилища и привязанных к свойствам обрабатываемых объектов данных. - /// Файлы будут удалены из файловой системы - /// в случае успешного сохранения объектов данных. - /// - private List _removingFileDescriptions = new List(); - - /// - /// Кэш типов, у которых одинакового типа детейлы и мастера. - /// - private List _typesWithSameDetailAndMaster = new List(); - - /// - /// Кэш типов, у которых нет одинакового типа детейлов и мастеров. - /// - private List _typesWithNotSameDetailAndMaster = new List(); - - /// - /// Создание сущности и всех связанных. При существовании в БД произойдёт обновление. - /// - /// Создаваемая сущность. - /// Созданная сущность. -#if NETFRAMEWORK - public HttpResponseMessage Post([FromBody] EdmEntityObject edmEntity) -#elif NETSTANDARD - public IActionResult Post([FromBody] EdmEntityObject edmEntity) -#endif - { - try - { - if (edmEntity == null) - { - edmEntity = ReplaceOdataBindNull(); - } - - DataObject obj = UpdateObject(edmEntity, null); - ExecuteCallbackAfterCreate(obj); - - edmEntity = GetEdmObject(_model.GetEdmEntityType(type), obj, 1, null, null); - var responseForPreferMinimal = TestPreferMinimal(); - if (responseForPreferMinimal != null) - { - return responseForPreferMinimal; - } - -#if NETFRAMEWORK - var result = Request.CreateResponse(HttpStatusCode.Created, edmEntity); - if (Request.Headers.Contains("Prefer")) - { - result.Headers.Add("Preference-Applied", "return=representation"); - } -#elif NETSTANDARD - var result = new ObjectResult(edmEntity) { StatusCode = StatusCodes.Status201Created }; - if (Request.Headers.ContainsKey("Prefer")) - { - Response.Headers.Add("Preference-Applied", "return=representation"); - } -#endif - - return result; - } - catch (Exception ex) - { -#if NETFRAMEWORK - return InternalServerErrorMessage(ex); -#elif NETSTANDARD - throw CustomException(ex); -#endif - } - } - - /// - /// Обновление сущности (свойства могут быть заданы частично, т.е. указывать можно значения только измененных свойств). - /// Если сущности с заданным ключом нет в БД происходит Upsert (в соответствии со стандартом). - /// - /// Ключ обновляемой сущности. - /// Обновляемая сущность. - /// Обновлённая сущность. -#if NETFRAMEWORK - public HttpResponseMessage Patch([FromODataUri] Guid key, [FromBody] EdmEntityObject edmEntity) -#elif NETSTANDARD - public IActionResult Patch([FromODataUri] Guid key, [FromBody] EdmEntityObject edmEntity) -#endif - { - try - { - if (key == null) - { - throw new ArgumentNullException("key"); - } - - if (edmEntity == null) - { - edmEntity = ReplaceOdataBindNull(); - } - - IEdmEntityType entityType = (IEdmEntityType)edmEntity.ActualEdmType; - -#if NETFRAMEWORK - var dictionary = Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.Dictionary) ? - (Dictionary)Request.Properties[ExtendedODataEntityDeserializer.Dictionary] : - new Dictionary(); -#elif NETSTANDARD - var dictionary = Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.Dictionary) ? - (Dictionary)Request.HttpContext.Items[ExtendedODataEntityDeserializer.Dictionary] : - new Dictionary(); -#endif - - foreach (var prop in entityType.Properties()) - { - if (!dictionary.ContainsKey(prop.Name) && edmEntity.GetChangedPropertyNames().Contains(prop.Name) && prop is EdmNavigationProperty) - { - const string msg = "Error processing request stream. Deep updates are not supported in PUT or PATCH operations."; -#if NETFRAMEWORK - return Request.CreateResponse(HttpStatusCode.BadRequest, msg); -#elif NETSTANDARD - return BadRequest(msg); -#endif - } - - if (dictionary.ContainsKey(prop.Name) && dictionary[prop.Name] == null && - (!prop.Type.IsNullable || prop.Type.IsCollection())) - { - string msg = $"The property {prop.Name} can not be null."; -#if NETFRAMEWORK - return Request.CreateResponse(HttpStatusCode.BadRequest, msg); -#elif NETSTANDARD - return BadRequest(msg); -#endif - } - } - - DataObject obj = UpdateObject(edmEntity, key); - ExecuteCallbackAfterUpdate(obj); - - var responseForPreferMinimal = TestPreferMinimal(); - if (responseForPreferMinimal != null) - { - return responseForPreferMinimal; - } - -#if NETFRAMEWORK - if (!Request.Headers.Contains("Prefer")) - { - return Request.CreateResponse(HttpStatusCode.NoContent); - } -#elif NETSTANDARD - if (!Request.Headers.ContainsKey("Prefer")) - { - return NoContent(); - } -#endif - - edmEntity = GetEdmObject(_model.GetEdmEntityType(type), obj, 1, null, null); -#if NETFRAMEWORK - var result = Request.CreateResponse(HttpStatusCode.OK, edmEntity); - result.Headers.Add("Preference-Applied", "return=representation"); -#elif NETSTANDARD - var result = Ok(edmEntity); - Response.Headers.Add("Preference-Applied", "return=representation"); -#endif - return result; - } - catch (Exception ex) - { -#if NETFRAMEWORK - return InternalServerErrorMessage(ex); -#elif NETSTANDARD - throw CustomException(ex); -#endif - } - } - - /// - /// Осуществляет удаление сущности. - /// - /// - /// Результат выполнения запроса типа , соответствующий статусу . - /// -#if NETFRAMEWORK - public HttpResponseMessage DeleteString() -#elif NETSTANDARD - public NoContentResult DeleteString() -#endif - { - var keySegment = ODataPath.Segments[1] as KeySegment; - string key = keySegment.Keys.First().Value.ToString().Trim().Replace("'", string.Empty); - return DeleteEntity(key); - } - - /// - /// Осуществляет удаление сущности. - /// - /// - /// Результат выполнения запроса типа , соответствующий статусу . - /// -#if NETFRAMEWORK - public HttpResponseMessage DeleteGuid() -#elif NETSTANDARD - public NoContentResult DeleteGuid() -#endif - { - var keySegment = ODataPath.Segments[1] as KeySegment; - Guid key = new Guid(keySegment.Keys.First().Value.ToString()); - return DeleteEntity(key); - } - -#if NETFRAMEWORK - private HttpResponseMessage DeleteEntity(object key) -#elif NETSTANDARD - private NoContentResult DeleteEntity(object key) -#endif - { - try - { - if (key == null) - { - throw new ArgumentNullException(nameof(key)); - } - - Init(); - - /* В ситуации, когда мастер и детейл одного типа, ORM без подгрузки копии данных не может корректно разобрать порядок, - * в котором объекты должны быть удалены. - */ - bool needDataCopyLoad = _typesWithSameDetailAndMaster.Contains(type); - if (!_typesWithNotSameDetailAndMaster.Contains(type) && !needDataCopyLoad) - { - string[] props = Information.GetAllPropertyNames(type); - int length = props.Length; - int index = 0; - - while(!needDataCopyLoad && index < length) - { - string prop = props[index]; - Type propType = Information.GetPropertyType(type, prop); - needDataCopyLoad = propType.IsSubclassOf(typeof(DataObject)) && Information.GetDetailArrayPropertyName(type, propType) != null; - - index++; - } - } - - DataObject obj = null; - if (!needDataCopyLoad) - { - obj = DataObjectCache.CreateDataObject(type, key); - _typesWithNotSameDetailAndMaster.Add(type); - } - else - { - obj = LoadObject(type, key.ToString()); - _typesWithSameDetailAndMaster.Add(type); - } - - // Удаляем объект с заданным ключем. - // Детейлы удалятся вместе с агрегатором автоматически. - // Если удаляемый объект является мастером для какого-либо объекта, то - // спецификация предполагает, что зависимые объекты будут каскадно удалены либо ссылки в них заменены - // на null/значению по умолчанию, если это задано в модели через ReferentialConstraints. - // Но если это задано в модели, то соответвующие объекты данных реализуют интерфейсы - // IReferencesCascadeDelete/IReferencesNullDelete и требуемые действия будут выполнены автоматически. - // В данный момент ReferentialConstraints не создаются в модели. - obj.SetStatus(ObjectStatus.Deleted); - - // Раз объект данных удаляется, то и все ассоциированные с ним файлы должны быть удалены. - // Запоминаем метаданные всех ассоциированных файлов, кроме файлов соответствующих файловым свойствам типа File - // (файлы соответствующие свойствам типа File хранятся в БД, и из файловой системы просто нечего удалять). - // TODO: подумать как быть с детейлами, детейлами детейлов, и т д. - var descriptions = _dataObjectFileAccessor.GetDataObjectFileDescriptions(_dataService, obj, new List { typeof(File) }); - _removingFileDescriptions.AddRange(descriptions); - - List objs = new List(); - - if (ExecuteCallbackBeforeDelete(obj)) - { - string agregatorPropertyName = Information.GetAgregatePropertyName(type); - if (!string.IsNullOrEmpty(agregatorPropertyName)) - { - DataObject agregator = (DataObject)Information.GetPropValueByName(obj, agregatorPropertyName); - - if (agregator != null) - { - objs.Add(agregator); - } - } - - objs.Add(obj); - - if (IsBatchChangeSetRequest) - { -#if NETFRAMEWORK - List dataObjectsToUpdate = (List)Request.Properties[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; - List allProcessedObjects = (List)Request.Properties[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; - -#elif NETSTANDARD - List dataObjectsToUpdate = (List)HttpContext.Items[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; - List allProcessedObjects = (List)HttpContext.Items[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; -#endif - dataObjectsToUpdate.AddRange(objs); - allProcessedObjects.Add(obj); - } - else - { - DataObject[] dataObjects = objs.ToArray(); - _dataService.UpdateObjects(ref dataObjects); - } - } - - // При успешном удалении вычищаем из файловой системы, файлы подлежащие удалению. - _dataObjectFileAccessor.RemoveFileUploadDirectories(_removingFileDescriptions); - ExecuteCallbackAfterDelete(obj); - -#if NETFRAMEWORK - return Request.CreateResponse(HttpStatusCode.NoContent); -#elif NETSTANDARD - return NoContent(); -#endif - } - catch (Exception ex) - { - _removingFileDescriptions.Clear(); -#if NETFRAMEWORK - return InternalServerErrorMessage(ex); -#elif NETSTANDARD - throw CustomException(ex); -#endif - } - } - -#if NETFRAMEWORK - /// - /// Создаётся http-ответ с кодом 500 по-умолчанию, на возникшую в сервисе ошибку. - /// Для изменения возвращаемого кода необходимо реализовать обработчик CallbackAfterInternalServerError. - /// - /// Ошибка сервиса. - /// Http-ответ. - private HttpResponseMessage InternalServerErrorMessage(Exception ex) - { - return InternalServerErrorMessage(ex, _events, Request); - } - - /// - /// Создаётся http-ответ с кодом 500 по-умолчанию, на возникшую в сервисе ошибку. - /// Для изменения возвращаемого кода необходимо реализовать обработчик CallbackAfterInternalServerError. - /// - /// Ошибка сервиса. - /// The container with registered events. - /// Original HTTP request message for create a response. - /// Http-ответ. - public static HttpResponseMessage InternalServerErrorMessage(Exception ex, IEventHandlerContainer events, HttpRequestMessage request) - { - HttpStatusCode code = HttpStatusCode.InternalServerError; - Exception originalEx = ex; - - if (events?.CallbackAfterInternalServerError != null) - { - ex = events?.CallbackAfterInternalServerError(ex, ref code); - } - - if (ex == null) - { - ex = new Exception("Exception is null."); - } - - StringBuilder details = new StringBuilder(); - StringBuilder trace = new StringBuilder(); - var ex2 = ex; - while (ex2.InnerException != null) - { - string detailsItem = - "{" + - $"{JsonConvert.ToString("code")}: {JsonConvert.ToString($"{(int)code}")}, " + - $"{JsonConvert.ToString("message")}: {JsonConvert.ToString(ex2.InnerException.Message)}" + - "}"; - if (details.Length > 0) - details.Append(", "); - details.Append(detailsItem); - ex2 = ex2.InnerException; - } - - ex2 = ex; - do - { - string traceItem = - "{" + - $"{JsonConvert.ToString("message")}: {JsonConvert.ToString(ex2.Message)}, " + - $"{JsonConvert.ToString("stack")}: {JsonConvert.ToString(ex2.StackTrace)}" + - "}"; - if (trace.Length > 0) - trace.Append(", "); - trace.Append(traceItem); - ex2 = ex2.InnerException; - } - while (ex2 != null); - - details.Insert(0, "[").Append("]"); - trace.Insert(0, $"{{{JsonConvert.ToString("trace")}: [").Append("]}"); - - HttpResponseMessage msg = request.CreateResponse(code); - msg.Content = new StringContent( - "{" + - $"{JsonConvert.ToString("error")}: " + - "{ " + - $"{JsonConvert.ToString("code")}: {JsonConvert.ToString($"{(int)code}")}, " + - $"{JsonConvert.ToString("message")}: {JsonConvert.ToString(ex.Message)}, " + - $"{JsonConvert.ToString("details")}: {details.ToString()}, " + - $"{JsonConvert.ToString("innererror")}: {trace.ToString()}" + - "}" + - "}", - Encoding.UTF8, - "application/json"); - LogService.LogError(originalEx.Message, originalEx); - return msg; - } -#endif - -#if NETFRAMEWORK - private HttpResponseMessage TestPreferMinimal() - { - if (Request.Headers.Contains("Prefer")) - { - KeyValuePair> header = Request.Headers.FirstOrDefault(h => h.Key.ToLower() == "prefer"); - if (header.Value != null && header.Value.ToString().ToLower().Contains("return=minimal")) - { - HttpResponseMessage result = Request.CreateResponse(HttpStatusCode.NoContent); - result.Headers.Add("Preference-Applied", "return=minimal"); - return result; - } - } - - return null; - } -#elif NETSTANDARD - - private NoContentResult TestPreferMinimal() - { - if (Request.Headers.ContainsKey("Prefer")) - { - KeyValuePair header = Request.Headers.FirstOrDefault(h => h.Key.ToLower() == "prefer"); - if (header.Value.ToString() != null && header.Value.ToString().ToLower().Contains("return=minimal")) - { - NoContentResult result = NoContent(); - Request.Headers.Add("Preference-Applied", "return=minimal"); - - return result; - } - } - - return null; - } -#endif - -#if NETFRAMEWORK - /// - /// Заменяет в теле запроса представление навигационных свойств с Имя_Связи@odata.bind:null на представление Имя_Связи:null. - /// - /// Возвращается EdmEntityObject преобразованный из JSON-строки. - private EdmEntityObject ReplaceOdataBindNull() - { - if (!Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.OdataBindNull)) - { - if (Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) - throw (Exception)Request.Properties[ExtendedODataEntityDeserializer.ReadException]; - throw new Exception("ReplaceOdataBindNull: edmEntity is null."); - } - - Stream stream; - - string requestContentKey = PostPatchHandler.RequestContent; - if (Request.Properties.ContainsKey(PostPatchHandler.PropertyKeyBatchRequest) && (bool)Request.Properties[PostPatchHandler.PropertyKeyBatchRequest] == true) - { - requestContentKey = PostPatchHandler.RequestContent + $"_{PostPatchHandler.PropertyKeyContentId}_{Request.Properties[PostPatchHandler.PropertyKeyContentId]}"; - } - - string json = (string)Request.Properties[requestContentKey]; - - Dictionary props = - JsonConvert.DeserializeObject>(json, new JsonSerializerSettings() { FloatParseHandling = FloatParseHandling.Decimal }); - var keys = props.Keys.ToArray(); - var odataBindNullList = new List(); - foreach (var key in keys) - { - var p = key.IndexOf("@odata.bind"); - if (p != -1 && props[key] == null) - { - props.Remove(key); - var newKey = key.Substring(0, p); - if (props.ContainsKey(newKey)) - { - props.Remove(newKey); - } - - var type = (EdmEntityTypeReference)Request.Properties[ExtendedODataEntityDeserializer.OdataBindNull]; - - var prop = type.FindNavigationProperty(newKey); - if (prop.Type.IsCollection()) - { - odataBindNullList.Add(newKey); - } - else - { - props.Add(newKey, null); - } - } - } - - json = JsonConvert.SerializeObject(props); - Request.Content = new StringContent(json, Encoding.UTF8, "application/json"); - - IContentNegotiator negotiator = (IContentNegotiator)Configuration.Services.GetService(typeof(IContentNegotiator)); - var resultNegotiate = negotiator.Negotiate(typeof(EdmEntityObject), Request, Configuration.Formatters); - - stream = Request.Content.ReadAsStreamAsync().Result; - var formatter = resultNegotiate.Formatter; - - /* - // Другой вариант получения форматтера. - var formatter = ((ODataMediaTypeFormatter)Configuration.Formatters[0]).GetPerRequestFormatterInstance( - typeof(EdmEntityObject), Request, Request.Content.Headers.ContentType); - - */ - - var edmEntity = (EdmEntityObject)formatter.ReadFromStreamAsync( - typeof(EdmEntityObject), - stream, - Request.Content, - new ModelStateFormatterLogger(ModelState, "edmEntity")).Result; - if (edmEntity == null && Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) - { - throw (Exception)Request.Properties[ExtendedODataEntityDeserializer.ReadException]; - } - - foreach (var prop in odataBindNullList) - { - edmEntity.TrySetPropertyValue(prop, null); - } - - return edmEntity; - } -#elif NETSTANDARD - /// - /// Заменяет в теле запроса представление навигационных свойств с Имя_Связи@odata.bind:null на представление Имя_Связи:null. - /// - /// Возвращается EdmEntityObject преобразованный из JSON-строки. - private EdmEntityObject ReplaceOdataBindNull() - { - if (!Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.OdataBindNull)) - { - if (Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) - throw (Exception)Request.HttpContext.Items[ExtendedODataEntityDeserializer.ReadException]; - throw new Exception("ReplaceOdataBindNull: edmEntity is null."); - } - - string json = (string)Request.HttpContext.Items[RequestHeadersHookMiddleware.PropertyKeyRequestContent]; - - Dictionary props = JsonConvert.DeserializeObject>(json); - var keys = props.Keys.ToArray(); - var odataBindNullList = new List(); - foreach (var key in keys) - { - var p = key.IndexOf("@odata.bind"); - if (p != -1 && props[key] == null) - { - props.Remove(key); - var newKey = key.Substring(0, p); - if (props.ContainsKey(newKey)) - { - props.Remove(newKey); - } - - var type = (EdmEntityTypeReference)Request.HttpContext.Items[ExtendedODataEntityDeserializer.OdataBindNull]; - - var prop = type.FindNavigationProperty(newKey); - if (prop.Type.IsCollection()) - { - odataBindNullList.Add(newKey); - } - else - { - props.Add(newKey, null); - } - } - } - - json = JsonConvert.SerializeObject(props); - Request.Body = new StringContent(json, Encoding.UTF8, "application/json").ReadAsStreamAsync().Result; - - var ictx = new InputFormatterContext( - HttpContext, - string.Empty, - ModelState, - MetadataProvider.GetMetadataForType(typeof(EdmEntityObject)), - (x, y) => new StreamReader(x, y)); - - IList formatters = ODataInputFormatterFactory.Create(); - - // The JSON input formatter is the first formatter in the OData input formatters list. - InputFormatterResult formatterResult = formatters.First().ReadRequestBodyAsync(ictx, Encoding.UTF8).Result; - - var edmEntity = (EdmEntityObject)formatterResult.Model; - - if (edmEntity == null && Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) - { - throw (Exception)Request.HttpContext.Items[ExtendedODataEntityDeserializer.ReadException]; - } - - foreach (var prop in odataBindNullList) - { - edmEntity.TrySetPropertyValue(prop, null); - } - - return edmEntity; - } -#endif - - /// - /// Общая логика модификации данных: вставка и обновление в зависимости от статуса. - /// Используется в Post (вставка) и Patch (обновление). - /// - /// Модифицируемая сущность. - /// Ключ сущности. Использовать, если не задан в сущности, но специфичен (не д.б. сгенерирован). - /// Созданная сущность. - private DataObject UpdateObject(EdmEntityObject edmEntity, object key) - { - Init(); - - // Список объектов для обновления. - List objs = new List(); - - try - { - // Создадим объект данных по пришедшей сущности. - // В переменной objs сформируем список всех объектов для обновления в нужном порядке: сам объект и зависимые всех уровней. - DataObject obj = GetDataObjectByEdmEntity(edmEntity, key, objs); - - for (int i = 0; i < objs.Count; i++) - { - ObjectStatus status = objs[i].GetStatus(false); - if (status == ObjectStatus.Created) - { - if (!ExecuteCallbackBeforeCreate(objs[i])) - { - objs.RemoveAt(i); - i++; - } - } - else - { - if (!ExecuteCallbackBeforeUpdate(objs[i])) - { - objs.RemoveAt(i); - i++; - } - } - } - - if (!OfflineManager.UnlockObjects(QueryOptions, objs)) - throw new OperationCanceledException(); // TODO - - // Обработка объектов данных в хранилище средствами сервиса данных. - // Статусы объектов должны автоматически получиться верными, т.к. в GetDataObjectByEdmEntity объект создаем - // только при неудачной попытке вычитки и лишь затем инициализируем свойства пришедшими значениями. - var objsArr = objs.ToArray(); - - // Список объектов для обновления без UnAltered. - var objsArrSmall = objsArr.Where(t => t.GetStatus() != ObjectStatus.UnAltered).ToArray(); - if (IsBatchChangeSetRequest) - { -#if NETFRAMEWORK - List dataObjectsToUpdate = (List)Request.Properties[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; - List allProcessedObjects = (List)Request.Properties[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; -#elif NETSTANDARD - List dataObjectsToUpdate = (List)Request.HttpContext.Items[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; - List allProcessedObjects = (List)Request.HttpContext.Items[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; -#endif - dataObjectsToUpdate.AddRange(objsArrSmall); - allProcessedObjects.Add(obj); - } - else - { - _dataService.UpdateObjects(ref objsArrSmall); - } - - // При успешном обновлении вычищаем из файловой системы, файлы подлежащие удалению. - _dataObjectFileAccessor.RemoveFileUploadDirectories(_removingFileDescriptions); - - return obj; - } - catch (Exception) - { - _removingFileDescriptions.Clear(); - throw; - } - } - - /// - /// Получить объект данных по ключу: если объект есть в хранилище, то возвращается загруженным по представлению по умолчанию, иначе - создаётся новый. - /// - /// Тип объекта, не может быть null. - /// Значение ключа.> - /// Объект данных. - private DataObject ReturnDataObject(Type objType, object keyValue) - { - if (objType == null) - { - throw new ArgumentNullException(nameof(objType)); - } - - if (keyValue != null) - { - DataObject dataObjectFromCache = DataObjectCache.GetLivingDataObject(objType, keyValue); - View view = _model.GetDataObjectDefaultView(objType); - - if (dataObjectFromCache != null) - { - // Если объект не новый и не загружен целиком (начиная с ORM@5.1.0-beta15). - if (dataObjectFromCache.GetStatus(false) == ObjectStatus.UnAltered - && dataObjectFromCache.GetLoadingState() != LoadingState.Loaded) - { - // Для обратной совместимости сравним перечень загруженных свойств и свойств в представлении. - /* Данный код срабатывает, например, если в кэше был объект, который загрузился только на уровне первичного ключа. - * - * Данный код также срабатывает в следующей ситуации: есть класс А, у него детейл Б, у которого есть наследник В. - * При загрузке объекта класса А подгрузятся его детейлы, однако они будут подгружены по представлению, которое соответствует классу Б, даже если детейлы класса В. - * Таким образом, в кэше окажутся объекты класса В, которые загружены только по свойствам Б. Раз не все свойства подгружены, то состояние LightLoaded. - * Догружать необходимо только те свойства, что ещё не загружались (потому что загруженные уже могут быть изменены). - */ - string[] loadedProps = dataObjectFromCache.GetLoadedProperties(); - IEnumerable ownProps = view.Properties.Where(p => !p.Name.Contains('.')); - if (!ownProps.All(p => loadedProps.Contains(p.Name))) - { - // Вычитывать объект сразу с детейлами нельзя, поскольку в этой же транзакции могут уже оказать отдельные операции с детейлами и перевычитка затрёт эти изменения. - View miniView = view.Clone(); - DetailInView[] miniViewDetails = miniView.Details; - miniView.Details = new DetailInView[0]; - _dataService.SafeLoadWithMasters(miniView, dataObjectFromCache, DataObjectCache); - - if (miniViewDetails.Length > 0) - { - _dataService.SafeLoadDetails(view, new DataObject[] { dataObjectFromCache }, DataObjectCache); - } - } - } - - return dataObjectFromCache; - } - - // Вычитывать объект сразу с детейлами нельзя, поскольку в этой же транзакции могут уже оказать отдельные операции с детейлами и перевычитка затрёт эти изменения. - View lightView = view.Clone(); - DetailInView[] lightViewDetails = lightView.Details; - lightView.Details = new DetailInView[0]; - - // Проверим существование объекта в базе. - LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(objType, lightView); - lcs.LimitFunction = FunctionBuilder.BuildEquals(keyValue); - lcs.ReturnTop = 2; - DataObject[] dobjs = _dataService.LoadObjects(lcs, DataObjectCache); - if (dobjs.Length == 1) - { - DataObject dataObject = dobjs[0]; - if (lightViewDetails.Any()) - { - // Дочитаем детейлы, чтобы в бизнес-серверах эти данные уже были. Детейлы с изменёнными состояниями будут пропущены из зачитки. - _dataService.SafeLoadDetails(view, new DataObject[] { dataObject }, DataObjectCache); - } - - return dataObject; - } - } - - // Значение ключа автоматически создаётся. - DataObject obj; - - if (keyValue != null) - { - obj = DataObjectCache.CreateDataObject(objType, keyValue); - } - else - { - obj = (DataObject)Activator.CreateInstance(objType); - DataObjectCache.AddDataObject(obj); - } - - return obj; - } - - /// - /// Построение объекта данных по сущности OData. - /// - /// Сущность OData. - /// Значение ключевого поля сущности. - /// Список объектов для обновления. - /// Признак, что объект добавляется в конец списка обновления. - /// Объект данных. - private DataObject GetDataObjectByEdmEntity(EdmEntityObject edmEntity, object key, List dObjs, bool endObject = false) - { - if (edmEntity == null) - { - return null; - } - - IEdmEntityType entityType = (IEdmEntityType)edmEntity.ActualEdmType; - Type objType = _model.GetDataObjectType(_model.GetEdmEntitySet(entityType).Name); - - // Значение свойства. - object value; - - // Получим значение ключа. - IEnumerable entityProps = entityType.Properties().ToList(); - var keyProperty = entityProps.FirstOrDefault(prop => prop.Name == _model.KeyPropertyName); - if (key != null) - { - value = key; - } - else - { - edmEntity.TryGetPropertyValue(keyProperty.Name, out value); - } - - // Загрузим объект из хранилища, если он там есть (используем представление по умолчанию), или создадим, если нет, но только для POST. - // Тем самым гарантируем загруженность свойств при необходимости обновления и установку нужного статуса. - DataObject obj = ReturnDataObject(objType, value); - - // Добавляем объект в список для обновления, если там ещё нет объекта с таким ключом. - var objInList = dObjs.FirstOrDefault(o => PKHelper.EQDataObject(o, obj, false)); - if (objInList == null) - { - if (!endObject) - { - // Добавляем объект в начало списка. - dObjs.Insert(0, obj); - } - else - { - // Добавляем в конец списка. - dObjs.Add(obj); - } - } - - // Все свойства объекта данных означим из пришедшей сущности, если они были там установлены(изменены). - string agregatorPropertyName = Information.GetAgregatePropertyName(objType); - IEnumerable changedPropNames = edmEntity.GetChangedPropertyNames(); - - // Обрабатываем агрегатор первым. - List changedProps = entityProps - .Where(ep => changedPropNames.Contains(ep.Name)) - .OrderBy(ep => ep.Name != agregatorPropertyName) - .ToList(); - foreach (var prop in changedProps) - { - string dataObjectPropName; - try - { - dataObjectPropName = _model.GetDataObjectProperty(entityType.FullTypeName(), prop.Name).Name; - } - catch (KeyNotFoundException) - { - // Check if prop value is the link from master to pseudodetail (pseudoproperty). - if (HasPseudoproperty(entityType, prop.Name)) - { - continue; - } - - throw; - } - - // Обработка мастеров и детейлов. - if (prop is EdmNavigationProperty navProp) - { - edmEntity.TryGetPropertyValue(prop.Name, out value); - - EdmMultiplicity edmMultiplicity = navProp.TargetMultiplicity(); - - // Обработка мастеров. - if (edmMultiplicity == EdmMultiplicity.One || edmMultiplicity == EdmMultiplicity.ZeroOrOne) - { - if (value is EdmEntityObject edmMaster) - { - // Порядок вставки влияет на порядок отправки объектов в UpdateObjects это в свою очередь влияет на то, как срабатывают бизнес-серверы. Бизнес-сервер мастера должен сработать после, а агрегатора перед этим объектом. - bool insertIntoEnd = string.IsNullOrEmpty(agregatorPropertyName); - DataObject master = GetDataObjectByEdmEntity(edmMaster, null, dObjs, insertIntoEnd); - - Information.SetPropValueByName(obj, dataObjectPropName, master); - - if (dataObjectPropName == agregatorPropertyName) - { - master.AddDetail(obj); - - // Нужно обязательно обозначить детейловое свойство загруженным, поскольку мы вносим в него изменения. - string detailPropName = Information.GetDetailArrayPropertyName(master.GetType(), obj.GetType()); - if (!string.IsNullOrEmpty(detailPropName) && !master.CheckLoadedProperty(detailPropName)) - { - master.AddLoadedProperties(detailPropName); - } - } - } - else - { - Information.SetPropValueByName(obj, dataObjectPropName, null); - } - } - - // Обработка детейлов. - if (edmMultiplicity == EdmMultiplicity.Many) - { - DetailArray detarr = (DetailArray)Information.GetPropValueByName(obj, dataObjectPropName); - - if (value is EdmEntityObjectCollection coll) - { - if (coll != null && coll.Count > 0) - { - foreach (var edmEnt in coll) - { - DataObject det = GetDataObjectByEdmEntity( - (EdmEntityObject)edmEnt, - null, - dObjs, - true); - - if (det.__PrimaryKey == null) - { - detarr.AddObject(det); - } - else - { - detarr.SetByKey(det.__PrimaryKey, det); - } - } - } - } - else - { - detarr.Clear(); - } - } - } - else - { - // Обработка собственных свойств объекта (неключевых, т.к. ключ устанавливаем при начальной инициализации объекта obj). - if (prop.Name != keyProperty.Name) - { - Type dataObjectPropertyType = Information.GetPropertyType(objType, dataObjectPropName); - edmEntity.TryGetPropertyValue(prop.Name, out value); - - // Если тип свойства относится к одному из зарегистрированных провайдеров файловых свойств, - // значит свойство файловое, и его нужно обработать особым образом. - if (_dataObjectFileAccessor.HasDataObjectFileProvider(dataObjectPropertyType)) - { - IDataObjectFileProvider dataObjectFileProvider = _dataObjectFileAccessor.GetDataObjectFileProvider(dataObjectPropertyType); - - // Обработка файловых свойств объектов данных. - string serializedFileDescription = value as string; - if (serializedFileDescription == null) - { - // Файловое свойство было сброшено на клиенте. - // Ассоциированный файл должен быть удален, после успешного сохранения изменений. - // Для этого запоминаем метаданные ассоциированного файла, до того как свойство будет сброшено - // (для получения метаданных свойство будет дочитано в объект данных). - // Файловое свойство типа File хранит данные ассоциированного файла прямо в БД, - // соответственно из файловой системы просто нечего удалять, - // поэтому обходим его стороной, чтобы избежать лишных вычиток файлов из БД. - if (dataObjectPropertyType != typeof(File)) - { - var fileDescription = dataObjectFileProvider.GetFileDescription(_dataService, obj, dataObjectPropName); - _removingFileDescriptions.Add(fileDescription); - } - - // Сбрасываем файловое свойство в изменяемом объекте данных. - Information.SetPropValueByName(obj, dataObjectPropName, null); - } - else - { - // Файловое свойство было изменено, но не сброшено. - // Если в метаданных файла присутствует FileUploadKey значит файл был загружен на сервер, - // но еще не был ассоциирован с объектом данных, и это нужно сделать. - FileDescription fileDescription = FileDescription.FromJson(serializedFileDescription); - fileDescription.FilePropertyType = dataObjectPropertyType; - if (!(string.IsNullOrEmpty(fileDescription.FileUploadKey) || string.IsNullOrEmpty(fileDescription.FileName))) - { - var fileProperty = dataObjectFileProvider.GetFileProperty(_dataService, fileDescription); - Information.SetPropValueByName(obj, dataObjectPropName, fileProperty); - - // Файловое свойство типа File хранит данные ассоциированного файла прямо в БД, - // поэтому после успешного сохранения объекта данных, оссоциированный с ним файл должен быть удален из файловой системы. - // Для этого запоминаем описание загруженного файла. - if (dataObjectPropertyType == typeof(File)) - { - _removingFileDescriptions.Add(fileDescription); - } - } - } - } - else - { - // Преобразование типов для примитивных свойств. - if (value is DateTimeOffset) - value = ((DateTimeOffset)value).UtcDateTime; - if (value is EdmEnumObject) - value = ((EdmEnumObject)value).Value; - - Information.SetPropValueByName(obj, dataObjectPropName, value); - } - } - } - } - - if (!string.IsNullOrEmpty(agregatorPropertyName)) - { - DataObject agregator = (DataObject)Information.GetPropValueByName(obj, agregatorPropertyName); - - if (agregator != null) - { - DataObject existObject = dObjs.FirstOrDefault(o => PKHelper.EQDataObject(o, agregator, false)); - if (existObject == null) - { - if (!endObject) - { - // Добавляем объект в начало списка. - dObjs.Insert(0, agregator); - } - else - { - // Добавляем в конец списка. - dObjs.Add(agregator); - } - } - } - } - - return obj; - } - } -} +namespace NewPlatform.Flexberry.ORM.ODataService.Controllers +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Net.Http; + using System.Text; + using ICSSoft.STORMNET; + using ICSSoft.STORMNET.Business; + using ICSSoft.STORMNET.FunctionalLanguage; + using Microsoft.AspNet.OData; + using Microsoft.OData.Edm; + using NewPlatform.Flexberry.ORM.ODataService.Batch; + using NewPlatform.Flexberry.ORM.ODataService.Extensions; + using NewPlatform.Flexberry.ORM.ODataService.Files; + using NewPlatform.Flexberry.ORM.ODataService.Files.Providers; + using NewPlatform.Flexberry.ORM.ODataService.Formatter; + using Newtonsoft.Json; + using File = ICSSoft.STORMNET.FileType.File; + using KeySegment = Microsoft.OData.UriParser.KeySegment; + +#if NETFRAMEWORK + using System.Net.Http.Formatting; + using System.Web.Http; + using System.Web.Http.Results; + using System.Web.Http.Validation; + using NewPlatform.Flexberry.ORM.ODataService.Events; + using NewPlatform.Flexberry.ORM.ODataService.Handlers; +#endif +#if NETSTANDARD + using Microsoft.AspNet.OData.Formatter; + using Microsoft.AspNetCore.Http; + using Microsoft.AspNetCore.Mvc; + using Microsoft.AspNetCore.Mvc.Formatters; + using Microsoft.Extensions.Primitives; + using NewPlatform.Flexberry.ORM.ODataService.Middleware; +#endif + + /// + /// Определяет класс контроллера OData, который поддерживает запись и чтение данных с использованием OData формата. + /// + public partial class DataObjectController + { + /// + /// Метаданные файлов, временно загруженных в каталог файлового хранилища и привязанных к свойствам обрабатываемых объектов данных. + /// Файлы будут удалены из файловой системы + /// в случае успешного сохранения объектов данных. + /// + private List _removingFileDescriptions = new List(); + + /// + /// Кэш типов, у которых одинакового типа детейлы и мастера. + /// + private List _typesWithSameDetailAndMaster = new List(); + + /// + /// Кэш типов, у которых нет одинакового типа детейлов и мастеров. + /// + private List _typesWithNotSameDetailAndMaster = new List(); + + /// + /// Создание сущности и всех связанных. При существовании в БД произойдёт обновление. + /// + /// Создаваемая сущность. + /// Созданная сущность. +#if NETFRAMEWORK + public HttpResponseMessage Post([FromBody] EdmEntityObject edmEntity) +#elif NETSTANDARD + public IActionResult Post([FromBody] EdmEntityObject edmEntity) +#endif + { + try + { + if (edmEntity == null) + { + edmEntity = ReplaceOdataBindNull(); + } + + DataObject obj = UpdateObject(edmEntity, null); + ExecuteCallbackAfterCreate(obj); + + edmEntity = GetEdmObject(_model.GetEdmEntityType(type), obj, 1, null, null); + var responseForPreferMinimal = TestPreferMinimal(); + if (responseForPreferMinimal != null) + { + return responseForPreferMinimal; + } + +#if NETFRAMEWORK + var result = Request.CreateResponse(HttpStatusCode.Created, edmEntity); + if (Request.Headers.Contains("Prefer")) + { + result.Headers.Add("Preference-Applied", "return=representation"); + } +#elif NETSTANDARD + var result = new ObjectResult(edmEntity) { StatusCode = StatusCodes.Status201Created }; + if (Request.Headers.ContainsKey("Prefer")) + { + Response.Headers.Add("Preference-Applied", "return=representation"); + } +#endif + + return result; + } + catch (Exception ex) + { +#if NETFRAMEWORK + return InternalServerErrorMessage(ex); +#elif NETSTANDARD + throw CustomException(ex); +#endif + } + } + + /// + /// Обновление сущности (свойства могут быть заданы частично, т.е. указывать можно значения только измененных свойств). + /// Если сущности с заданным ключом нет в БД происходит Upsert (в соответствии со стандартом). + /// + /// Ключ обновляемой сущности. + /// Обновляемая сущность. + /// Обновлённая сущность. +#if NETFRAMEWORK + public HttpResponseMessage Patch([FromODataUri] Guid key, [FromBody] EdmEntityObject edmEntity) +#elif NETSTANDARD + public IActionResult Patch([FromODataUri] Guid key, [FromBody] EdmEntityObject edmEntity) +#endif + { + try + { + if (key == null) + { + throw new ArgumentNullException("key"); + } + + if (edmEntity == null) + { + edmEntity = ReplaceOdataBindNull(); + } + + IEdmEntityType entityType = (IEdmEntityType)edmEntity.ActualEdmType; + +#if NETFRAMEWORK + var dictionary = Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.Dictionary) ? + (Dictionary)Request.Properties[ExtendedODataEntityDeserializer.Dictionary] : + new Dictionary(); +#elif NETSTANDARD + var dictionary = Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.Dictionary) ? + (Dictionary)Request.HttpContext.Items[ExtendedODataEntityDeserializer.Dictionary] : + new Dictionary(); +#endif + + foreach (var prop in entityType.Properties()) + { + if (!dictionary.ContainsKey(prop.Name) && edmEntity.GetChangedPropertyNames().Contains(prop.Name) && prop is EdmNavigationProperty) + { + const string msg = "Error processing request stream. Deep updates are not supported in PUT or PATCH operations."; +#if NETFRAMEWORK + return Request.CreateResponse(HttpStatusCode.BadRequest, msg); +#elif NETSTANDARD + return BadRequest(msg); +#endif + } + + if (dictionary.ContainsKey(prop.Name) && dictionary[prop.Name] == null && + (!prop.Type.IsNullable || prop.Type.IsCollection())) + { + string msg = $"The property {prop.Name} can not be null."; +#if NETFRAMEWORK + return Request.CreateResponse(HttpStatusCode.BadRequest, msg); +#elif NETSTANDARD + return BadRequest(msg); +#endif + } + } + + DataObject obj = UpdateObject(edmEntity, key); + ExecuteCallbackAfterUpdate(obj); + + var responseForPreferMinimal = TestPreferMinimal(); + if (responseForPreferMinimal != null) + { + return responseForPreferMinimal; + } + +#if NETFRAMEWORK + if (!Request.Headers.Contains("Prefer")) + { + return Request.CreateResponse(HttpStatusCode.NoContent); + } +#elif NETSTANDARD + if (!Request.Headers.ContainsKey("Prefer")) + { + return NoContent(); + } +#endif + + edmEntity = GetEdmObject(_model.GetEdmEntityType(type), obj, 1, null, null); +#if NETFRAMEWORK + var result = Request.CreateResponse(HttpStatusCode.OK, edmEntity); + result.Headers.Add("Preference-Applied", "return=representation"); +#elif NETSTANDARD + var result = Ok(edmEntity); + Response.Headers.Add("Preference-Applied", "return=representation"); +#endif + return result; + } + catch (Exception ex) + { +#if NETFRAMEWORK + return InternalServerErrorMessage(ex); +#elif NETSTANDARD + throw CustomException(ex); +#endif + } + } + + /// + /// Осуществляет удаление сущности. + /// + /// + /// Результат выполнения запроса типа , соответствующий статусу . + /// +#if NETFRAMEWORK + public HttpResponseMessage DeleteString() +#elif NETSTANDARD + public NoContentResult DeleteString() +#endif + { + var keySegment = ODataPath.Segments[1] as KeySegment; + string key = keySegment.Keys.First().Value.ToString().Trim().Replace("'", string.Empty); + return DeleteEntity(key); + } + + /// + /// Осуществляет удаление сущности. + /// + /// + /// Результат выполнения запроса типа , соответствующий статусу . + /// +#if NETFRAMEWORK + public HttpResponseMessage DeleteGuid() +#elif NETSTANDARD + public NoContentResult DeleteGuid() +#endif + { + var keySegment = ODataPath.Segments[1] as KeySegment; + Guid key = new Guid(keySegment.Keys.First().Value.ToString()); + return DeleteEntity(key); + } + +#if NETFRAMEWORK + private HttpResponseMessage DeleteEntity(object key) +#elif NETSTANDARD + private NoContentResult DeleteEntity(object key) +#endif + { + try + { + if (key == null) + { + throw new ArgumentNullException(nameof(key)); + } + + Init(); + + /* В ситуации, когда мастер и детейл одного типа, ORM без подгрузки копии данных не может корректно разобрать порядок, + * в котором объекты должны быть удалены. + */ + bool needDataCopyLoad = _typesWithSameDetailAndMaster.Contains(type); + if (!_typesWithNotSameDetailAndMaster.Contains(type) && !needDataCopyLoad) + { + string[] props = Information.GetAllPropertyNames(type); + int length = props.Length; + int index = 0; + + while(!needDataCopyLoad && index < length) + { + string prop = props[index]; + Type propType = Information.GetPropertyType(type, prop); + needDataCopyLoad = propType.IsSubclassOf(typeof(DataObject)) && Information.GetDetailArrayPropertyName(type, propType) != null; + + index++; + } + } + + DataObject obj = null; + if (!needDataCopyLoad) + { + obj = DataObjectCache.CreateDataObject(type, key); + _typesWithNotSameDetailAndMaster.Add(type); + } + else + { + obj = LoadObject(type, key.ToString()); + _typesWithSameDetailAndMaster.Add(type); + } + + // Удаляем объект с заданным ключем. + // Детейлы удалятся вместе с агрегатором автоматически. + // Если удаляемый объект является мастером для какого-либо объекта, то + // спецификация предполагает, что зависимые объекты будут каскадно удалены либо ссылки в них заменены + // на null/значению по умолчанию, если это задано в модели через ReferentialConstraints. + // Но если это задано в модели, то соответвующие объекты данных реализуют интерфейсы + // IReferencesCascadeDelete/IReferencesNullDelete и требуемые действия будут выполнены автоматически. + // В данный момент ReferentialConstraints не создаются в модели. + obj.SetStatus(ObjectStatus.Deleted); + + // Раз объект данных удаляется, то и все ассоциированные с ним файлы должны быть удалены. + // Запоминаем метаданные всех ассоциированных файлов, кроме файлов соответствующих файловым свойствам типа File + // (файлы соответствующие свойствам типа File хранятся в БД, и из файловой системы просто нечего удалять). + // TODO: подумать как быть с детейлами, детейлами детейлов, и т д. + var descriptions = _dataObjectFileAccessor.GetDataObjectFileDescriptions(_dataService, obj, new List { typeof(File) }); + _removingFileDescriptions.AddRange(descriptions); + + List objs = new List(); + + if (ExecuteCallbackBeforeDelete(obj)) + { + string agregatorPropertyName = Information.GetAgregatePropertyName(type); + if (!string.IsNullOrEmpty(agregatorPropertyName)) + { + DataObject agregator = (DataObject)Information.GetPropValueByName(obj, agregatorPropertyName); + + if (agregator != null) + { + objs.Add(agregator); + } + } + + objs.Add(obj); + + if (IsBatchChangeSetRequest) + { +#if NETFRAMEWORK + List dataObjectsToUpdate = (List)Request.Properties[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; + List allProcessedObjects = (List)Request.Properties[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; + +#elif NETSTANDARD + List dataObjectsToUpdate = (List)HttpContext.Items[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; + List allProcessedObjects = (List)HttpContext.Items[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; +#endif + dataObjectsToUpdate.AddRange(objs); + allProcessedObjects.Add(obj); + } + else + { + DataObject[] dataObjects = objs.ToArray(); + _dataService.UpdateObjects(ref dataObjects); + } + } + + // При успешном удалении вычищаем из файловой системы, файлы подлежащие удалению. + _dataObjectFileAccessor.RemoveFileUploadDirectories(_removingFileDescriptions); + ExecuteCallbackAfterDelete(obj); + +#if NETFRAMEWORK + return Request.CreateResponse(HttpStatusCode.NoContent); +#elif NETSTANDARD + return NoContent(); +#endif + } + catch (Exception ex) + { + _removingFileDescriptions.Clear(); +#if NETFRAMEWORK + return InternalServerErrorMessage(ex); +#elif NETSTANDARD + throw CustomException(ex); +#endif + } + } + +#if NETFRAMEWORK + /// + /// Создаётся http-ответ с кодом 500 по-умолчанию, на возникшую в сервисе ошибку. + /// Для изменения возвращаемого кода необходимо реализовать обработчик CallbackAfterInternalServerError. + /// + /// Ошибка сервиса. + /// Http-ответ. + private HttpResponseMessage InternalServerErrorMessage(Exception ex) + { + return InternalServerErrorMessage(ex, _events, Request); + } + + /// + /// Создаётся http-ответ с кодом 500 по-умолчанию, на возникшую в сервисе ошибку. + /// Для изменения возвращаемого кода необходимо реализовать обработчик CallbackAfterInternalServerError. + /// + /// Ошибка сервиса. + /// The container with registered events. + /// Original HTTP request message for create a response. + /// Http-ответ. + public static HttpResponseMessage InternalServerErrorMessage(Exception ex, IEventHandlerContainer events, HttpRequestMessage request) + { + HttpStatusCode code = HttpStatusCode.InternalServerError; + Exception originalEx = ex; + + if (events?.CallbackAfterInternalServerError != null) + { + ex = events?.CallbackAfterInternalServerError(ex, ref code); + } + + if (ex == null) + { + ex = new Exception("Exception is null."); + } + + StringBuilder details = new StringBuilder(); + StringBuilder trace = new StringBuilder(); + var ex2 = ex; + while (ex2.InnerException != null) + { + string detailsItem = + "{" + + $"{JsonConvert.ToString("code")}: {JsonConvert.ToString($"{(int)code}")}, " + + $"{JsonConvert.ToString("message")}: {JsonConvert.ToString(ex2.InnerException.Message)}" + + "}"; + if (details.Length > 0) + details.Append(", "); + details.Append(detailsItem); + ex2 = ex2.InnerException; + } + + ex2 = ex; + do + { + string traceItem = + "{" + + $"{JsonConvert.ToString("message")}: {JsonConvert.ToString(ex2.Message)}, " + + $"{JsonConvert.ToString("stack")}: {JsonConvert.ToString(ex2.StackTrace)}" + + "}"; + if (trace.Length > 0) + trace.Append(", "); + trace.Append(traceItem); + ex2 = ex2.InnerException; + } + while (ex2 != null); + + details.Insert(0, "[").Append("]"); + trace.Insert(0, $"{{{JsonConvert.ToString("trace")}: [").Append("]}"); + + HttpResponseMessage msg = request.CreateResponse(code); + msg.Content = new StringContent( + "{" + + $"{JsonConvert.ToString("error")}: " + + "{ " + + $"{JsonConvert.ToString("code")}: {JsonConvert.ToString($"{(int)code}")}, " + + $"{JsonConvert.ToString("message")}: {JsonConvert.ToString(ex.Message)}, " + + $"{JsonConvert.ToString("details")}: {details.ToString()}, " + + $"{JsonConvert.ToString("innererror")}: {trace.ToString()}" + + "}" + + "}", + Encoding.UTF8, + "application/json"); + LogService.LogError(originalEx.Message, originalEx); + return msg; + } +#endif + +#if NETFRAMEWORK + private HttpResponseMessage TestPreferMinimal() + { + if (Request.Headers.Contains("Prefer")) + { + KeyValuePair> header = Request.Headers.FirstOrDefault(h => h.Key.ToLower() == "prefer"); + if (header.Value != null && header.Value.ToString().ToLower().Contains("return=minimal")) + { + HttpResponseMessage result = Request.CreateResponse(HttpStatusCode.NoContent); + result.Headers.Add("Preference-Applied", "return=minimal"); + return result; + } + } + + return null; + } +#elif NETSTANDARD + + private NoContentResult TestPreferMinimal() + { + if (Request.Headers.ContainsKey("Prefer")) + { + KeyValuePair header = Request.Headers.FirstOrDefault(h => h.Key.ToLower() == "prefer"); + if (header.Value.ToString() != null && header.Value.ToString().ToLower().Contains("return=minimal")) + { + NoContentResult result = NoContent(); + Request.Headers.Add("Preference-Applied", "return=minimal"); + + return result; + } + } + + return null; + } +#endif + +#if NETFRAMEWORK + /// + /// Заменяет в теле запроса представление навигационных свойств с Имя_Связи@odata.bind:null на представление Имя_Связи:null. + /// + /// Возвращается EdmEntityObject преобразованный из JSON-строки. + private EdmEntityObject ReplaceOdataBindNull() + { + if (!Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.OdataBindNull)) + { + if (Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) + throw (Exception)Request.Properties[ExtendedODataEntityDeserializer.ReadException]; + throw new Exception("ReplaceOdataBindNull: edmEntity is null."); + } + + Stream stream; + + string requestContentKey = PostPatchHandler.RequestContent; + if (Request.Properties.ContainsKey(PostPatchHandler.PropertyKeyBatchRequest) && (bool)Request.Properties[PostPatchHandler.PropertyKeyBatchRequest] == true) + { + requestContentKey = PostPatchHandler.RequestContent + $"_{PostPatchHandler.PropertyKeyContentId}_{Request.Properties[PostPatchHandler.PropertyKeyContentId]}"; + } + + string json = (string)Request.Properties[requestContentKey]; + + Dictionary props = + JsonConvert.DeserializeObject>(json, new JsonSerializerSettings() { FloatParseHandling = FloatParseHandling.Decimal }); + var keys = props.Keys.ToArray(); + var odataBindNullList = new List(); + foreach (var key in keys) + { + var p = key.IndexOf("@odata.bind"); + if (p != -1 && props[key] == null) + { + props.Remove(key); + var newKey = key.Substring(0, p); + if (props.ContainsKey(newKey)) + { + props.Remove(newKey); + } + + var type = (EdmEntityTypeReference)Request.Properties[ExtendedODataEntityDeserializer.OdataBindNull]; + + var prop = type.FindNavigationProperty(newKey); + if (prop.Type.IsCollection()) + { + odataBindNullList.Add(newKey); + } + else + { + props.Add(newKey, null); + } + } + } + + json = JsonConvert.SerializeObject(props); + Request.Content = new StringContent(json, Encoding.UTF8, "application/json"); + + IContentNegotiator negotiator = (IContentNegotiator)Configuration.Services.GetService(typeof(IContentNegotiator)); + var resultNegotiate = negotiator.Negotiate(typeof(EdmEntityObject), Request, Configuration.Formatters); + + stream = Request.Content.ReadAsStreamAsync().Result; + var formatter = resultNegotiate.Formatter; + + /* + // Другой вариант получения форматтера. + var formatter = ((ODataMediaTypeFormatter)Configuration.Formatters[0]).GetPerRequestFormatterInstance( + typeof(EdmEntityObject), Request, Request.Content.Headers.ContentType); + + */ + + var edmEntity = (EdmEntityObject)formatter.ReadFromStreamAsync( + typeof(EdmEntityObject), + stream, + Request.Content, + new ModelStateFormatterLogger(ModelState, "edmEntity")).Result; + if (edmEntity == null && Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) + { + throw (Exception)Request.Properties[ExtendedODataEntityDeserializer.ReadException]; + } + + foreach (var prop in odataBindNullList) + { + edmEntity.TrySetPropertyValue(prop, null); + } + + return edmEntity; + } +#elif NETSTANDARD + /// + /// Заменяет в теле запроса представление навигационных свойств с Имя_Связи@odata.bind:null на представление Имя_Связи:null. + /// + /// Возвращается EdmEntityObject преобразованный из JSON-строки. + private EdmEntityObject ReplaceOdataBindNull() + { + if (!Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.OdataBindNull)) + { + if (Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) + throw (Exception)Request.HttpContext.Items[ExtendedODataEntityDeserializer.ReadException]; + throw new Exception("ReplaceOdataBindNull: edmEntity is null."); + } + + string json = (string)Request.HttpContext.Items[RequestHeadersHookMiddleware.PropertyKeyRequestContent]; + + Dictionary props = JsonConvert.DeserializeObject>(json); + var keys = props.Keys.ToArray(); + var odataBindNullList = new List(); + foreach (var key in keys) + { + var p = key.IndexOf("@odata.bind"); + if (p != -1 && props[key] == null) + { + props.Remove(key); + var newKey = key.Substring(0, p); + if (props.ContainsKey(newKey)) + { + props.Remove(newKey); + } + + var type = (EdmEntityTypeReference)Request.HttpContext.Items[ExtendedODataEntityDeserializer.OdataBindNull]; + + var prop = type.FindNavigationProperty(newKey); + if (prop.Type.IsCollection()) + { + odataBindNullList.Add(newKey); + } + else + { + props.Add(newKey, null); + } + } + } + + json = JsonConvert.SerializeObject(props); + Request.Body = new StringContent(json, Encoding.UTF8, "application/json").ReadAsStreamAsync().Result; + + var ictx = new InputFormatterContext( + HttpContext, + string.Empty, + ModelState, + MetadataProvider.GetMetadataForType(typeof(EdmEntityObject)), + (x, y) => new StreamReader(x, y)); + + IList formatters = ODataInputFormatterFactory.Create(); + + // The JSON input formatter is the first formatter in the OData input formatters list. + InputFormatterResult formatterResult = formatters.First().ReadRequestBodyAsync(ictx, Encoding.UTF8).Result; + + var edmEntity = (EdmEntityObject)formatterResult.Model; + + if (edmEntity == null && Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) + { + throw (Exception)Request.HttpContext.Items[ExtendedODataEntityDeserializer.ReadException]; + } + + foreach (var prop in odataBindNullList) + { + edmEntity.TrySetPropertyValue(prop, null); + } + + return edmEntity; + } +#endif + + /// + /// Общая логика модификации данных: вставка и обновление в зависимости от статуса. + /// Используется в Post (вставка) и Patch (обновление). + /// + /// Модифицируемая сущность. + /// Ключ сущности. Использовать, если не задан в сущности, но специфичен (не д.б. сгенерирован). + /// Созданная сущность. + private DataObject UpdateObject(EdmEntityObject edmEntity, object key) + { + Init(); + + // Список объектов для обновления. + List objs = new List(); + + try + { + // Создадим объект данных по пришедшей сущности. + // В переменной objs сформируем список всех объектов для обновления в нужном порядке: сам объект и зависимые всех уровней. + DataObject obj = GetDataObjectByEdmEntity(edmEntity, key, objs, useUpdateView: true); + + for (int i = 0; i < objs.Count; i++) + { + ObjectStatus status = objs[i].GetStatus(false); + if (status == ObjectStatus.Created) + { + if (!ExecuteCallbackBeforeCreate(objs[i])) + { + objs.RemoveAt(i); + i++; + } + } + else + { + if (!ExecuteCallbackBeforeUpdate(objs[i])) + { + objs.RemoveAt(i); + i++; + } + } + } + + if (!OfflineManager.UnlockObjects(QueryOptions, objs)) + throw new OperationCanceledException(); // TODO + + // Обработка объектов данных в хранилище средствами сервиса данных. + // Статусы объектов должны автоматически получиться верными, т.к. в GetDataObjectByEdmEntity объект создаем + // только при неудачной попытке вычитки и лишь затем инициализируем свойства пришедшими значениями. + var objsArr = objs.ToArray(); + + // Список объектов для обновления без UnAltered. + var objsArrSmall = objsArr.Where(t => t.GetStatus() != ObjectStatus.UnAltered).ToArray(); + if (IsBatchChangeSetRequest) + { +#if NETFRAMEWORK + List dataObjectsToUpdate = (List)Request.Properties[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; + List allProcessedObjects = (List)Request.Properties[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; +#elif NETSTANDARD + List dataObjectsToUpdate = (List)Request.HttpContext.Items[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; + List allProcessedObjects = (List)Request.HttpContext.Items[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; +#endif + dataObjectsToUpdate.AddRange(objsArrSmall); + allProcessedObjects.Add(obj); + } + else + { + _dataService.UpdateObjects(ref objsArrSmall); + } + + // При успешном обновлении вычищаем из файловой системы, файлы подлежащие удалению. + _dataObjectFileAccessor.RemoveFileUploadDirectories(_removingFileDescriptions); + + return obj; + } + catch (Exception) + { + _removingFileDescriptions.Clear(); + throw; + } + } + + /// + /// Получить объект данных по ключу: если объект есть в хранилище, то возвращается загруженным по представлению , иначе - создаётся новый. + /// + /// Тип объекта, не может быть null. + /// Значение ключа. + /// Представление для загрузки объекта. + /// Объект данных. + private DataObject ReturnDataObject(Type objType, object keyValue, View view) + { + if (objType == null) + { + throw new ArgumentNullException(nameof(objType)); + } + + if (keyValue != null) + { + DataObject dataObjectFromCache = DataObjectCache.GetLivingDataObject(objType, keyValue); + + if (dataObjectFromCache != null) + { + // Если объект не новый и не загружен целиком (начиная с ORM@5.1.0-beta15). + if (dataObjectFromCache.GetStatus(false) == ObjectStatus.UnAltered + && dataObjectFromCache.GetLoadingState() != LoadingState.Loaded) + { + // Для обратной совместимости сравним перечень загруженных свойств и свойств в представлении. + /* Данный код срабатывает, например, если в кэше был объект, который загрузился только на уровне первичного ключа. + * + * Данный код также срабатывает в следующей ситуации: есть класс А, у него детейл Б, у которого есть наследник В. + * При загрузке объекта класса А подгрузятся его детейлы, однако они будут подгружены по представлению, которое соответствует классу Б, даже если детейлы класса В. + * Таким образом, в кэше окажутся объекты класса В, которые загружены только по свойствам Б. Раз не все свойства подгружены, то состояние LightLoaded. + * Догружать необходимо только те свойства, что ещё не загружались (потому что загруженные уже могут быть изменены). + */ + string[] loadedProps = dataObjectFromCache.GetLoadedProperties(); + IEnumerable ownProps = view.Properties.Where(p => !p.Name.Contains('.')); + if (!ownProps.All(p => loadedProps.Contains(p.Name))) + { + // Вычитывать объект сразу с детейлами нельзя, поскольку в этой же транзакции могут уже оказать отдельные операции с детейлами и перевычитка затрёт эти изменения. + View miniView = view.Clone(); + DetailInView[] miniViewDetails = miniView.Details; + miniView.Details = new DetailInView[0]; + _dataService.SafeLoadWithMasters(miniView, dataObjectFromCache, DataObjectCache); + + if (miniViewDetails.Length > 0) + { + _dataService.SafeLoadDetails(view, new DataObject[] { dataObjectFromCache }, DataObjectCache); + } + } + } + + return dataObjectFromCache; + } + + // Вычитывать объект сразу с детейлами нельзя, поскольку в этой же транзакции могут уже оказать отдельные операции с детейлами и перевычитка затрёт эти изменения. + View lightView = view.Clone(); + DetailInView[] lightViewDetails = lightView.Details; + lightView.Details = new DetailInView[0]; + + // Проверим существование объекта в базе. + LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(objType, lightView); + lcs.LimitFunction = FunctionBuilder.BuildEquals(keyValue); + lcs.ReturnTop = 2; + DataObject[] dobjs = _dataService.LoadObjects(lcs, DataObjectCache); + if (dobjs.Length == 1) + { + DataObject dataObject = dobjs[0]; + if (lightViewDetails.Any()) + { + // Дочитаем детейлы, чтобы в бизнес-серверах эти данные уже были. Детейлы с изменёнными состояниями будут пропущены из зачитки. + _dataService.SafeLoadDetails(view, new DataObject[] { dataObject }, DataObjectCache); + } + + return dataObject; + } + } + + // Значение ключа автоматически создаётся. + DataObject obj; + + if (keyValue != null) + { + obj = DataObjectCache.CreateDataObject(objType, keyValue); + } + else + { + obj = (DataObject)Activator.CreateInstance(objType); + DataObjectCache.AddDataObject(obj); + } + + return obj; + } + + /// + /// Добавляет объект данных в список на обновление если его там ещё нет. + /// + /// Список на обновление. + /// Объект данных который добавляем. + /// Добавлять в конец списка. + private static void AddDataObject(List objsToUpdate, DataObject dataObject, bool insertToEnd) + { + bool objAlreadyExists = objsToUpdate.Any(o => PKHelper.EQDataObject(o, dataObject, false)); + if (!objAlreadyExists) + { + if (insertToEnd) + { + objsToUpdate.Add(dataObject); // Добавляем в конец списка. + } else + { + objsToUpdate.Insert(0, dataObject); // Добавляем объект в начало списка. + } + + } + } + + /// + /// Построение объекта данных по сущности OData. + /// + /// Сущность OData. + /// Значение ключевого поля сущности. + /// Список объектов для обновления. + /// Признак, что объект добавляется в конец списка обновления. + /// Использовать представление для обновления (вместо представления по умолчанию). + /// Объект данных. + private DataObject GetDataObjectByEdmEntity(EdmEntityObject edmEntity, object key, List dObjs, bool endObject = false, bool useUpdateView = false) + { + if (edmEntity == null) + { + return null; + } + + // Значение свойства. + object value; + + // Получим значение ключа. + IEdmEntityType entityType = (IEdmEntityType)edmEntity.ActualEdmType; + IEnumerable entityProps = entityType.Properties().ToList(); + var keyProperty = entityProps.FirstOrDefault(prop => prop.Name == _model.KeyPropertyName); + if (key != null) + { + value = key; + } + else + { + edmEntity.TryGetPropertyValue(keyProperty.Name, out value); + } + + // Загрузим объект из хранилища, если он там есть, или создадим, если нет, но только для POST. + // Тем самым гарантируем загруженность свойств при необходимости обновления и установку нужного статуса. + Type objType = _model.GetDataObjectType(edmEntity); + + View view = _model.GetDataObjectDefaultView(objType); + if (useUpdateView) + { + view = _model.GetDataObjectUpdateView(objType) ?? view; + } + + DataObject obj = ReturnDataObject(objType, value, view); + + // Добавляем объект в список для обновления, если там ещё нет объекта с таким ключом. + AddDataObject(dObjs, obj, endObject); + + // Все свойства объекта данных означим из пришедшей сущности, если они были там установлены(изменены). + string agregatorPropertyName = Information.GetAgregatePropertyName(objType); + IEnumerable changedPropNames = edmEntity.GetChangedPropertyNames(); + + // Обрабатываем агрегатор первым. + List changedProps = entityProps + .Where(ep => changedPropNames.Contains(ep.Name)) + .OrderBy(ep => ep.Name != agregatorPropertyName) + .ToList(); + foreach (var prop in changedProps) + { + string dataObjectPropName; + try + { + dataObjectPropName = _model.GetDataObjectProperty(entityType.FullTypeName(), prop.Name).Name; + } + catch (KeyNotFoundException) + { + // Check if prop value is the link from master to pseudodetail (pseudoproperty). + if (HasPseudoproperty(entityType, prop.Name)) + { + continue; + } + + throw; + } + + // Обработка мастеров и детейлов. + if (prop is EdmNavigationProperty navProp) + { + edmEntity.TryGetPropertyValue(prop.Name, out value); + + EdmMultiplicity edmMultiplicity = navProp.TargetMultiplicity(); + + // Обработка мастеров. + if (edmMultiplicity == EdmMultiplicity.One || edmMultiplicity == EdmMultiplicity.ZeroOrOne) + { + if (value is EdmEntityObject edmMaster) + { + // Порядок вставки влияет на порядок отправки объектов в UpdateObjects это в свою очередь влияет на то, как срабатывают бизнес-серверы. Бизнес-сервер мастера должен сработать после, а агрегатора перед этим объектом. + bool insertIntoEnd = string.IsNullOrEmpty(agregatorPropertyName); + DataObject master = GetDataObjectByEdmEntity(edmMaster, null, dObjs, insertIntoEnd, useUpdateView); + + Information.SetPropValueByName(obj, dataObjectPropName, master); + + if (dataObjectPropName == agregatorPropertyName) + { + master.AddDetail(obj); + + // Нужно обязательно обозначить детейловое свойство загруженным, поскольку мы вносим в него изменения. + string detailPropName = Information.GetDetailArrayPropertyName(master.GetType(), obj.GetType()); + if (!string.IsNullOrEmpty(detailPropName) && !master.CheckLoadedProperty(detailPropName)) + { + master.AddLoadedProperties(detailPropName); + } + } + } + else + { + Information.SetPropValueByName(obj, dataObjectPropName, null); + } + } + + // Обработка детейлов. + if (edmMultiplicity == EdmMultiplicity.Many) + { + DetailArray detarr = (DetailArray)Information.GetPropValueByName(obj, dataObjectPropName); + + if (value is EdmEntityObjectCollection coll) + { + if (coll != null && coll.Count > 0) + { + foreach (var edmEnt in coll) + { + DataObject det = GetDataObjectByEdmEntity( + (EdmEntityObject)edmEnt, + null, + dObjs, + true, + useUpdateView); + + if (det.__PrimaryKey == null) + { + detarr.AddObject(det); + } + else + { + detarr.SetByKey(det.__PrimaryKey, det); + } + } + } + } + else + { + detarr.Clear(); + } + } + } + else + { + // Обработка собственных свойств объекта (неключевых, т.к. ключ устанавливаем при начальной инициализации объекта obj). + if (prop.Name != keyProperty.Name) + { + Type dataObjectPropertyType = Information.GetPropertyType(objType, dataObjectPropName); + edmEntity.TryGetPropertyValue(prop.Name, out value); + + // Если тип свойства относится к одному из зарегистрированных провайдеров файловых свойств, + // значит свойство файловое, и его нужно обработать особым образом. + if (_dataObjectFileAccessor.HasDataObjectFileProvider(dataObjectPropertyType)) + { + IDataObjectFileProvider dataObjectFileProvider = _dataObjectFileAccessor.GetDataObjectFileProvider(dataObjectPropertyType); + + // Обработка файловых свойств объектов данных. + string serializedFileDescription = value as string; + if (serializedFileDescription == null) + { + // Файловое свойство было сброшено на клиенте. + // Ассоциированный файл должен быть удален, после успешного сохранения изменений. + // Для этого запоминаем метаданные ассоциированного файла, до того как свойство будет сброшено + // (для получения метаданных свойство будет дочитано в объект данных). + // Файловое свойство типа File хранит данные ассоциированного файла прямо в БД, + // соответственно из файловой системы просто нечего удалять, + // поэтому обходим его стороной, чтобы избежать лишных вычиток файлов из БД. + if (dataObjectPropertyType != typeof(File)) + { + var fileDescription = dataObjectFileProvider.GetFileDescription(_dataService, obj, dataObjectPropName); + _removingFileDescriptions.Add(fileDescription); + } + + // Сбрасываем файловое свойство в изменяемом объекте данных. + Information.SetPropValueByName(obj, dataObjectPropName, null); + } + else + { + // Файловое свойство было изменено, но не сброшено. + // Если в метаданных файла присутствует FileUploadKey значит файл был загружен на сервер, + // но еще не был ассоциирован с объектом данных, и это нужно сделать. + FileDescription fileDescription = FileDescription.FromJson(serializedFileDescription); + fileDescription.FilePropertyType = dataObjectPropertyType; + if (!(string.IsNullOrEmpty(fileDescription.FileUploadKey) || string.IsNullOrEmpty(fileDescription.FileName))) + { + var fileProperty = dataObjectFileProvider.GetFileProperty(_dataService, fileDescription); + Information.SetPropValueByName(obj, dataObjectPropName, fileProperty); + + // Файловое свойство типа File хранит данные ассоциированного файла прямо в БД, + // поэтому после успешного сохранения объекта данных, оссоциированный с ним файл должен быть удален из файловой системы. + // Для этого запоминаем описание загруженного файла. + if (dataObjectPropertyType == typeof(File)) + { + _removingFileDescriptions.Add(fileDescription); + } + } + } + } + else + { + // Преобразование типов для примитивных свойств. + if (value is DateTimeOffset) + value = ((DateTimeOffset)value).UtcDateTime; + if (value is EdmEnumObject) + value = ((EdmEnumObject)value).Value; + + Information.SetPropValueByName(obj, dataObjectPropName, value); + } + } + } + } + + if (!string.IsNullOrEmpty(agregatorPropertyName)) + { + DataObject agregator = (DataObject)Information.GetPropValueByName(obj, agregatorPropertyName); + + if (agregator != null) + { + AddDataObject(dObjs, agregator, endObject); + } + } + + return obj; + } + } +} diff --git a/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs b/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs index e0245aa6..a299aa6c 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs @@ -226,6 +226,37 @@ public static void SafeLoadDetails(this IDataService dataService, View view, ILi } } + /// + /// Догрузка объекта по указанному представлению, с загрузкой детейлов с сохранением состояния изменения. + /// + /// Экземпляр сервиса данных. + /// Объект данных, который нужно догрузить. + /// Представление, которое используется для догрузки. + /// Кеш объектов данных. + public static void SafeLoadObject(this IDataService dataService, DataObject dataObject, View view, DataObjectCache dataObjectCache) + { + if (dataService == null) + { + throw new ArgumentNullException(nameof(dataService)); + } + + if (view == null) + { + throw new ArgumentNullException(nameof(view)); + } + + // Вычитывать объект сразу с детейлами нельзя, поскольку в этой же транзакции могут уже оказать отдельные операции с детейлами и перевычитка затрёт эти изменения. + View miniView = view.Clone(); + DetailInView[] miniViewDetails = miniView.Details; + miniView.Details = new DetailInView[0]; + dataService.LoadObject(miniView, dataObject, false, true, dataObjectCache); + + if (miniViewDetails.Length > 0) + { + dataService.SafeLoadDetails(view, new DataObject[] { dataObject }, dataObjectCache); + } + } + /// /// Add detail object to agregator according detail type. /// diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs index c386f791..dcfae14f 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs @@ -511,6 +511,21 @@ public View GetDataObjectDefaultView(Type dataObjectType) } return _metadata[dataObjectType].DefaultView.Clone(); + } + + /// + /// Осуществляет получение представления для обновления объекта, соответствующего заданному типу объекта данных. + /// + /// Тип объекта данных, для которого требуется получить представление для обновления. + /// Представление для обновления объекта, соответствующее заданному типу объекта данных. + public View GetDataObjectUpdateView(Type dataObjectType) + { + if (dataObjectType == null) + { + throw new ArgumentNullException(nameof(dataObjectType), "Contract assertion not met: dataObjectType != null"); + } + + return _metadata[dataObjectType].UpdateView?.Clone(); } /// @@ -534,7 +549,7 @@ public List GetTypes(List strTypes) /// /// Осуществляет получение типа объекта данных, соответствующего заданному имени набора сущностей в EDM-модели. /// - /// Имя набора сущностей в EDM-модели, для которого требуется получить представление по умолчанию. + /// Имя набора сущностей в EDM-модели, для которого требуется получить тип. /// Типа объекта данных, соответствующий заданному имени набора сущностей в EDM-модели. public Type GetDataObjectType(string edmEntitySetName) { @@ -554,6 +569,22 @@ public Type GetDataObjectType(string edmEntitySetName) return dataObjectType; } + /// + /// Осуществляет получение типа объекта данных, соответствующего заданной сущности в EDM-модели. + /// + /// Сущность в EDM-модели, для которой требуется получить тип. + /// Типа объекта данных, соответствующий заданной сущности в EDM-модели. + public Type GetDataObjectType(EdmEntityObject edmEntity) + { + if (edmEntity == null) + { + throw new ArgumentNullException(nameof(edmEntity)); + } + + IEdmEntityType entityType = (IEdmEntityType)edmEntity.ActualEdmType; + return GetDataObjectType(GetEdmEntitySet(entityType).Name); + } + /// /// Получает список зарегистрированных в модели типов, которые являются дочерними к данному родительскому типу. /// В список добавляется также сам родительский тип. diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmTypeSettings.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmTypeSettings.cs index bcfcc3ef..4e4219a1 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmTypeSettings.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmTypeSettings.cs @@ -31,6 +31,11 @@ public sealed class DataObjectEdmTypeSettings /// public View DefaultView { get; set; } + /// + /// View to be used instead of DefaultView on updates (Patch/Batch). + /// + public View UpdateView { get; set; } + /// /// The list of exposed details. /// diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs index 63f84ab6..b6e3bd18 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs @@ -69,6 +69,11 @@ public class DefaultDataObjectEdmModelBuilder : IDataObjectEdmModelBuilder /// public Func EntityPropertyNameBuilder { get; set; } + /// + /// Dictionary of views to be used to load objects on updates. Used to restrict properties for performance (all props are loaded if view is not specified). + /// + private Dictionary UpdateViews { get; set; } + private readonly PropertyInfo _keyProperty = Information.ExtractPropertyInfo(n => n.__PrimaryKey); /// @@ -82,7 +87,8 @@ public DefaultDataObjectEdmModelBuilder( IEnumerable searchAssemblies, bool useNamespaceInEntitySetName = true, PseudoDetailDefinitions pseudoDetailDefinitions = null, - Dictionary additionalMapping = null) + Dictionary additionalMapping = null, + IEnumerable> updateViews = null) { _searchAssemblies = searchAssemblies ?? throw new ArgumentNullException(nameof(searchAssemblies), "Contract assertion not met: searchAssemblies != null"); _useNamespaceInEntitySetName = useNamespaceInEntitySetName; @@ -94,6 +100,11 @@ public DefaultDataObjectEdmModelBuilder( EntityPropertyNameBuilder = BuildEntityPropertyName; EntityTypeNameBuilder = BuildEntityTypeName; EntityTypeNamespaceBuilder = BuildEntityTypeNamespace; + + if (updateViews != null) + { + SetUpdateView(updateViews); + } } /// @@ -173,6 +184,54 @@ public IPseudoDetailDefinition GetPseudoDetailDefinition(object pseudoDetail) .FirstOrDefault(); } + /// + /// Change default views that would be used to load objects on updates. + /// + /// Should be called before MapDataObjectRoute. + /// Key - DataObject type, value - view to be used for objects of that type on updates. + private void SetUpdateView(IEnumerable> updateViews) + { + if (this.UpdateViews is null) + { + this.UpdateViews = new Dictionary(); + } + + if (updateViews != null) + { + foreach (KeyValuePair kvp in updateViews) + { + SetUpdateView(kvp.Key, kvp.Value); + } + } + } + + /// + /// Change for a specific . Update view would be used to load these objects on updates. + /// + /// Should be called before MapDataObjectRoute. + /// DataObject type for which update view would be set. + /// Update view to be used for objects of type . Setting removes update view for the type. + private void SetUpdateView(Type dataObjectType, View updateView) + { + if (!typeof(DataObject).IsAssignableFrom(dataObjectType)) + { + throw new ArgumentException("Update view can be set only for a DataObject.", nameof(dataObjectType)); + } + + if (updateView is null) + { + UpdateViews.Remove(dataObjectType); + return; + } + + if (dataObjectType != updateView.DefineClassType) + { + throw new ArgumentException($"View from DataObject {updateView.DefineClassType} can not be set for a DataObject of type {dataObjectType}.", nameof(updateView)); + } + + UpdateViews[dataObjectType] = updateView; + } + /// /// Adds the property for exposing. /// @@ -238,12 +297,21 @@ private void AddDataObjectWithHierarchy(DataObjectEdmMetadata meta, Type dataObj AddDataObjectWithHierarchy(meta, baseType); + // Extract user-defined update view: + View updateView = null; + if (UpdateViews != null) + { + UpdateViews.TryGetValue(dataObjectType, out updateView); + } + var typeSettings = meta[dataObjectType] = new DataObjectEdmTypeSettings { EnableCollection = true, CollectionName = EntitySetNameBuilder(dataObjectType), - DefaultView = DynamicView.Create(dataObjectType, null).View + DefaultView = DynamicView.Create(dataObjectType, null).View, + UpdateView = updateView, }; + AddProperties(dataObjectType, typeSettings); if (typeSettings.KeyType != null) meta[baseType].KeyType = null; diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs index 66353bfb..82210a42 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs @@ -1,1778 +1,1925 @@ -namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Update -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Net; - using System.Net.Http; - using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing; - using ICSSoft.STORMNET; - using ICSSoft.STORMNET.Business; - using ICSSoft.STORMNET.Business.LINQProvider; - using ICSSoft.STORMNET.Exceptions; - using ICSSoft.STORMNET.KeyGen; - using ICSSoft.STORMNET.Windows.Forms; - using NewPlatform.Flexberry.ORM.ODataService.Tests.Extensions; - using NewPlatform.Flexberry.ORM.ODataService.Tests.Helpers; - - using Newtonsoft.Json; - using Xunit; - - /// - /// Класс тестов для тестирования операций модификации данных OData-сервисом (вставка, обновление, удаление). - /// - public class ModifyDataTest : BaseODataServiceIntegratedTest - { -#if NETCOREAPP - /// - /// Конструктор по-умолчанию. - /// - /// Фабрика для приложения. - /// Вывод отладочной информации. - public ModifyDataTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) - : base(factory, output) - { - } -#endif - - /// - /// Осуществляет проверку того, что при PATCH запросах происходит вставка и удаление связей объекта. - /// Зависимые объекты (мастера, детейлы) представлены в виде - Имя_Связи@odata.bind: Имя_Набора_Сущностей(ключ) или Имя_Связи@odata.bind: [ Имя_Набора_Сущностей(ключ) ] . - /// Тест проверяет следующие факты: - /// - /// Вставка связи мастерового объекта. - /// Удаление связи мастеровго объекта путём присвоения null свойству. - /// Удаление связи мастеровго объекта путём присвоения null для Имя_Связи@odata.bind. - /// - /// - [Fact] - public void PatchNavigationPropertiesTest() - { - ActODataService(args => - { - ExternalLangDef.LanguageDef.DataService = args.DataService; - string[] берлогаPropertiesNames = - { - Information.ExtractPropertyPath<Берлога>(x => x.ПолеБС), - Information.ExtractPropertyPath<Берлога>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Берлога>(x => x.Наименование), - Information.ExtractPropertyPath<Берлога>(x => x.Заброшена) - }; - string[] лесPropertiesNames = - { - Information.ExtractPropertyPath<Лес>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Лес>(x => x.Площадь), - Information.ExtractPropertyPath<Лес>(x => x.Название), - Information.ExtractPropertyPath<Лес>(x => x.ДатаПоследнегоОсмотра) - }; - string[] медвPropertiesNames = - { - Information.ExtractPropertyPath<Медведь>(x => x.ПолеБС), - Information.ExtractPropertyPath<Медведь>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Медведь>(x => x.Вес), - - // Information.ExtractPropertyPath<Медведь>(x => x.Пол), - Information.ExtractPropertyPath<Медведь>(x => x.ДатаРождения), - Information.ExtractPropertyPath<Медведь>(x => x.ПорядковыйНомер) - }; - var берлогаDynamicView = new View(new ViewAttribute("берлогаDynamicView", берлогаPropertiesNames), typeof(Берлога)); - var лесDynamicView = new View(new ViewAttribute("лесDynamicView", лесPropertiesNames), typeof(Лес)); - var медвDynamicView = new View(new ViewAttribute("медвDynamicView", медвPropertiesNames), typeof(Медведь)); - - // Объекты для тестирования создания. - Медведь медв = new Медведь { Вес = 48 }; - Лес лес1 = new Лес { Название = "Бор" }; - Лес лес2 = new Лес { Название = "Березовая роща" }; - var берлога1 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; - var берлога2 = new Берлога { Наименование = "Для плохого настроения", ЛесРасположения = лес2 }; - медв.Берлога.Add(берлога1); - var objs = new DataObject[] { медв, лес1, лес2, берлога1 }; - args.DataService.UpdateObjects(ref objs); - string requestUrl; - - string requestJsonDataМедв = медв.ToJson(медвDynamicView, args.Token.Model); - DataObjectDictionary objJson = DataObjectDictionary.Parse(requestJsonDataМедв, медвDynamicView, args.Token.Model); - - objJson.Add("ЛесОбитания@odata.bind", string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Лес)).Name, - ((KeyGuid)лес1.__PrimaryKey).Guid.ToString("D"))); - - requestJsonDataМедв = objJson.Serialize(); - requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((KeyGuid)медв.__PrimaryKey).Guid.ToString()); - using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonDataМедв).Result) - { - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - } - - var requestJsonDataБерлога = берлога1.ToJson(берлогаDynamicView, args.Token.Model); - objJson = DataObjectDictionary.Parse(requestJsonDataБерлога, берлогаDynamicView, args.Token.Model); - objJson.Add("Медведь", null); - requestJsonDataБерлога = objJson.Serialize(); - requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Берлога)).Name, ((KeyGuid)медв.__PrimaryKey).Guid.ToString()); - using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonDataБерлога).Result) - { - Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); - } - - requestJsonDataМедв = медв.ToJson(медвDynamicView, args.Token.Model); - objJson = DataObjectDictionary.Parse(requestJsonDataМедв, медвDynamicView, args.Token.Model); - objJson.Add("ЛесОбитания@odata.bind", null); - requestJsonDataМедв = objJson.Serialize(); - requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((KeyGuid)медв.__PrimaryKey).Guid.ToString()); - - using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonDataМедв).Result) - { - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - } - - requestJsonDataМедв = медв.ToJson(медвDynamicView, args.Token.Model); - objJson = DataObjectDictionary.Parse(requestJsonDataМедв, медвDynamicView, args.Token.Model); - objJson.Add("ЛесОбитания", null); - requestJsonDataМедв = objJson.Serialize(); - requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((KeyGuid)медв.__PrimaryKey).Guid.ToString()); - - using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonDataМедв).Result) - { - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - } - - requestJsonDataМедв = медв.ToJson(медвDynamicView, args.Token.Model); - objJson = DataObjectDictionary.Parse(requestJsonDataМедв, медвDynamicView, args.Token.Model); - objJson.Add("Берлога@odata.bind", null); - requestJsonDataМедв = objJson.Serialize(); - requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((KeyGuid)медв.__PrimaryKey).Guid.ToString()); - - using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonDataМедв).Result) - { - Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); - } - }); - } - - /// - /// Осуществляет проверку того, что при POST запросах происходит вставка и удаление связей объекта. - /// Зависимые объекты (мастера, детейлы) представлены в виде - Имя_Связи@odata.bind: Имя_Набора_Сущностей(ключ) или Имя_Связи@odata.bind: [ Имя_Набора_Сущностей(ключ) ] . - /// Тест проверяет следующие факты: - /// - /// Вставка связи мастерового объекта. - /// Удаление связи мастеровго объекта путём присвоения null свойству. - /// Удаление связи мастеровго объекта путём присвоения null для Имя_Связи@odata.bind. - /// - /// - [Fact] - public void PostNavigationPropertiesTest() - { - string[] берлогаPropertiesNames = - { - // Information.ExtractPropertyPath<Берлога>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Берлога>(x => x.Наименование), - Information.ExtractPropertyPath<Берлога>(x => x.Заброшена) - }; - string[] лесPropertiesNames = - { - // Information.ExtractPropertyPath<Лес>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Лес>(x => x.Площадь), - Information.ExtractPropertyPath<Лес>(x => x.Название), - Information.ExtractPropertyPath<Лес>(x => x.ДатаПоследнегоОсмотра) - }; - string[] медвPropertiesNames = - { - // Information.ExtractPropertyPath<Медведь>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Медведь>(x => x.Вес), - - // Information.ExtractPropertyPath<Медведь>(x => x.Пол), - Information.ExtractPropertyPath<Медведь>(x => x.ДатаРождения), - Information.ExtractPropertyPath<Медведь>(x => x.ПорядковыйНомер) - }; - var берлогаDynamicView = new View(new ViewAttribute("берлогаDynamicView", берлогаPropertiesNames), typeof(Берлога)); - var лесDynamicView = new View(new ViewAttribute("лесDynamicView", лесPropertiesNames), typeof(Лес)); - var медвDynamicView = new View(new ViewAttribute("медвDynamicView", медвPropertiesNames), typeof(Медведь)); - - // Объекты для тестирования создания. - Медведь медв = new Медведь { Вес = 48 }; - Лес лес1 = new Лес { Название = "Бор" }; - var берлога1 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; - ActODataService(args => - { - string requestUrl; - string receivedJsonЛес1, receivedJsonМедв; - string requestJsonDataЛес1 = лес1.ToJson(лесDynamicView, args.Token.Model); - requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Лес)).Name); - using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonDataЛес1).Result) - { - // Убедимся, что запрос завершился успешно. - Assert.Equal(HttpStatusCode.Created, response.StatusCode); - - // Получим строку с ответом (в ней должна вернуться созданная сущность). - receivedJsonЛес1 = response.Content.ReadAsStringAsync().Result.Beautify(); - } - - string requestJsonDataМедв = медв.ToJson(медвDynamicView, args.Token.Model); - DataObjectDictionary objJsonМедв = DataObjectDictionary.Parse(requestJsonDataМедв, медвDynamicView, args.Token.Model); - Dictionary receivedDict = JsonConvert.DeserializeObject>(receivedJsonЛес1); - - objJsonМедв.Add("ЛесОбитания@odata.bind", string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Лес)).Name, - receivedDict["__PrimaryKey"])); - objJsonМедв.Add("Берлога@odata.bind", null); - - requestJsonDataМедв = objJsonМедв.Serialize(); - requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name); - using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonDataМедв).Result) - { - // Убедимся, что запрос завершился успешно. - Assert.Equal(HttpStatusCode.Created, response.StatusCode); - - // Получим строку с ответом (в ней должна вернуться созданная сущность). - receivedJsonМедв = response.Content.ReadAsStringAsync().Result.Beautify(); - } - - var requestJsonDataБерлога = берлога1.ToJson(берлогаDynamicView, args.Token.Model); - var objJson = DataObjectDictionary.Parse(requestJsonDataБерлога, берлогаDynamicView, args.Token.Model); - receivedDict = JsonConvert.DeserializeObject>(receivedJsonМедв); - objJson.Add("Медведь@odata.bind", string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, - receivedDict["__PrimaryKey"])); - requestJsonDataБерлога = objJson.Serialize(); - requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Берлога)).Name); - using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonDataБерлога).Result) - { - Assert.Equal(HttpStatusCode.Created, response.StatusCode); - } - }); - } - - /// - /// Осуществляет проверку того, что при POST запросах происходит вставка объекта, - /// зависимые объекты (мастера, детейлы) обрабатываются в зависимости от наличия в БД - вставляются или обновляются. - /// - [Fact] - public void PostComplexObjectTest() - { - ActODataService(args => - { - string[] берлогаPropertiesNames = - { - Information.ExtractPropertyPath<Берлога>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Берлога>(x => x.Наименование), - Information.ExtractPropertyPath<Берлога>(x => x.ЛесРасположения), - Information.ExtractPropertyPath<Берлога>(x => x.ЛесРасположения.Название), - }; - string[] медвPropertiesNames = - { - Information.ExtractPropertyPath<Медведь>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Медведь>(x => x.Вес), - Information.ExtractPropertyPath<Медведь>(x => x.ЛесОбитания), - Information.ExtractPropertyPath<Медведь>(x => x.ЛесОбитания.Название), - }; - var берлогаDynamicView = new View(new ViewAttribute("берлогаDynamicView", берлогаPropertiesNames), typeof(Берлога)); - var медвDynamicView = new View(new ViewAttribute("медвDynamicView", медвPropertiesNames), typeof(Медведь)); - медвDynamicView.AddDetailInView(Information.ExtractPropertyPath<Медведь>(x => x.Берлога), берлогаDynamicView, true); - - // Объекты для тестирования создания. - Медведь медв = new Медведь { Вес = 48 }; - Лес лес1 = new Лес { Название = "Бор" }; - Лес лес2 = new Лес { Название = "Березовая роща" }; - медв.ЛесОбитания = лес1; - var берлога1 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; - var берлога2 = new Берлога { Наименование = "Для плохого настроения", ЛесРасположения = лес2 }; - медв.Берлога.Add(берлога1); - медв.Берлога.Add(берлога2); - - string json = медв.ToJson(медвDynamicView, args.Token.Model); - - // Формируем URL запроса к OData-сервису. - string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name); - - // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. - HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, json).Result; - - // Убедимся, что запрос завершился успешно. - Assert.Equal(HttpStatusCode.Created, response.StatusCode); - - // Получим строку с ответом. - string receivedJsonObjs = response.Content.ReadAsStringAsync().Result.Beautify(); - - // В ответе приходит объект с созданной сущностью. - // Преобразуем полученный объект в словарь. - Dictionary receivedObjs = JsonConvert.DeserializeObject>(receivedJsonObjs); - - // Проверяем созданный объект, вычитав с помощью DataService - DataObject createdObj = new Медведь { __PrimaryKey = медв.__PrimaryKey }; - args.DataService.LoadObject(createdObj); - - Assert.Equal(ObjectStatus.UnAltered, createdObj.GetStatus()); - Assert.Equal(((Медведь)createdObj).Вес, (int)(long)receivedObjs["Вес"]); - - // Проверяем что созданы все зависимые объекты, вычитав с помощью DataService - var ldef = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef; - LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Лес), Лес.Views.ЛесE); - lcs.LoadingTypes = new[] { typeof(Лес) }; - DataObject[] dobjs = args.DataService.LoadObjects(lcs); - - Assert.Equal(2, dobjs.Length); - - lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Берлога), Берлога.Views.БерлогаE); - lcs.LoadingTypes = new[] { typeof(Берлога) }; - dobjs = args.DataService.LoadObjects(lcs); - Assert.Equal(2, dobjs.Length); - - // Создание объекта и обновление связанных - // Создаем нового медведя: в его мастере ЛесОбитания - лес1, но в нём изменим Название; в детейлы заберем от первого медведя детейл2, изменив Название в мастере детейла. - // Подготовка тестовых данных в формате OData. - Медведь медвежонок = new Медведь { Вес = 12 }; - var берлога3 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; - медвежонок.Берлога.Add(берлога3); - - медв.Берлога.Remove(берлога2); - медвежонок.Берлога.Add(берлога2); - - лес1.Название = лес1.Название + "(обновл)"; - лес2.Название = лес2.Название + "(обновл)"; - - json = медвежонок.ToJson(медвDynamicView, args.Token.Model); - - // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. - response = args.HttpClient.PostAsJsonStringAsync(requestUrl, json).Result; - - // Убедимся, что запрос завершился успешно. - Assert.Equal(HttpStatusCode.Created, response.StatusCode); - - // Проверяем созданный объект, вычитав с помощью DataService - createdObj = new Медведь { __PrimaryKey = медвежонок.__PrimaryKey }; - args.DataService.LoadObject(createdObj); - - Assert.Equal(ObjectStatus.UnAltered, createdObj.GetStatus()); - Assert.Equal(12, ((Медведь)createdObj).Вес); - - // Проверяем что созданы все зависимые объекты, вычитав с помощью DataService - ldef = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef; - lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Лес), Лес.Views.ЛесE); - lcs.LoadingTypes = new[] { typeof(Лес) }; - lcs.LimitFunction = ldef.GetFunction( - ldef.funcEQ, - new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.StormMainObjectKey), - лес1.__PrimaryKey); - dobjs = args.DataService.LoadObjects(lcs); - - Assert.Single(dobjs); - Assert.EndsWith("(обновл)", ((Лес)dobjs[0]).Название); - - lcs.LimitFunction = ldef.GetFunction( - ldef.funcEQ, - new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.StormMainObjectKey), - лес2.__PrimaryKey); - dobjs = args.DataService.LoadObjects(lcs); - - Assert.Single(dobjs); - Assert.EndsWith("(обновл)", ((Лес)dobjs[0]).Название); - - lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Берлога), Берлога.Views.БерлогаE); - lcs.LoadingTypes = new[] { typeof(Берлога) }; - lcs.LimitFunction = ldef.GetFunction( - ldef.funcEQ, - new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, "Медведь"), - медв.__PrimaryKey); - dobjs = args.DataService.LoadObjects(lcs); - - Assert.Single(dobjs); - - lcs.LimitFunction = ldef.GetFunction( - ldef.funcEQ, - new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, "Медведь"), - медвежонок.__PrimaryKey); - dobjs = args.DataService.LoadObjects(lcs); - - Assert.Equal(2, dobjs.Length); - }); - } - - /// - /// Осуществляет проверку создания сущности с датой и незаданным первичным ключом. - /// - [Fact] - public void PostObjDateTimeNoPKTest() - { - ActODataService(args => - { - // Создаем объект данных. - Лес country = new Лес { Площадь = 10, Название = "Бор", ДатаПоследнегоОсмотра = (ICSSoft.STORMNET.UserDataTypes.NullableDateTime)DateTime.Now }; - - // Преобразуем объект данных в JSON-строку. - string[] contryPropertiesNames = - { - Information.ExtractPropertyPath<Лес>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Лес>(x => x.Площадь), - Information.ExtractPropertyPath<Лес>(x => x.Название), - Information.ExtractPropertyPath<Лес>(x => x.ДатаПоследнегоОсмотра) - }; - var contryDynamicView = new View(new ViewAttribute("ContryDynamicView", contryPropertiesNames), typeof(Лес)); - - string requestJsonData = country.ToJson(contryDynamicView, args.Token.Model); - - // Формируем URL запроса к OData-сервису. - string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Лес)).Name); - - // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. - using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonData).Result) - { - // Убедимся, что запрос завершился успешно. - Assert.Equal(HttpStatusCode.Created, response.StatusCode); - } - }); - } - - /// - /// Осуществляет проверку того, что при POST запросах, отправляющих простейшие объекты JSON-строкой, происходит корректная вставка. - /// - [Fact] - public void PostDataTimeValueTest() - { - ActODataService(args => - { - // Создаем объект данных. - КлассСМножествомТипов класс = new КлассСМножествомТипов() { PropertyDateTime = DateTime.Now }; - - // Преобразуем объект данных в JSON-строку. - string[] classPropertiesNames = - { - Information.ExtractPropertyPath<КлассСМножествомТипов>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<КлассСМножествомТипов>(x => x.PropertyDateTime) - }; - - var classDynamicView = new View(new ViewAttribute("classDynamicView", classPropertiesNames), typeof(КлассСМножествомТипов)); - - string requestJsonData = класс.ToJson(classDynamicView, args.Token.Model); - - // Формируем URL запроса к OData-сервису. - string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(КлассСМножествомТипов)).Name); - - // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. - using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonData).Result) - { - // Убедимся, что запрос завершился успешно. - Assert.Equal(HttpStatusCode.Created, response.StatusCode); - } - }); - } - - /// - /// Осуществляет проверку того, что при POST запросах, отправляющих простейшие объекты JSON-строкой, происходит корректная вставка. - /// - [Fact] - public void PostSimpleObjectTest() - { - ActODataService(args => - { - // Создаем объект данных. - Страна country = new Страна { Название = "Russia" }; - - // Преобразуем объект данных в JSON-строку. - string[] contryPropertiesNames = - { - Information.ExtractPropertyPath<Страна>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Страна>(x => x.Название) - }; - var contryDynamicView = new View(new ViewAttribute("ContryDynamicView", contryPropertiesNames), typeof(Страна)); - - string requestJsonData = country.ToJson(contryDynamicView, args.Token.Model); - - // Формируем URL запроса к OData-сервису. - string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Страна)).Name); - - // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. - using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonData).Result) - { - // Убедимся, что запрос завершился успешно. - Assert.Equal(HttpStatusCode.Created, response.StatusCode); - - // Получим строку с ответом (в ней должна вернуться созданная сущность). - string receivedJsonCountry = response.Content.ReadAsStringAsync().Result.Beautify(); - - // Преобразуем полученный объект в словарь (c приведением типов значений к типам свойств объекта данных). - DataObjectDictionary receivedDictionaryCountry = DataObjectDictionary.Parse(receivedJsonCountry, contryDynamicView, args.Token.Model); - - // Сравним значения полученного и исходного объектов. - Assert.True(receivedDictionaryCountry.HasProperty(Information.ExtractPropertyPath<Страна>(x => x.__PrimaryKey))); - Assert.Equal(country.__PrimaryKey, receivedDictionaryCountry.GetPropertyValue(Information.ExtractPropertyPath<Страна>(x => x.__PrimaryKey))); - - Assert.True(receivedDictionaryCountry.HasProperty(Information.ExtractPropertyPath<Страна>(x => x.Название))); - Assert.Equal(country.Название, receivedDictionaryCountry.GetPropertyValue(Information.ExtractPropertyPath<Страна>(x => x.Название))); - - // Проверяем что объект данных был корректно создан в базе. - Страна createdCountry = new Страна { __PrimaryKey = country.__PrimaryKey }; - args.DataService.LoadObject(contryDynamicView, createdCountry); - - Assert.Equal(country.Название, createdCountry.Название); - } - }); - } - - /// - /// Осуществляет проверку частичного обновления данных (передаются только значения модифицированных атрибутов) - /// для простейшего объекта, т.е. мастера и детейлы не заданы и не модифицируются. - /// Объект с изменениями передается JSON-строкой. - /// - [Fact] - public void PatchSimpleObjectTest() - { - ActODataService(args => - { - // Создаем объект данных, который потом будем обновлять, и добавляем в базу обычным сервисом данных. - Лес лес = new Лес { Название = "Чаща", Площадь = 100 }; - args.DataService.UpdateObject(лес); - - // Обновляем часть атрибутов. - лес.Площадь = 150; - - // Представление, по которому будем обновлять. - string[] медвPropertiesNames = - { - Information.ExtractPropertyPath<Лес>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Лес>(x => x.Площадь) - }; - var лесDynamicView = new View(new ViewAttribute("лесDynamicView", медвPropertiesNames), typeof(Лес)); - - // Преобразуем объект данных в JSON-строку. - string requestJsonData = лес.ToJson(лесDynamicView, args.Token.Model); - - // Формируем URL запроса к OData-сервису (с идентификатором изменяемой сущности). - string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Лес)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)лес.__PrimaryKey).Guid.ToString()); - - // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем обновляемый объект в формате JSON. - using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result) - { - // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок обновления). - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - - // Проверяем что объект данных был обновлен в базе, причем только по переданным атрибутам. - Лес updatedЛес = new Лес { __PrimaryKey = лес.__PrimaryKey }; - args.DataService.LoadObject(updatedЛес); - - Assert.Equal(лес.Площадь, updatedЛес.Площадь); - Assert.Equal(лес.Название, updatedЛес.Название); - } - }); - } - - /// - /// Осуществляет проверку частичного обновления данных (передаются только значения модифицированных атрибутов) - /// для мастера в детейле. - /// По стандарту сервер OData не должен обрабатывать такой запрос и поэтому вернёт HTTP Код 400. - /// Объект с изменениями передается JSON-строкой. - /// - [Fact] - public void PatchComplexObjectTest() - { - ActODataService(args => - { - // Объекты для тестирования обновления. - Медведь медв = new Медведь { Вес = 48 }; - Лес лес1 = new Лес { Название = "Бор" }; - Лес лес2 = new Лес { Название = "Березовая роща" }; - медв.ЛесОбитания = лес1; - var берлога1 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; - var берлога2 = new Берлога { Наименование = "Для плохого настроения", ЛесРасположения = лес2 }; - медв.Берлога.Add(берлога1); - медв.Берлога.Add(берлога2); - - var objs = new DataObject[] { медв, лес1, лес2, берлога1, берлога2 }; - - args.DataService.UpdateObjects(ref objs); - - // Преобразуем объект данных в JSON-строку. - string[] медвPropertiesNames = - { - Information.ExtractPropertyPath<Медведь>(x => x.__PrimaryKey), - }; - var медвDynamicView = new View(new ViewAttribute("медвDynamicView", медвPropertiesNames), typeof(Медведь)); - - string[] берлогаPropertiesNames = - { - Information.ExtractPropertyPath<Берлога>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Берлога>(x => x.ЛесРасположения), - }; - var берлогаDynamicView = new View(new ViewAttribute("берлогаDynamicView", берлогаPropertiesNames), typeof(Берлога)); - - медвDynamicView.AddDetailInView(Information.ExtractPropertyPath<Медведь>(x => x.Берлога), берлогаDynamicView, true); - - Медведь медвДляЗапроса = new Медведь { __PrimaryKey = медв.__PrimaryKey }; - Берлога берлогаДляЗапроса = new Берлога { __PrimaryKey = берлога1.__PrimaryKey, ЛесРасположения = лес2 }; - медвДляЗапроса.Берлога.Add(берлогаДляЗапроса); - - string requestJsonData = медвДляЗапроса.ToJson(медвDynamicView, args.Token.Model); - - // Формируем URL запроса к OData-сервису (с идентификатором изменяемой сущности). - string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)медв.__PrimaryKey).Guid.ToString()); - - // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем обновляемый объект в формате JSON. - using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result) - { - Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); - } - }); - } - - /// - /// Осуществляет проверку удаления данных. - /// - [Fact] - public void DeleteObjectTest() - { - ActODataService(args => - { - // ------------------ Удаление простого объекта с ключом __PrimaryKey в виде строки ----------------------------- - // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. - var класс = new КлассСоСтроковымКлючом(); - args.DataService.UpdateObject(класс); - // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). - string requestUrl = string.Format("http://localhost/odata/{0}('{1}')", args.Token.Model.GetEdmEntitySet(typeof(КлассСоСтроковымКлючом)).Name, класс.__PrimaryKey); - - // Обращаемся к OData-сервису и обрабатываем ответ. - using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) - { - // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - - // Проверяем что объект данных был удален из базы. - bool exists = true; - КлассСоСтроковымКлючом deletedКлассСоСтроковымКлючом = new КлассСоСтроковымКлючом { __PrimaryKey = класс.__PrimaryKey }; - try - { - args.DataService.LoadObject(deletedКлассСоСтроковымКлючом); - } - catch (Exception ex) - { - if (ex is CantFindDataObjectException) - exists = false; - } - - Assert.False(exists); - } - - // ------------------ Удаление простого объекта ----------------------------- - // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. - Медведь медв = new Медведь { Пол = tПол.Мужской, Вес = 80, ПорядковыйНомер = 1 }; - args.DataService.UpdateObject(медв); - - // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). - requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)медв.__PrimaryKey).Guid.ToString()); - - // Обращаемся к OData-сервису и обрабатываем ответ. - using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) - { - // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - - // Проверяем что объект данных был удален из базы. - bool exists = true; - Медведь deletedМедв = new Медведь { __PrimaryKey = медв.__PrimaryKey }; - try - { - args.DataService.LoadObject(deletedМедв); - } - catch (Exception ex) - { - if (ex is CantFindDataObjectException) - exists = false; - } - - Assert.False(exists); - } - - // ------------------ Удаление детейла и объекта с детейлами ----------------------------- - // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. - медв = new Медведь { Пол = tПол.Мужской, Вес = 80, ПорядковыйНомер = 1 }; - медв.Берлога.Add(new Берлога { Наименование = "Берлога для хорошего настроения" }); - медв.Берлога.Add(new Берлога { Наименование = "Берлога для плохого настроения" }); - Берлога delБерлога = new Берлога { Наименование = "Отдельно удаляемая берлога" }; - медв.Берлога.Add(delБерлога); - args.DataService.UpdateObject(медв); - - // Проверяем что до вызова удалений в базе есть все детейлы. - var ldef = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef; - LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Берлога), Берлога.Views.БерлогаE); - lcs.LoadingTypes = new[] { typeof(Берлога) }; - ICSSoft.STORMNET.DataObject[] dobjs = args.DataService.LoadObjects(lcs); - - Assert.Equal(3, dobjs.Length); - - // Формируем URL запроса к OData-сервису для удаления объекта-детейла (с идентификатором удаляемой сущности). - requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Берлога)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)delБерлога.__PrimaryKey).Guid.ToString()); - - // Обращаемся к OData-сервису и обрабатываем ответ. - using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) - { - // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - - // Проверяем что объект-детейл был удален из базы. - bool exists = true; - Берлога deletedБерлога = new Берлога { __PrimaryKey = delБерлога.__PrimaryKey }; - try - { - args.DataService.LoadObject(deletedБерлога); - } - catch (Exception ex) - { - if (ex is CantFindDataObjectException) - exists = false; - } - - Assert.False(exists); - - // Проверяем что объект-агрегатор остался в базе. - exists = true; - Медведь deletedМедв = new Медведь { __PrimaryKey = медв.__PrimaryKey }; - try - { - args.DataService.LoadObject(deletedМедв); - } - catch (Exception ex) - { - if (ex is CantFindDataObjectException) - exists = false; - } - - Assert.True(exists); - - // Проверяем что детейлов объекта в базе осталось на 1 меньше, чем создавали. - dobjs = args.DataService.LoadObjects(lcs); - - Assert.Equal(2, dobjs.Length); - } - - // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). - requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)медв.__PrimaryKey).Guid.ToString()); - - // Обращаемся к OData-сервису для удаления объекта с детейлами и обрабатываем ответ. - using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) - { - // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - - // Проверяем что объект данных был удален из базы. - bool exists = true; - Медведь deletedМедв = new Медведь { __PrimaryKey = медв.__PrimaryKey }; - try - { - args.DataService.LoadObject(deletedМедв); - } - catch (Exception ex) - { - if (ex is CantFindDataObjectException) - exists = false; - } - - Assert.False(exists); - - // Проверяем что детейлов объекта в базе не осталось. - dobjs = args.DataService.LoadObjects(lcs); - - Assert.Equal(0, dobjs.Length); - } - }); - } - - /// - /// Осуществляет проверку обновления мастера с иерархическими детейлами. - /// Мастер и детейлы заданы и модифицируются. - /// Объект с изменениями передается JSON-строкой. - /// - [Fact] - public void UpdateCicleDeteilTest() - { - ActODataService(args => - { - // Мастер тестирования обновления. - TestMaster testMaster1 = new TestMaster { TestMasterName = "TestMasterName" }; - var objs = new DataObject[] { testMaster1 }; - args.DataService.UpdateObjects(ref objs); - - // Колличество создаваемых детейлов. - int deteilCount = 20; - - // Детейлы тестирования обновления. - TestDetailWithCicle[] testDetailWithCicleArray = new TestDetailWithCicle[deteilCount]; - TestDetailWithCicle testDetailWithCicle = null; - - for (int i = 0; i < deteilCount; i++) - { - if (i == 0) - { - testDetailWithCicle = new TestDetailWithCicle { TestDetailName = "TestDeteilName0", TestMaster = testMaster1 }; - } - else - { - testDetailWithCicle = new TestDetailWithCicle { TestDetailName = "TestDeteilName" + i.ToString(), TestMaster = testMaster1, Parent = testDetailWithCicle }; - } - - testDetailWithCicleArray[i] = testDetailWithCicle; - objs = new DataObject[] { testDetailWithCicle }; - args.DataService.UpdateObjects(ref objs); - } - - // Обновляем атрибут мастера. - testMaster1.TestMasterName = "TestMasterNameUpdate"; - - // Представление, по которому будем обновлять. - string[] testMasterPropertiesNames = - { - Information.ExtractPropertyPath(x => x.__PrimaryKey), - Information.ExtractPropertyPath(x => x.TestMasterName) - }; - var testMasterDynamicView = new View(new ViewAttribute("testMasterDynamicView", testMasterPropertiesNames), typeof(TestMaster)); - - // Преобразуем объект данных в JSON-строку. - string requestJsonData = testMaster1.ToJson(testMasterDynamicView, args.Token.Model); - - // Формируем URL запроса к OData-сервису (с идентификатором изменяемой сущности). - string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(TestMaster)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)testMaster1.__PrimaryKey).Guid.ToString()); - - // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем обновляемый объект в формате JSON. - using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result) - { - // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок обновления). - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - - // Проверяем что объект данных был обновлен в базе, причем только по переданным атрибутам. - TestMaster updatedTestMaster = new TestMaster { __PrimaryKey = testMaster1.__PrimaryKey }; - args.DataService.LoadObject(updatedTestMaster); - - Assert.Equal(testMaster1.TestMasterName, updatedTestMaster.TestMasterName); - } - - // Обновление атрибутов Детейлов. - for (int i = 0; i < deteilCount; i++) - { - testDetailWithCicleArray[i].TestDetailName += "Update"; - } - - // Представление, по которому будем обновлять. - string[] testDetailWithCiclePropertiesNames = - { - Information.ExtractPropertyPath(x => x.__PrimaryKey), - Information.ExtractPropertyPath(x => x.TestDetailName) - }; - - var testDetailWithCicleDynamicView = new View(new ViewAttribute("testDetailWithCicleDynamicView", testDetailWithCiclePropertiesNames), typeof(TestDetailWithCicle)); - - for (int i = 0; i < deteilCount; i++) - { - // Преобразуем объект данных в JSON-строку. - string requestJsonDatatestDetailWithCicle = testDetailWithCicleArray[i].ToJson(testDetailWithCicleDynamicView, args.Token.Model); - DataObjectDictionary objJson = DataObjectDictionary.Parse(requestJsonDatatestDetailWithCicle, testDetailWithCicleDynamicView, args.Token.Model); - - objJson.Add("TestMaster@odata.bind", string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(TestMaster)).Name, - ((KeyGuid)testMaster1.__PrimaryKey).Guid.ToString("D"))); - - if (i != 0) - { - objJson.Add("Parent@odata.bind", string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(TestDetailWithCicle)).Name, - ((KeyGuid)testDetailWithCicleArray[i - 1].__PrimaryKey).Guid.ToString("D"))); - } - - requestJsonDatatestDetailWithCicle = objJson.Serialize(); - - // Формируем URL запроса к OData-сервису. - requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(TestDetailWithCicle)).Name, ((KeyGuid)testDetailWithCicleArray[i].__PrimaryKey).Guid.ToString()); - - using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonDatatestDetailWithCicle).Result) - { - // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок обновления). - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - - // Проверяем что объект данных был обновлен в базе, причем только по переданным атрибутам. - TestDetailWithCicle updatedTestDetailWithCicle = new TestDetailWithCicle { __PrimaryKey = testDetailWithCicleArray[i].__PrimaryKey }; - args.DataService.LoadObject(updatedTestDetailWithCicle); - - Assert.Equal(testDetailWithCicleArray[i].TestDetailName, updatedTestDetailWithCicle.TestDetailName); - } - } - }); - } - - /// - /// Test save details with inheritance. - /// - [Fact] - public void SaveDetailWithInheritanceTest() - { - ActODataService(args => - { - var базовыйКласс = new БазовыйКласс() { Свойство1 = "sv1" }; - var детейл = new ДетейлНаследник() { prop1 = 1 }; - базовыйКласс.Детейл.Add(детейл); - - args.DataService.UpdateObject(базовыйКласс); - int newValue = 2; - детейл.prop1 = newValue; - - const string baseUrl = "http://localhost/odata"; - - string detJson = детейл.ToJson(ДетейлНаследник.Views.ДетейлНаследникE, args.Token.Model); - detJson = detJson.Replace(nameof(ДетейлНаследник.БазовыйКласс), $"{nameof(ДетейлНаследник.БазовыйКласс)}@odata.bind"); - detJson = detJson.Replace("{\"__PrimaryKey\":\"", $"\"{args.Token.Model.GetEdmEntitySet(typeof(БазовыйКласс)).Name}("); - detJson = detJson.Replace("\"}", ")\""); - string[] changesets = new[] - { - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(БазовыйКласс)).Name}", - "{}", - базовыйКласс), - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(ДетейлНаследник)).Name}", - detJson, - детейл), - }; - HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); - using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) - { - CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); - - args.DataService.LoadObject(БазовыйКласс.Views.БазовыйКлассE, базовыйКласс); - - var детейлы = базовыйКласс.Детейл.Cast<ДетейлНаследник>(); - - Assert.Equal(1, детейлы.Count()); - Assert.Equal(newValue, детейлы.First().prop1); - } - }); - } - - /// - /// Test update details with Aggregator. - /// - [Fact] - public void UpdateDetailWithAggregatorTest() - { - ActODataService(args => - { - string[] лапаPropertiesNames = - { - Information.ExtractPropertyPath<Лапа>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Лапа>(x => x.Размер), - }; - string[] кошкаPropertiesNames = - { - Information.ExtractPropertyPath<Кошка>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Кошка>(x => x.Кличка), - Information.ExtractPropertyPath<Кошка>(x => x.Тип), - Information.ExtractPropertyPath<Кошка>(x => x.КошкаСтрокой), - }; - var лапаDynamicView = new View(new ViewAttribute("лапаDynamicView", лапаPropertiesNames), typeof(Лапа)); - var кошкаDynamicView = new View(new ViewAttribute("кошкаDynamicView", кошкаPropertiesNames), typeof(Кошка)); - - var порода = new Порода() { Название = "Первая" }; - var кошка = new Кошка() { Кличка = "50", Порода = порода, Тип = ТипКошки.Домашняя }; - var лапа = new Лапа() { Размер = 50 }; - кошка.Лапа.Add(лапа); - - args.DataService.UpdateObject(кошка); - - кошка.Кличка = "100"; - кошка.Тип = ТипКошки.Дикая; - лапа.Размер = 100; - - const string baseUrl = "http://localhost/odata"; - - string requestJsonDataЛапа = лапа.ToJson(лапаDynamicView, args.Token.Model); - DataObjectDictionary objJsonЛапа = DataObjectDictionary.Parse(requestJsonDataЛапа, лапаDynamicView, args.Token.Model); - - objJsonЛапа.Add( - $"{nameof(Лапа.Кошка)}@odata.bind", - string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name, - ((KeyGuid)кошка.__PrimaryKey).Guid.ToString("D"))); - - requestJsonDataЛапа = objJsonЛапа.Serialize(); - - string[] changesets = new[] - { - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name}", - кошка.ToJson(кошкаDynamicView, args.Token.Model), - кошка), - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Лапа)).Name}", - requestJsonDataЛапа, - лапа), - }; - - HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); - using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) - { - CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); - - кошкаDynamicView.AddDetailInView(Information.ExtractPropertyPath<Кошка>(x => x.Лапа), лапаDynamicView, true); - - args.DataService.LoadObject(кошкаDynamicView, кошка); - - var лапы = кошка.Лапа.Cast<Лапа>(); - - Assert.Equal("100", кошка.Кличка); - Assert.Equal(ТипКошки.Дикая, кошка.Тип); - Assert.Equal(1, лапы.Count(б => б.Размер == 100)); - } - }); - } - - /// - /// Test update details with Aggregator. - /// - [Fact] - public void UpdateSecondDetailWithAggregatorTest() - { - ActODataService(args => - { - // Arrange. - DateTime date = new DateTime(2010, 10, 10, 10, 10, 10, DateTimeKind.Local); - var порода = new Порода() { Название = "Первая" }; - var кошка = new Кошка() { Кличка = "50", Порода = порода }; - var лапа = new Лапа() { Размер = 50 }; - кошка.Лапа.Add(лапа); - var перелом = new Перелом() { Дата = DateTime.UtcNow, Тип = ТипПерелома.Открытый }; - лапа.Перелом.Add(перелом); - - args.DataService.UpdateObject(кошка); - - string[] переломPropertiesNames = - { - Information.ExtractPropertyPath<Перелом>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Перелом>(x => x.Дата), - }; - var переломDynamicView = new View(new ViewAttribute("переломDynamicView", переломPropertiesNames), typeof(Перелом)); - - string[] лапаPropertiesNames = - { - Information.ExtractPropertyPath<Лапа>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Лапа>(x => x.Размер), - Information.ExtractPropertyPath<Лапа>(x => x.РазмерСтрокой), - }; - var лапаDynamicView = new View(new ViewAttribute("лапаDynamicView", лапаPropertiesNames), typeof(Лапа)); - - string[] кошкаPropertiesNames = - { - Information.ExtractPropertyPath<Кошка>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Кошка>(x => x.Кличка), - Information.ExtractPropertyPath<Кошка>(x => x.Тип), - Information.ExtractPropertyPath<Кошка>(x => x.КошкаСтрокой), - }; - var кошкаDynamicView = new View(new ViewAttribute("кошкаDynamicView", кошкаPropertiesNames), typeof(Кошка)); - - лапа.Размер = 100; - перелом.Дата = date; - - const string baseUrl = "http://localhost/odata"; - - string requestJsonDataЛапа = лапа.ToJson(лапаDynamicView, args.Token.Model); - DataObjectDictionary objJsonЛапа = DataObjectDictionary.Parse(requestJsonDataЛапа, лапаDynamicView, args.Token.Model); - - objJsonЛапа.Add( - $"{nameof(Лапа.Кошка)}@odata.bind", - string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name, - ((KeyGuid)кошка.__PrimaryKey).Guid.ToString("D"))); - - requestJsonDataЛапа = objJsonЛапа.Serialize(); - - string requestJsonDataПерелом = перелом.ToJson(переломDynamicView, args.Token.Model); - DataObjectDictionary objJsonПерелом = DataObjectDictionary.Parse(requestJsonDataПерелом, переломDynamicView, args.Token.Model); - - objJsonПерелом.Add( - $"{nameof(Перелом.Лапа)}@odata.bind", - string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Лапа)).Name, - ((KeyGuid)лапа.__PrimaryKey).Guid.ToString("D"))); - - requestJsonDataПерелом = objJsonПерелом.Serialize(); - - string[] changesets = new[] - { - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Лапа)).Name}", - requestJsonDataЛапа, - лапа), - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Перелом)).Name}", - requestJsonDataПерелом, - перелом), - }; - - HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); - using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) - { - CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); - - кошкаDynamicView.AddDetailInView(Information.ExtractPropertyPath<Кошка>(x => x.Лапа), лапаDynamicView, true); - лапаDynamicView.AddDetailInView(Information.ExtractPropertyPath<Лапа>(x => x.Перелом), переломDynamicView, true); - - args.DataService.LoadObject(кошкаDynamicView, кошка); - - var лапы = кошка.Лапа.Cast<Лапа>(); - - var переломы = лапы.FirstOrDefault().Перелом.Cast<Перелом>(); - - Assert.Equal("50", кошка.Кличка); - Assert.Equal(1, лапы.Count(б => б.Размер == 100)); - Assert.Equal(1, переломы.Count(б => б.Дата == date.ToUniversalTime())); - } - }); - } - - /// - /// Test delete and add detail. - /// - [Fact] - public void UpdateDeletedAndAddedDetailWithAggregatorTest() - { - ActODataService(args => - { - string[] лапаPropertiesNames = - { - Information.ExtractPropertyPath<Лапа>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Лапа>(x => x.Размер), - }; - string[] кошкаPropertiesNames = - { - Information.ExtractPropertyPath<Кошка>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Кошка>(x => x.Кличка), - Information.ExtractPropertyPath<Кошка>(x => x.Тип), - Information.ExtractPropertyPath<Кошка>(x => x.КошкаСтрокой), - }; - var лапаDynamicView = new View(new ViewAttribute("лапаDynamicView", лапаPropertiesNames), typeof(Лапа)); - var кошкаDynamicView = new View(new ViewAttribute("кошкаDynamicView", кошкаPropertiesNames), typeof(Кошка)); - - var порода = new Порода() { Название = "Первая" }; - var кошка = new Кошка() { Кличка = "50", Порода = порода, Тип = ТипКошки.Домашняя }; - var лапа = new Лапа() { Размер = 50 }; - var лапа2 = new Лапа() { Размер = 1000 }; - var лапа3 = new Лапа() { Размер = 2000 }; - кошка.Лапа.Add(лапа); - кошка.Лапа.Add(лапа2); - - args.DataService.UpdateObject(кошка); - - кошка.Кличка = "100"; - кошка.Тип = ТипКошки.Дикая; - лапа.Размер = 100; - - const string baseUrl = "http://localhost/odata"; - - string requestJsonDataЛапа = лапа.ToJson(лапаDynamicView, args.Token.Model); - DataObjectDictionary objJsonЛапа = DataObjectDictionary.Parse(requestJsonDataЛапа, лапаDynamicView, args.Token.Model); - - objJsonЛапа.Add( - $"{nameof(Лапа.Кошка)}@odata.bind", - string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name, - ((KeyGuid)кошка.__PrimaryKey).Guid.ToString("D"))); - - requestJsonDataЛапа = objJsonЛапа.Serialize(); - - лапа2.SetStatus(ObjectStatus.Deleted); - - string requestJsonDataЛапа3 = лапа3.ToJson(лапаDynamicView, args.Token.Model); - DataObjectDictionary objJsonЛапа3 = DataObjectDictionary.Parse(requestJsonDataЛапа3, лапаDynamicView, args.Token.Model); - - objJsonЛапа3.Add( - $"{nameof(Лапа.Кошка)}@odata.bind", - string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name, - ((KeyGuid)кошка.__PrimaryKey).Guid.ToString("D"))); - - requestJsonDataЛапа3 = objJsonЛапа3.Serialize(); - - string[] changesets = new[] - { - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Лапа)).Name}", - string.Empty, - лапа2), - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Лапа)).Name}", - requestJsonDataЛапа3, - лапа3), - }; - - HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); - using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) - { - CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.NoContent, HttpStatusCode.Created }); - - кошкаDynamicView.AddDetailInView(Information.ExtractPropertyPath<Кошка>(x => x.Лапа), лапаDynamicView, true); - - args.DataService.LoadObject(кошкаDynamicView, кошка); - - var лапы = кошка.Лапа.Cast<Лапа>(); - - Assert.Equal(2, лапы.Count()); - Assert.Equal(1, лапы.Count(x => x.Размер == 2000)); - Assert.Equal(0, лапы.Count(x => x.Размер == 1000)); - } - }); - } - - /// - /// Test batch update error handling when business server throws exception. - /// - [Fact] - public void BatchUpdateErrorHandlingTest() - { - ActODataService(args => - { - string[] лапаPropertiesNames = - { - Information.ExtractPropertyPath<Лапа>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Лапа>(x => x.Размер), - }; - string[] кошкаPropertiesNames = - { - Information.ExtractPropertyPath<Кошка>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Кошка>(x => x.Кличка), - Information.ExtractPropertyPath<Кошка>(x => x.Тип), - Information.ExtractPropertyPath<Кошка>(x => x.КошкаСтрокой), - }; - var лапаDynamicView = new View(new ViewAttribute("лапаDynamicView", лапаPropertiesNames), typeof(Лапа)); - var кошкаDynamicView = new View(new ViewAttribute("кошкаDynamicView", кошкаPropertiesNames), typeof(Кошка)); - - var порода = new Порода() { Название = "Первая" }; - var кошка = new Кошка() { Кличка = "50", Порода = порода, Тип = ТипКошки.Домашняя }; - var лапа = new Лапа() { Размер = 50 }; - кошка.Лапа.Add(лапа); - - args.DataService.UpdateObject(кошка); - - кошка.Кличка = "100"; - кошка.Тип = ТипКошки.Дикая; - - // Этот размер лапы указан в CatsBS как недопустимый размер, будет сгенерировано исключение. - лапа.Размер = 100899; - - const string baseUrl = "http://localhost/odata"; - - string requestJsonDataЛапа = лапа.ToJson(лапаDynamicView, args.Token.Model); - DataObjectDictionary objJsonЛапа = DataObjectDictionary.Parse(requestJsonDataЛапа, лапаDynamicView, args.Token.Model); - - objJsonЛапа.Add( - $"{nameof(Лапа.Кошка)}@odata.bind", - string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name, - ((KeyGuid)кошка.__PrimaryKey).Guid.ToString("D"))); - - requestJsonDataЛапа = objJsonЛапа.Serialize(); - - string[] changesets = new[] - { - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name}", - кошка.ToJson(кошкаDynamicView, args.Token.Model), - кошка), - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Лапа)).Name}", - requestJsonDataЛапа, - лапа), - }; - - int exceptionHandled = 0; - - args.Token.Events.CallbackAfterInternalServerError = (Exception exception, ref HttpStatusCode code) => - { - Exception currentException = exception; - - while (currentException != null) - { - if (currentException.Message == "Недопустимый размер кошачьей лапы!") - { - exceptionHandled++; - } - - currentException = currentException.InnerException; - } - - return exception; - }; - - HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); - using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) - { - Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode); - Assert.Equal(1, exceptionHandled); - } - }); - } - - /// - /// Test update agregator with inheritance details. - /// - [Fact] - public void UpdateAgregatorWithInheritanceDetailsTest() - { - ActODataService(args => - { - var son = new Son() { Name = "Yakov", SuspendersColor = "Brown" }; - var daughter = new Daughter() { Name = "Yana", DressColor = "Red" }; - var person = new Person() { Name = "Yan" }; - person.Childrens.AddRange(son, daughter); - - args.DataService.UpdateObject(person); - - person.Name = "Yan Yakovlevich"; - - // Преобразуем объект данных в JSON-строку. - string[] personPropertiesNames = - { - Information.ExtractPropertyPath(x => x.__PrimaryKey), - Information.ExtractPropertyPath(x => x.Name) - }; - - var personDynamicView = new View(new ViewAttribute("personDynamicView", personPropertiesNames), typeof(Person)); - - string requestJsonData = person.ToJson(personDynamicView, args.Token.Model); - - // Формируем URL запроса к OData-сервису. - string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Person)).Name); - - // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. - using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonData).Result) - { - // Убедимся, что запрос завершился успешно. - Assert.Equal(HttpStatusCode.Created, response.StatusCode); - } - }); - } - - /// - /// Test batch update detail of detail. - /// - [Fact] - public void UpdateDetailOfDetailTest() - { - ActODataService(args => - { - var базовыйКласс = new БазовыйКласс() { Свойство1 = "sv1" }; - var детейл = new Детейл() { prop1 = 1 }; - базовыйКласс.Детейл.Add(детейл); - var детейл2 = new Детейл2() { prop2 = "2" }; - детейл.Детейл2.Add(детейл2); - - args.DataService.UpdateObject(базовыйКласс); - string newValue = "new"; - базовыйКласс.Свойство1 = newValue; - детейл2.prop2 = newValue; - - const string baseUrl = "http://localhost/odata"; - - string[] classPropertiesNames = - { - Information.ExtractPropertyPath<БазовыйКласс>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<БазовыйКласс>(x => x.Свойство1), - }; - - string[] detail2PropertiesNames = - { - Information.ExtractPropertyPath<Детейл2>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Детейл2>(x => x.prop2), - }; - - var classDynamicView = new View(new ViewAttribute("classDynamicView", classPropertiesNames), typeof(БазовыйКласс)); - var detail2DynamicView = new View(new ViewAttribute("detailDynamicView", detail2PropertiesNames), typeof(Детейл2)); - - string classJson = базовыйКласс.ToJson(classDynamicView, args.Token.Model); - string detJson = детейл2.ToJson(detail2DynamicView, args.Token.Model); - - DataObjectDictionary objJson = DataObjectDictionary.Parse(detJson, detail2DynamicView, args.Token.Model); - - objJson.Add( - $"{nameof(Детейл2.Детейл)}@odata.bind", - string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Детейл)).Name, - ((KeyGuid)детейл.__PrimaryKey).Guid.ToString("D"))); - - detJson = objJson.Serialize(); - - detail2DynamicView.AddProperty(Information.ExtractPropertyPath<Детейл2>(x => x.Детейл)); - string[] changesets = new[] - { - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(БазовыйКласс)).Name}", - classJson, - базовыйКласс), - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Детейл2)).Name}", - detJson, - детейл2), - }; - HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); - using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) - { - CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); - - args.DataService.LoadObject(detail2DynamicView, детейл2); - - Assert.Equal(newValue, детейл2.prop2); - } - }); - } - - /// - /// Test batch update detail of detail. - /// - [Fact] - public void UpdateDetailOfDetailDescOrderTest() - { - ActODataService(args => - { - var базовыйКласс = new БазовыйКласс() { Свойство1 = "sv1" }; - var детейл = new Детейл() { prop1 = 1 }; - базовыйКласс.Детейл.Add(детейл); - var детейл2 = new Детейл2() { prop2 = "2" }; - детейл.Детейл2.Add(детейл2); - - args.DataService.UpdateObject(базовыйКласс); - string newValue = "new"; - базовыйКласс.Свойство1 = newValue; - детейл2.prop2 = newValue; - - const string baseUrl = "http://localhost/odata"; - - string[] classPropertiesNames = - { - Information.ExtractPropertyPath<БазовыйКласс>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<БазовыйКласс>(x => x.Свойство1), - }; - - string[] detail2PropertiesNames = - { - Information.ExtractPropertyPath<Детейл2>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Детейл2>(x => x.prop2), - }; - - var classDynamicView = new View(new ViewAttribute("classDynamicView", classPropertiesNames), typeof(БазовыйКласс)); - var detail2DynamicView = new View(new ViewAttribute("detailDynamicView", detail2PropertiesNames), typeof(Детейл2)); - - string classJson = базовыйКласс.ToJson(classDynamicView, args.Token.Model); - string detJson = детейл2.ToJson(detail2DynamicView, args.Token.Model); - - DataObjectDictionary objJson = DataObjectDictionary.Parse(detJson, detail2DynamicView, args.Token.Model); - - objJson.Add( - $"{nameof(Детейл2.Детейл)}@odata.bind", - string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Детейл)).Name, - ((KeyGuid)детейл.__PrimaryKey).Guid.ToString("D"))); - - detJson = objJson.Serialize(); - - detail2DynamicView.AddProperty(Information.ExtractPropertyPath<Детейл2>(x => x.Детейл)); - string[] changesets = new[] - { - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Детейл2)).Name}", - detJson, - детейл2), - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(БазовыйКласс)).Name}", - classJson, - базовыйКласс), - }; - HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); - using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) - { - CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); - - args.DataService.LoadObject(detail2DynamicView, детейл2); - - Assert.Equal(newValue, детейл2.prop2); - } - }); - } - - /// - /// Test batch update detail and another type detail. - /// - [Fact] - public void UpdateDetailAndDetailTest() - { - ActODataService(args => - { - var базовыйКласс = new Библиотека() { Адрес = "ул. Пушкина" }; - var мастер = new Автор() { Имя = "Александр" }; - var детейл1 = new Книга() { Название = "Му-Му", Автор1 = мастер }; - базовыйКласс.Книга.Add(детейл1); - var детейл2 = new Журнал() { Номер = 2, Автор2 = мастер }; - базовыйКласс.Журнал.Add(детейл2); - - args.DataService.UpdateObject(базовыйКласс); - string newValue = "ул. Лермонтова"; - int newIntValue = 3; - базовыйКласс.Адрес = newValue; - детейл1.Название = newValue; - детейл2.Номер = newIntValue; - - const string baseUrl = "http://localhost/odata"; - - string[] classPropertiesNames = - { - Information.ExtractPropertyPath<Библиотека>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Библиотека>(x => x.Адрес), - }; - - string[] detail1PropertiesNames = - { - Information.ExtractPropertyPath<Книга>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Книга>(x => x.Название), - }; - - string[] detail2PropertiesNames = - { - Information.ExtractPropertyPath<Журнал>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Журнал>(x => x.Номер), - }; - - var classDynamicView = new View(new ViewAttribute("classDynamicView", classPropertiesNames), typeof(Библиотека)); - var detail1DynamicView = new View(new ViewAttribute("detailDynamicView", detail1PropertiesNames), typeof(Книга)); - var detail2DynamicView = new View(new ViewAttribute("detailDynamicView", detail2PropertiesNames), typeof(Журнал)); - - string classJson = базовыйКласс.ToJson(classDynamicView, args.Token.Model); - string det1Json = детейл1.ToJson(detail1DynamicView, args.Token.Model); - string det2Json = детейл2.ToJson(detail2DynamicView, args.Token.Model); - - DataObjectDictionary obj1Json = DataObjectDictionary.Parse(det1Json, detail1DynamicView, args.Token.Model); - - obj1Json.Add( - $"{nameof(Книга.Библиотека1)}@odata.bind", - string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Библиотека)).Name, - ((KeyGuid)базовыйКласс.__PrimaryKey).Guid.ToString("D"))); - - det1Json = obj1Json.Serialize(); - - DataObjectDictionary obj2Json = DataObjectDictionary.Parse(det2Json, detail2DynamicView, args.Token.Model); - - obj2Json.Add( - $"{nameof(Журнал.Библиотека2)}@odata.bind", - string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Библиотека)).Name, - ((KeyGuid)базовыйКласс.__PrimaryKey).Guid.ToString("D"))); - - det2Json = obj2Json.Serialize(); - - string[] changesets = new[] - { - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Библиотека)).Name}", - classJson, - базовыйКласс), - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Книга)).Name}", - det1Json, - детейл1), - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Журнал)).Name}", - det2Json, - детейл2), - }; - HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); - using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) - { - CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK, HttpStatusCode.OK }); - - classDynamicView.AddDetailInView(nameof(Библиотека.Книга), detail1DynamicView, true); - classDynamicView.AddDetailInView(nameof(Библиотека.Журнал), detail2DynamicView, true); - - args.DataService.LoadObject(classDynamicView, базовыйКласс); - - Assert.Equal(newValue, базовыйКласс.Адрес = newValue); - Assert.Equal(newValue, базовыйКласс.Книга[0].Название); - Assert.Equal(newIntValue, базовыйКласс.Журнал[0].Номер); - - } - }); - } - - /// - /// Осуществляет проверку удаления данных. - /// - [Fact] - public void DeletePlainObjectTest() - { - ActODataService(args => - { - // Arrange. - // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. - Медведь agregator = new Медведь() { МедведьСтрокой = "Agregator" }; - args.DataService.UpdateObject(agregator); - - View view = new View(typeof(Медведь), View.ReadType.OnlyThatObject); - Медведь foundAgregator0 = args.DataService.Query<Медведь>(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); - Assert.NotNull(foundAgregator0); - - // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). - string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, agregator.__PrimaryKey); - requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); - - // Act. - // Обращаемся к OData-сервису и обрабатываем ответ. - using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) - { - //Assert. - // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - - // Проверяем что объект данных был удален из базы. - Медведь foundAgregator = args.DataService.Query<Медведь>(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); - Assert.Null(foundAgregator); - } - }); - } - - /// - /// Осуществляет проверку удаления данных, если детейл и мастер одного типа, но при этом пустые. - /// - [Fact] - public void DeleteObjectWithSameDetailAndMasterEmptyTest() - { - ActODataService(args => - { - // Arrange. - // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. - AgregatorSameMD agregator = new AgregatorSameMD() { Name = "Agregator" }; - args.DataService.UpdateObject(agregator); - - View view = new View(typeof(AgregatorSameMD), View.ReadType.OnlyThatObject); - AgregatorSameMD foundAgregator0 = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); - Assert.NotNull(foundAgregator0); - - // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). - string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(AgregatorSameMD)).Name, agregator.__PrimaryKey); - requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); - - // Act. - // Обращаемся к OData-сервису и обрабатываем ответ. - using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) - { - // Assert. - // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - - // Проверяем что объект данных был удален из базы. - AgregatorSameMD foundAgregator = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); - Assert.Null(foundAgregator); - } - }); - } - - /// - /// Осуществляет проверку удаления данных, если детейл и мастер одного типа, но лишь детейл заполнен. - /// - [Fact] - public void DeleteObjectWithSameDetailAndMasterTest() - { - ActODataService(args => - { - // Arrange. - // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. - AgregatorSameMD agregator = new AgregatorSameMD() { Name = "Agregator" }; - args.DataService.UpdateObject(agregator); - - DetailAndMaster dm = new DetailAndMaster() { Name = "DetailAndMaster" }; - agregator.Details.Add(dm); - args.DataService.UpdateObject(dm); - - AgregatorSameMD agregator2 = new AgregatorSameMD() { Name = "Agregator2" }; - args.DataService.UpdateObject(agregator2); - DetailAndMaster dm2 = new DetailAndMaster() { Name = "DetailAndMaster2" }; - agregator2.Details.Add(dm2); - args.DataService.UpdateObject(dm2); - - View view = new View(typeof(AgregatorSameMD), View.ReadType.OnlyThatObject); - AgregatorSameMD foundAgregator0 = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); - Assert.NotNull(foundAgregator0); - - // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). - string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(AgregatorSameMD)).Name, agregator.__PrimaryKey); - requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); - - // Act. - // Обращаемся к OData-сервису и обрабатываем ответ. - using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) - { - // Assert. - // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - - // Проверяем что объект данных был удален из базы. - AgregatorSameMD foundAgregator = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); - Assert.Null(foundAgregator); - } - }); - } - - /// - /// Осуществляет проверку удаления данных, если детейл и мастер одного типа, но не пустые. - /// - [Fact] - public void DeleteObjectWithSameDetailAndMaster2Test() - { - ActODataService(args => - { - // Arrange. - // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. - AgregatorSameMD agregator = new AgregatorSameMD() { Name = "Agregator" }; - args.DataService.UpdateObject(agregator); - - DetailAndMaster dm = new DetailAndMaster() { Name = "DetailAndMaster" }; - agregator.Details.Add(dm); - args.DataService.UpdateObject(dm); - - AgregatorSameMD agregator2 = new AgregatorSameMD() { Name = "Agregator2" }; - args.DataService.UpdateObject(agregator2); - DetailAndMaster dm2 = new DetailAndMaster() { Name = "DetailAndMaster2" }; - agregator2.Details.Add(dm2); - args.DataService.UpdateObject(dm2); - - agregator.Master = dm2; - args.DataService.UpdateObject(agregator); - - View view = new View(typeof(AgregatorSameMD), View.ReadType.OnlyThatObject); - AgregatorSameMD foundAgregator0 = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); - Assert.NotNull(foundAgregator0); - - // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). - string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(AgregatorSameMD)).Name, agregator.__PrimaryKey); - requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); - - // Act. - // Обращаемся к OData-сервису и обрабатываем ответ. - using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) - { - // Assert. - // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); - - // Проверяем что объект данных был удален из базы. - AgregatorSameMD foundAgregator = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); - Assert.Null(foundAgregator); - } - }); - } - } -} +namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Update +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Net; + using System.Net.Http; + using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing; + using ICSSoft.STORMNET; + using ICSSoft.STORMNET.Business; + using ICSSoft.STORMNET.Business.LINQProvider; + using ICSSoft.STORMNET.Exceptions; + using ICSSoft.STORMNET.KeyGen; + using ICSSoft.STORMNET.Windows.Forms; + using NewPlatform.Flexberry.ORM.ODataService.Tests.Extensions; + using NewPlatform.Flexberry.ORM.ODataService.Tests.Helpers; + + using Newtonsoft.Json; + using Xunit; + + /// + /// Класс тестов для тестирования операций модификации данных OData-сервисом (вставка, обновление, удаление). + /// + public class ModifyDataTest : BaseODataServiceIntegratedTest + { +#if NETCOREAPP + /// + /// Конструктор по-умолчанию. + /// + /// Фабрика для приложения. + /// Вывод отладочной информации. + public ModifyDataTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + : base(factory, output) + { + } +#endif + + /// + /// Осуществляет проверку того, что при PATCH запросах происходит вставка и удаление связей объекта. + /// Зависимые объекты (мастера, детейлы) представлены в виде - Имя_Связи@odata.bind: Имя_Набора_Сущностей(ключ) или Имя_Связи@odata.bind: [ Имя_Набора_Сущностей(ключ) ] . + /// Тест проверяет следующие факты: + /// + /// Вставка связи мастерового объекта. + /// Удаление связи мастеровго объекта путём присвоения null свойству. + /// Удаление связи мастеровго объекта путём присвоения null для Имя_Связи@odata.bind. + /// + /// + [Fact] + public void PatchNavigationPropertiesTest() + { + ActODataService(args => + { + ExternalLangDef.LanguageDef.DataService = args.DataService; + string[] берлогаPropertiesNames = + { + Information.ExtractPropertyPath<Берлога>(x => x.ПолеБС), + Information.ExtractPropertyPath<Берлога>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Берлога>(x => x.Наименование), + Information.ExtractPropertyPath<Берлога>(x => x.Заброшена) + }; + string[] лесPropertiesNames = + { + Information.ExtractPropertyPath<Лес>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Лес>(x => x.Площадь), + Information.ExtractPropertyPath<Лес>(x => x.Название), + Information.ExtractPropertyPath<Лес>(x => x.ДатаПоследнегоОсмотра) + }; + string[] медвPropertiesNames = + { + Information.ExtractPropertyPath<Медведь>(x => x.ПолеБС), + Information.ExtractPropertyPath<Медведь>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Медведь>(x => x.Вес), + + // Information.ExtractPropertyPath<Медведь>(x => x.Пол), + Information.ExtractPropertyPath<Медведь>(x => x.ДатаРождения), + Information.ExtractPropertyPath<Медведь>(x => x.ПорядковыйНомер) + }; + var берлогаDynamicView = new View(new ViewAttribute("берлогаDynamicView", берлогаPropertiesNames), typeof(Берлога)); + var лесDynamicView = new View(new ViewAttribute("лесDynamicView", лесPropertiesNames), typeof(Лес)); + var медвDynamicView = new View(new ViewAttribute("медвDynamicView", медвPropertiesNames), typeof(Медведь)); + + // Объекты для тестирования создания. + Медведь медв = new Медведь { Вес = 48 }; + Лес лес1 = new Лес { Название = "Бор" }; + Лес лес2 = new Лес { Название = "Березовая роща" }; + var берлога1 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; + var берлога2 = new Берлога { Наименование = "Для плохого настроения", ЛесРасположения = лес2 }; + медв.Берлога.Add(берлога1); + var objs = new DataObject[] { медв, лес1, лес2, берлога1 }; + args.DataService.UpdateObjects(ref objs); + string requestUrl; + + string requestJsonDataМедв = медв.ToJson(медвDynamicView, args.Token.Model); + DataObjectDictionary objJson = DataObjectDictionary.Parse(requestJsonDataМедв, медвDynamicView, args.Token.Model); + + objJson.Add("ЛесОбитания@odata.bind", string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Лес)).Name, + ((KeyGuid)лес1.__PrimaryKey).Guid.ToString("D"))); + + requestJsonDataМедв = objJson.Serialize(); + requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((KeyGuid)медв.__PrimaryKey).Guid.ToString()); + using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonDataМедв).Result) + { + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + } + + var requestJsonDataБерлога = берлога1.ToJson(берлогаDynamicView, args.Token.Model); + objJson = DataObjectDictionary.Parse(requestJsonDataБерлога, берлогаDynamicView, args.Token.Model); + objJson.Add("Медведь", null); + requestJsonDataБерлога = objJson.Serialize(); + requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Берлога)).Name, ((KeyGuid)медв.__PrimaryKey).Guid.ToString()); + using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonDataБерлога).Result) + { + Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); + } + + requestJsonDataМедв = медв.ToJson(медвDynamicView, args.Token.Model); + objJson = DataObjectDictionary.Parse(requestJsonDataМедв, медвDynamicView, args.Token.Model); + objJson.Add("ЛесОбитания@odata.bind", null); + requestJsonDataМедв = objJson.Serialize(); + requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((KeyGuid)медв.__PrimaryKey).Guid.ToString()); + + using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonDataМедв).Result) + { + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + } + + requestJsonDataМедв = медв.ToJson(медвDynamicView, args.Token.Model); + objJson = DataObjectDictionary.Parse(requestJsonDataМедв, медвDynamicView, args.Token.Model); + objJson.Add("ЛесОбитания", null); + requestJsonDataМедв = objJson.Serialize(); + requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((KeyGuid)медв.__PrimaryKey).Guid.ToString()); + + using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonDataМедв).Result) + { + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + } + + requestJsonDataМедв = медв.ToJson(медвDynamicView, args.Token.Model); + objJson = DataObjectDictionary.Parse(requestJsonDataМедв, медвDynamicView, args.Token.Model); + objJson.Add("Берлога@odata.bind", null); + requestJsonDataМедв = objJson.Serialize(); + requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((KeyGuid)медв.__PrimaryKey).Guid.ToString()); + + using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonDataМедв).Result) + { + Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); + } + }); + } + + /// + /// Осуществляет проверку того, что при POST запросах происходит вставка и удаление связей объекта. + /// Зависимые объекты (мастера, детейлы) представлены в виде - Имя_Связи@odata.bind: Имя_Набора_Сущностей(ключ) или Имя_Связи@odata.bind: [ Имя_Набора_Сущностей(ключ) ] . + /// Тест проверяет следующие факты: + /// + /// Вставка связи мастерового объекта. + /// Удаление связи мастеровго объекта путём присвоения null свойству. + /// Удаление связи мастеровго объекта путём присвоения null для Имя_Связи@odata.bind. + /// + /// + [Fact] + public void PostNavigationPropertiesTest() + { + string[] берлогаPropertiesNames = + { + // Information.ExtractPropertyPath<Берлога>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Берлога>(x => x.Наименование), + Information.ExtractPropertyPath<Берлога>(x => x.Заброшена) + }; + string[] лесPropertiesNames = + { + // Information.ExtractPropertyPath<Лес>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Лес>(x => x.Площадь), + Information.ExtractPropertyPath<Лес>(x => x.Название), + Information.ExtractPropertyPath<Лес>(x => x.ДатаПоследнегоОсмотра) + }; + string[] медвPropertiesNames = + { + // Information.ExtractPropertyPath<Медведь>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Медведь>(x => x.Вес), + + // Information.ExtractPropertyPath<Медведь>(x => x.Пол), + Information.ExtractPropertyPath<Медведь>(x => x.ДатаРождения), + Information.ExtractPropertyPath<Медведь>(x => x.ПорядковыйНомер) + }; + var берлогаDynamicView = new View(new ViewAttribute("берлогаDynamicView", берлогаPropertiesNames), typeof(Берлога)); + var лесDynamicView = new View(new ViewAttribute("лесDynamicView", лесPropertiesNames), typeof(Лес)); + var медвDynamicView = new View(new ViewAttribute("медвDynamicView", медвPropertiesNames), typeof(Медведь)); + + // Объекты для тестирования создания. + Медведь медв = new Медведь { Вес = 48 }; + Лес лес1 = new Лес { Название = "Бор" }; + var берлога1 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; + ActODataService(args => + { + string requestUrl; + string receivedJsonЛес1, receivedJsonМедв; + string requestJsonDataЛес1 = лес1.ToJson(лесDynamicView, args.Token.Model); + requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Лес)).Name); + using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonDataЛес1).Result) + { + // Убедимся, что запрос завершился успешно. + Assert.Equal(HttpStatusCode.Created, response.StatusCode); + + // Получим строку с ответом (в ней должна вернуться созданная сущность). + receivedJsonЛес1 = response.Content.ReadAsStringAsync().Result.Beautify(); + } + + string requestJsonDataМедв = медв.ToJson(медвDynamicView, args.Token.Model); + DataObjectDictionary objJsonМедв = DataObjectDictionary.Parse(requestJsonDataМедв, медвDynamicView, args.Token.Model); + Dictionary receivedDict = JsonConvert.DeserializeObject>(receivedJsonЛес1); + + objJsonМедв.Add("ЛесОбитания@odata.bind", string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Лес)).Name, + receivedDict["__PrimaryKey"])); + objJsonМедв.Add("Берлога@odata.bind", null); + + requestJsonDataМедв = objJsonМедв.Serialize(); + requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name); + using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonDataМедв).Result) + { + // Убедимся, что запрос завершился успешно. + Assert.Equal(HttpStatusCode.Created, response.StatusCode); + + // Получим строку с ответом (в ней должна вернуться созданная сущность). + receivedJsonМедв = response.Content.ReadAsStringAsync().Result.Beautify(); + } + + var requestJsonDataБерлога = берлога1.ToJson(берлогаDynamicView, args.Token.Model); + var objJson = DataObjectDictionary.Parse(requestJsonDataБерлога, берлогаDynamicView, args.Token.Model); + receivedDict = JsonConvert.DeserializeObject>(receivedJsonМедв); + objJson.Add("Медведь@odata.bind", string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, + receivedDict["__PrimaryKey"])); + requestJsonDataБерлога = objJson.Serialize(); + requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Берлога)).Name); + using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonDataБерлога).Result) + { + Assert.Equal(HttpStatusCode.Created, response.StatusCode); + } + }); + } + + /// + /// Осуществляет проверку того, что при POST запросах происходит вставка объекта, + /// зависимые объекты (мастера, детейлы) обрабатываются в зависимости от наличия в БД - вставляются или обновляются. + /// + [Fact] + public void PostComplexObjectTest() + { + ActODataService(args => + { + string[] берлогаPropertiesNames = + { + Information.ExtractPropertyPath<Берлога>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Берлога>(x => x.Наименование), + Information.ExtractPropertyPath<Берлога>(x => x.ЛесРасположения), + Information.ExtractPropertyPath<Берлога>(x => x.ЛесРасположения.Название), + }; + string[] медвPropertiesNames = + { + Information.ExtractPropertyPath<Медведь>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Медведь>(x => x.Вес), + Information.ExtractPropertyPath<Медведь>(x => x.ЛесОбитания), + Information.ExtractPropertyPath<Медведь>(x => x.ЛесОбитания.Название), + }; + var берлогаDynamicView = new View(new ViewAttribute("берлогаDynamicView", берлогаPropertiesNames), typeof(Берлога)); + var медвDynamicView = new View(new ViewAttribute("медвDynamicView", медвPropertiesNames), typeof(Медведь)); + медвDynamicView.AddDetailInView(Information.ExtractPropertyPath<Медведь>(x => x.Берлога), берлогаDynamicView, true); + + // Объекты для тестирования создания. + Медведь медв = new Медведь { Вес = 48 }; + Лес лес1 = new Лес { Название = "Бор" }; + Лес лес2 = new Лес { Название = "Березовая роща" }; + медв.ЛесОбитания = лес1; + var берлога1 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; + var берлога2 = new Берлога { Наименование = "Для плохого настроения", ЛесРасположения = лес2 }; + медв.Берлога.Add(берлога1); + медв.Берлога.Add(берлога2); + + string json = медв.ToJson(медвDynamicView, args.Token.Model); + + // Формируем URL запроса к OData-сервису. + string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name); + + // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. + HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, json).Result; + + // Убедимся, что запрос завершился успешно. + Assert.Equal(HttpStatusCode.Created, response.StatusCode); + + // Получим строку с ответом. + string receivedJsonObjs = response.Content.ReadAsStringAsync().Result.Beautify(); + + // В ответе приходит объект с созданной сущностью. + // Преобразуем полученный объект в словарь. + Dictionary receivedObjs = JsonConvert.DeserializeObject>(receivedJsonObjs); + + // Проверяем созданный объект, вычитав с помощью DataService + DataObject createdObj = new Медведь { __PrimaryKey = медв.__PrimaryKey }; + args.DataService.LoadObject(createdObj); + + Assert.Equal(ObjectStatus.UnAltered, createdObj.GetStatus()); + Assert.Equal(((Медведь)createdObj).Вес, (int)(long)receivedObjs["Вес"]); + + // Проверяем что созданы все зависимые объекты, вычитав с помощью DataService + var ldef = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef; + LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Лес), Лес.Views.ЛесE); + lcs.LoadingTypes = new[] { typeof(Лес) }; + DataObject[] dobjs = args.DataService.LoadObjects(lcs); + + Assert.Equal(2, dobjs.Length); + + lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Берлога), Берлога.Views.БерлогаE); + lcs.LoadingTypes = new[] { typeof(Берлога) }; + dobjs = args.DataService.LoadObjects(lcs); + Assert.Equal(2, dobjs.Length); + + // Создание объекта и обновление связанных + // Создаем нового медведя: в его мастере ЛесОбитания - лес1, но в нём изменим Название; в детейлы заберем от первого медведя детейл2, изменив Название в мастере детейла. + // Подготовка тестовых данных в формате OData. + Медведь медвежонок = new Медведь { Вес = 12 }; + var берлога3 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; + медвежонок.Берлога.Add(берлога3); + + медв.Берлога.Remove(берлога2); + медвежонок.Берлога.Add(берлога2); + + лес1.Название = лес1.Название + "(обновл)"; + лес2.Название = лес2.Название + "(обновл)"; + + json = медвежонок.ToJson(медвDynamicView, args.Token.Model); + + // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. + response = args.HttpClient.PostAsJsonStringAsync(requestUrl, json).Result; + + // Убедимся, что запрос завершился успешно. + Assert.Equal(HttpStatusCode.Created, response.StatusCode); + + // Проверяем созданный объект, вычитав с помощью DataService + createdObj = new Медведь { __PrimaryKey = медвежонок.__PrimaryKey }; + args.DataService.LoadObject(createdObj); + + Assert.Equal(ObjectStatus.UnAltered, createdObj.GetStatus()); + Assert.Equal(12, ((Медведь)createdObj).Вес); + + // Проверяем что созданы все зависимые объекты, вычитав с помощью DataService + ldef = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef; + lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Лес), Лес.Views.ЛесE); + lcs.LoadingTypes = new[] { typeof(Лес) }; + lcs.LimitFunction = ldef.GetFunction( + ldef.funcEQ, + new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.StormMainObjectKey), + лес1.__PrimaryKey); + dobjs = args.DataService.LoadObjects(lcs); + + Assert.Single(dobjs); + Assert.EndsWith("(обновл)", ((Лес)dobjs[0]).Название); + + lcs.LimitFunction = ldef.GetFunction( + ldef.funcEQ, + new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.StormMainObjectKey), + лес2.__PrimaryKey); + dobjs = args.DataService.LoadObjects(lcs); + + Assert.Single(dobjs); + Assert.EndsWith("(обновл)", ((Лес)dobjs[0]).Название); + + lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Берлога), Берлога.Views.БерлогаE); + lcs.LoadingTypes = new[] { typeof(Берлога) }; + lcs.LimitFunction = ldef.GetFunction( + ldef.funcEQ, + new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, "Медведь"), + медв.__PrimaryKey); + dobjs = args.DataService.LoadObjects(lcs); + + Assert.Single(dobjs); + + lcs.LimitFunction = ldef.GetFunction( + ldef.funcEQ, + new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, "Медведь"), + медвежонок.__PrimaryKey); + dobjs = args.DataService.LoadObjects(lcs); + + Assert.Equal(2, dobjs.Length); + }); + } + + /// + /// Осуществляет проверку создания сущности с датой и незаданным первичным ключом. + /// + [Fact] + public void PostObjDateTimeNoPKTest() + { + ActODataService(args => + { + // Создаем объект данных. + Лес country = new Лес { Площадь = 10, Название = "Бор", ДатаПоследнегоОсмотра = (ICSSoft.STORMNET.UserDataTypes.NullableDateTime)DateTime.Now }; + + // Преобразуем объект данных в JSON-строку. + string[] contryPropertiesNames = + { + Information.ExtractPropertyPath<Лес>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Лес>(x => x.Площадь), + Information.ExtractPropertyPath<Лес>(x => x.Название), + Information.ExtractPropertyPath<Лес>(x => x.ДатаПоследнегоОсмотра) + }; + var contryDynamicView = new View(new ViewAttribute("ContryDynamicView", contryPropertiesNames), typeof(Лес)); + + string requestJsonData = country.ToJson(contryDynamicView, args.Token.Model); + + // Формируем URL запроса к OData-сервису. + string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Лес)).Name); + + // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. + using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonData).Result) + { + // Убедимся, что запрос завершился успешно. + Assert.Equal(HttpStatusCode.Created, response.StatusCode); + } + }); + } + + /// + /// Осуществляет проверку того, что при POST запросах, отправляющих простейшие объекты JSON-строкой, происходит корректная вставка. + /// + [Fact] + public void PostDataTimeValueTest() + { + ActODataService(args => + { + // Создаем объект данных. + КлассСМножествомТипов класс = new КлассСМножествомТипов() { PropertyDateTime = DateTime.Now }; + + // Преобразуем объект данных в JSON-строку. + string[] classPropertiesNames = + { + Information.ExtractPropertyPath<КлассСМножествомТипов>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<КлассСМножествомТипов>(x => x.PropertyDateTime) + }; + + var classDynamicView = new View(new ViewAttribute("classDynamicView", classPropertiesNames), typeof(КлассСМножествомТипов)); + + string requestJsonData = класс.ToJson(classDynamicView, args.Token.Model); + + // Формируем URL запроса к OData-сервису. + string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(КлассСМножествомТипов)).Name); + + // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. + using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonData).Result) + { + // Убедимся, что запрос завершился успешно. + Assert.Equal(HttpStatusCode.Created, response.StatusCode); + } + }); + } + + /// + /// Осуществляет проверку того, что при POST запросах, отправляющих простейшие объекты JSON-строкой, происходит корректная вставка. + /// + [Fact] + public void PostSimpleObjectTest() + { + ActODataService(args => + { + // Создаем объект данных. + Страна country = new Страна { Название = "Russia" }; + + // Преобразуем объект данных в JSON-строку. + string[] contryPropertiesNames = + { + Information.ExtractPropertyPath<Страна>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Страна>(x => x.Название) + }; + var contryDynamicView = new View(new ViewAttribute("ContryDynamicView", contryPropertiesNames), typeof(Страна)); + + string requestJsonData = country.ToJson(contryDynamicView, args.Token.Model); + + // Формируем URL запроса к OData-сервису. + string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Страна)).Name); + + // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. + using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonData).Result) + { + // Убедимся, что запрос завершился успешно. + Assert.Equal(HttpStatusCode.Created, response.StatusCode); + + // Получим строку с ответом (в ней должна вернуться созданная сущность). + string receivedJsonCountry = response.Content.ReadAsStringAsync().Result.Beautify(); + + // Преобразуем полученный объект в словарь (c приведением типов значений к типам свойств объекта данных). + DataObjectDictionary receivedDictionaryCountry = DataObjectDictionary.Parse(receivedJsonCountry, contryDynamicView, args.Token.Model); + + // Сравним значения полученного и исходного объектов. + Assert.True(receivedDictionaryCountry.HasProperty(Information.ExtractPropertyPath<Страна>(x => x.__PrimaryKey))); + Assert.Equal(country.__PrimaryKey, receivedDictionaryCountry.GetPropertyValue(Information.ExtractPropertyPath<Страна>(x => x.__PrimaryKey))); + + Assert.True(receivedDictionaryCountry.HasProperty(Information.ExtractPropertyPath<Страна>(x => x.Название))); + Assert.Equal(country.Название, receivedDictionaryCountry.GetPropertyValue(Information.ExtractPropertyPath<Страна>(x => x.Название))); + + // Проверяем что объект данных был корректно создан в базе. + Страна createdCountry = new Страна { __PrimaryKey = country.__PrimaryKey }; + args.DataService.LoadObject(contryDynamicView, createdCountry); + + Assert.Equal(country.Название, createdCountry.Название); + } + }); + } + + /// + /// Осуществляет проверку частичного обновления данных (передаются только значения модифицированных атрибутов) + /// для простейшего объекта, т.е. мастера и детейлы не заданы и не модифицируются. + /// Объект с изменениями передается JSON-строкой. + /// + [Fact] + public void PatchSimpleObjectTest() + { + ActODataService(args => + { + // Создаем объект данных, который потом будем обновлять, и добавляем в базу обычным сервисом данных. + Лес лес = new Лес { Название = "Чаща", Площадь = 100 }; + args.DataService.UpdateObject(лес); + + // Обновляем часть атрибутов. + лес.Площадь = 150; + + // Представление, по которому будем обновлять. + string[] медвPropertiesNames = + { + Information.ExtractPropertyPath<Лес>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Лес>(x => x.Площадь) + }; + var лесDynamicView = new View(new ViewAttribute("лесDynamicView", медвPropertiesNames), typeof(Лес)); + + // Преобразуем объект данных в JSON-строку. + string requestJsonData = лес.ToJson(лесDynamicView, args.Token.Model); + + // Формируем URL запроса к OData-сервису (с идентификатором изменяемой сущности). + string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Лес)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)лес.__PrimaryKey).Guid.ToString()); + + // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем обновляемый объект в формате JSON. + using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок обновления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был обновлен в базе, причем только по переданным атрибутам. + Лес updatedЛес = new Лес { __PrimaryKey = лес.__PrimaryKey }; + args.DataService.LoadObject(updatedЛес); + + Assert.Equal(лес.Площадь, updatedЛес.Площадь); + Assert.Equal(лес.Название, updatedЛес.Название); + } + }); + } + + /// + /// Осуществляет проверку частичного обновления данных (передаются только значения модифицированных атрибутов) + /// для мастера в детейле. + /// По стандарту сервер OData не должен обрабатывать такой запрос и поэтому вернёт HTTP Код 400. + /// Объект с изменениями передается JSON-строкой. + /// + [Fact] + public void PatchComplexObjectTest() + { + ActODataService(args => + { + // Объекты для тестирования обновления. + Медведь медв = new Медведь { Вес = 48 }; + Лес лес1 = new Лес { Название = "Бор" }; + Лес лес2 = new Лес { Название = "Березовая роща" }; + медв.ЛесОбитания = лес1; + var берлога1 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; + var берлога2 = new Берлога { Наименование = "Для плохого настроения", ЛесРасположения = лес2 }; + медв.Берлога.Add(берлога1); + медв.Берлога.Add(берлога2); + + var objs = new DataObject[] { медв, лес1, лес2, берлога1, берлога2 }; + + args.DataService.UpdateObjects(ref objs); + + // Преобразуем объект данных в JSON-строку. + string[] медвPropertiesNames = + { + Information.ExtractPropertyPath<Медведь>(x => x.__PrimaryKey), + }; + var медвDynamicView = new View(new ViewAttribute("медвDynamicView", медвPropertiesNames), typeof(Медведь)); + + string[] берлогаPropertiesNames = + { + Information.ExtractPropertyPath<Берлога>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Берлога>(x => x.ЛесРасположения), + }; + var берлогаDynamicView = new View(new ViewAttribute("берлогаDynamicView", берлогаPropertiesNames), typeof(Берлога)); + + медвDynamicView.AddDetailInView(Information.ExtractPropertyPath<Медведь>(x => x.Берлога), берлогаDynamicView, true); + + Медведь медвДляЗапроса = new Медведь { __PrimaryKey = медв.__PrimaryKey }; + Берлога берлогаДляЗапроса = new Берлога { __PrimaryKey = берлога1.__PrimaryKey, ЛесРасположения = лес2 }; + медвДляЗапроса.Берлога.Add(берлогаДляЗапроса); + + string requestJsonData = медвДляЗапроса.ToJson(медвDynamicView, args.Token.Model); + + // Формируем URL запроса к OData-сервису (с идентификатором изменяемой сущности). + string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)медв.__PrimaryKey).Guid.ToString()); + + // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем обновляемый объект в формате JSON. + using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result) + { + Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); + } + }); + } + + /// + /// Осуществляет проверку удаления данных. + /// + [Fact] + public void DeleteObjectTest() + { + ActODataService(args => + { + // ------------------ Удаление простого объекта с ключом __PrimaryKey в виде строки ----------------------------- + // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. + var класс = new КлассСоСтроковымКлючом(); + args.DataService.UpdateObject(класс); + // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). + string requestUrl = string.Format("http://localhost/odata/{0}('{1}')", args.Token.Model.GetEdmEntitySet(typeof(КлассСоСтроковымКлючом)).Name, класс.__PrimaryKey); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был удален из базы. + bool exists = true; + КлассСоСтроковымКлючом deletedКлассСоСтроковымКлючом = new КлассСоСтроковымКлючом { __PrimaryKey = класс.__PrimaryKey }; + try + { + args.DataService.LoadObject(deletedКлассСоСтроковымКлючом); + } + catch (Exception ex) + { + if (ex is CantFindDataObjectException) + exists = false; + } + + Assert.False(exists); + } + + // ------------------ Удаление простого объекта ----------------------------- + // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. + Медведь медв = new Медведь { Пол = tПол.Мужской, Вес = 80, ПорядковыйНомер = 1 }; + args.DataService.UpdateObject(медв); + + // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). + requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)медв.__PrimaryKey).Guid.ToString()); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был удален из базы. + bool exists = true; + Медведь deletedМедв = new Медведь { __PrimaryKey = медв.__PrimaryKey }; + try + { + args.DataService.LoadObject(deletedМедв); + } + catch (Exception ex) + { + if (ex is CantFindDataObjectException) + exists = false; + } + + Assert.False(exists); + } + + // ------------------ Удаление детейла и объекта с детейлами ----------------------------- + // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. + медв = new Медведь { Пол = tПол.Мужской, Вес = 80, ПорядковыйНомер = 1 }; + медв.Берлога.Add(new Берлога { Наименование = "Берлога для хорошего настроения" }); + медв.Берлога.Add(new Берлога { Наименование = "Берлога для плохого настроения" }); + Берлога delБерлога = new Берлога { Наименование = "Отдельно удаляемая берлога" }; + медв.Берлога.Add(delБерлога); + args.DataService.UpdateObject(медв); + + // Проверяем что до вызова удалений в базе есть все детейлы. + var ldef = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef; + LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Берлога), Берлога.Views.БерлогаE); + lcs.LoadingTypes = new[] { typeof(Берлога) }; + ICSSoft.STORMNET.DataObject[] dobjs = args.DataService.LoadObjects(lcs); + + Assert.Equal(3, dobjs.Length); + + // Формируем URL запроса к OData-сервису для удаления объекта-детейла (с идентификатором удаляемой сущности). + requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Берлога)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)delБерлога.__PrimaryKey).Guid.ToString()); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект-детейл был удален из базы. + bool exists = true; + Берлога deletedБерлога = new Берлога { __PrimaryKey = delБерлога.__PrimaryKey }; + try + { + args.DataService.LoadObject(deletedБерлога); + } + catch (Exception ex) + { + if (ex is CantFindDataObjectException) + exists = false; + } + + Assert.False(exists); + + // Проверяем что объект-агрегатор остался в базе. + exists = true; + Медведь deletedМедв = new Медведь { __PrimaryKey = медв.__PrimaryKey }; + try + { + args.DataService.LoadObject(deletedМедв); + } + catch (Exception ex) + { + if (ex is CantFindDataObjectException) + exists = false; + } + + Assert.True(exists); + + // Проверяем что детейлов объекта в базе осталось на 1 меньше, чем создавали. + dobjs = args.DataService.LoadObjects(lcs); + + Assert.Equal(2, dobjs.Length); + } + + // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). + requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)медв.__PrimaryKey).Guid.ToString()); + + // Обращаемся к OData-сервису для удаления объекта с детейлами и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был удален из базы. + bool exists = true; + Медведь deletedМедв = new Медведь { __PrimaryKey = медв.__PrimaryKey }; + try + { + args.DataService.LoadObject(deletedМедв); + } + catch (Exception ex) + { + if (ex is CantFindDataObjectException) + exists = false; + } + + Assert.False(exists); + + // Проверяем что детейлов объекта в базе не осталось. + dobjs = args.DataService.LoadObjects(lcs); + + Assert.Equal(0, dobjs.Length); + } + }); + } + + /// + /// Осуществляет проверку обновления мастера с иерархическими детейлами. + /// Мастер и детейлы заданы и модифицируются. + /// Объект с изменениями передается JSON-строкой. + /// + [Fact] + public void UpdateCicleDeteilTest() + { + ActODataService(args => + { + // Мастер тестирования обновления. + TestMaster testMaster1 = new TestMaster { TestMasterName = "TestMasterName" }; + var objs = new DataObject[] { testMaster1 }; + args.DataService.UpdateObjects(ref objs); + + // Колличество создаваемых детейлов. + int deteilCount = 20; + + // Детейлы тестирования обновления. + TestDetailWithCicle[] testDetailWithCicleArray = new TestDetailWithCicle[deteilCount]; + TestDetailWithCicle testDetailWithCicle = null; + + for (int i = 0; i < deteilCount; i++) + { + if (i == 0) + { + testDetailWithCicle = new TestDetailWithCicle { TestDetailName = "TestDeteilName0", TestMaster = testMaster1 }; + } + else + { + testDetailWithCicle = new TestDetailWithCicle { TestDetailName = "TestDeteilName" + i.ToString(), TestMaster = testMaster1, Parent = testDetailWithCicle }; + } + + testDetailWithCicleArray[i] = testDetailWithCicle; + objs = new DataObject[] { testDetailWithCicle }; + args.DataService.UpdateObjects(ref objs); + } + + // Обновляем атрибут мастера. + testMaster1.TestMasterName = "TestMasterNameUpdate"; + + // Представление, по которому будем обновлять. + string[] testMasterPropertiesNames = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.TestMasterName) + }; + var testMasterDynamicView = new View(new ViewAttribute("testMasterDynamicView", testMasterPropertiesNames), typeof(TestMaster)); + + // Преобразуем объект данных в JSON-строку. + string requestJsonData = testMaster1.ToJson(testMasterDynamicView, args.Token.Model); + + // Формируем URL запроса к OData-сервису (с идентификатором изменяемой сущности). + string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(TestMaster)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)testMaster1.__PrimaryKey).Guid.ToString()); + + // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем обновляемый объект в формате JSON. + using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок обновления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был обновлен в базе, причем только по переданным атрибутам. + TestMaster updatedTestMaster = new TestMaster { __PrimaryKey = testMaster1.__PrimaryKey }; + args.DataService.LoadObject(updatedTestMaster); + + Assert.Equal(testMaster1.TestMasterName, updatedTestMaster.TestMasterName); + } + + // Обновление атрибутов Детейлов. + for (int i = 0; i < deteilCount; i++) + { + testDetailWithCicleArray[i].TestDetailName += "Update"; + } + + // Представление, по которому будем обновлять. + string[] testDetailWithCiclePropertiesNames = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.TestDetailName) + }; + + var testDetailWithCicleDynamicView = new View(new ViewAttribute("testDetailWithCicleDynamicView", testDetailWithCiclePropertiesNames), typeof(TestDetailWithCicle)); + + for (int i = 0; i < deteilCount; i++) + { + // Преобразуем объект данных в JSON-строку. + string requestJsonDatatestDetailWithCicle = testDetailWithCicleArray[i].ToJson(testDetailWithCicleDynamicView, args.Token.Model); + DataObjectDictionary objJson = DataObjectDictionary.Parse(requestJsonDatatestDetailWithCicle, testDetailWithCicleDynamicView, args.Token.Model); + + objJson.Add("TestMaster@odata.bind", string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(TestMaster)).Name, + ((KeyGuid)testMaster1.__PrimaryKey).Guid.ToString("D"))); + + if (i != 0) + { + objJson.Add("Parent@odata.bind", string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(TestDetailWithCicle)).Name, + ((KeyGuid)testDetailWithCicleArray[i - 1].__PrimaryKey).Guid.ToString("D"))); + } + + requestJsonDatatestDetailWithCicle = objJson.Serialize(); + + // Формируем URL запроса к OData-сервису. + requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(TestDetailWithCicle)).Name, ((KeyGuid)testDetailWithCicleArray[i].__PrimaryKey).Guid.ToString()); + + using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonDatatestDetailWithCicle).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок обновления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был обновлен в базе, причем только по переданным атрибутам. + TestDetailWithCicle updatedTestDetailWithCicle = new TestDetailWithCicle { __PrimaryKey = testDetailWithCicleArray[i].__PrimaryKey }; + args.DataService.LoadObject(updatedTestDetailWithCicle); + + Assert.Equal(testDetailWithCicleArray[i].TestDetailName, updatedTestDetailWithCicle.TestDetailName); + } + } + }); + } + + /// + /// Test save details with inheritance. + /// + [Fact] + public void SaveDetailWithInheritanceTest() + { + ActODataService(args => + { + var базовыйКласс = new БазовыйКласс() { Свойство1 = "sv1" }; + var детейл = new ДетейлНаследник() { prop1 = 1 }; + базовыйКласс.Детейл.Add(детейл); + + args.DataService.UpdateObject(базовыйКласс); + int newValue = 2; + детейл.prop1 = newValue; + + const string baseUrl = "http://localhost/odata"; + + string detJson = детейл.ToJson(ДетейлНаследник.Views.ДетейлНаследникE, args.Token.Model); + detJson = detJson.Replace(nameof(ДетейлНаследник.БазовыйКласс), $"{nameof(ДетейлНаследник.БазовыйКласс)}@odata.bind"); + detJson = detJson.Replace("{\"__PrimaryKey\":\"", $"\"{args.Token.Model.GetEdmEntitySet(typeof(БазовыйКласс)).Name}("); + detJson = detJson.Replace("\"}", ")\""); + string[] changesets = new[] + { + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(БазовыйКласс)).Name}", + "{}", + базовыйКласс), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(ДетейлНаследник)).Name}", + detJson, + детейл), + }; + HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); + using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) + { + CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); + + args.DataService.LoadObject(БазовыйКласс.Views.БазовыйКлассE, базовыйКласс); + + var детейлы = базовыйКласс.Детейл.Cast<ДетейлНаследник>(); + + Assert.Equal(1, детейлы.Count()); + Assert.Equal(newValue, детейлы.First().prop1); + } + }); + } + + /// + /// Test update details with Aggregator. + /// + [Fact] + public void UpdateDetailWithAggregatorTest() + { + ActODataService(args => + { + string[] лапаPropertiesNames = + { + Information.ExtractPropertyPath<Лапа>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Лапа>(x => x.Размер), + }; + string[] кошкаPropertiesNames = + { + Information.ExtractPropertyPath<Кошка>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Кошка>(x => x.Кличка), + Information.ExtractPropertyPath<Кошка>(x => x.Тип), + Information.ExtractPropertyPath<Кошка>(x => x.КошкаСтрокой), + }; + var лапаDynamicView = new View(new ViewAttribute("лапаDynamicView", лапаPropertiesNames), typeof(Лапа)); + var кошкаDynamicView = new View(new ViewAttribute("кошкаDynamicView", кошкаPropertiesNames), typeof(Кошка)); + + var порода = new Порода() { Название = "Первая" }; + var кошка = new Кошка() { Кличка = "50", Порода = порода, Тип = ТипКошки.Домашняя }; + var лапа = new Лапа() { Размер = 50 }; + кошка.Лапа.Add(лапа); + + args.DataService.UpdateObject(кошка); + + кошка.Кличка = "100"; + кошка.Тип = ТипКошки.Дикая; + лапа.Размер = 100; + + const string baseUrl = "http://localhost/odata"; + + string requestJsonDataЛапа = лапа.ToJson(лапаDynamicView, args.Token.Model); + DataObjectDictionary objJsonЛапа = DataObjectDictionary.Parse(requestJsonDataЛапа, лапаDynamicView, args.Token.Model); + + objJsonЛапа.Add( + $"{nameof(Лапа.Кошка)}@odata.bind", + string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name, + ((KeyGuid)кошка.__PrimaryKey).Guid.ToString("D"))); + + requestJsonDataЛапа = objJsonЛапа.Serialize(); + + string[] changesets = new[] + { + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name}", + кошка.ToJson(кошкаDynamicView, args.Token.Model), + кошка), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Лапа)).Name}", + requestJsonDataЛапа, + лапа), + }; + + HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); + using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) + { + CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); + + кошкаDynamicView.AddDetailInView(Information.ExtractPropertyPath<Кошка>(x => x.Лапа), лапаDynamicView, true); + + args.DataService.LoadObject(кошкаDynamicView, кошка); + + var лапы = кошка.Лапа.Cast<Лапа>(); + + Assert.Equal("100", кошка.Кличка); + Assert.Equal(ТипКошки.Дикая, кошка.Тип); + Assert.Equal(1, лапы.Count(б => б.Размер == 100)); + } + }); + } + + /// + /// Test update details with Aggregator. + /// + [Fact] + public void UpdateSecondDetailWithAggregatorTest() + { + ActODataService(args => + { + // Arrange. + DateTime date = new DateTime(2010, 10, 10, 10, 10, 10, DateTimeKind.Local); + var порода = new Порода() { Название = "Первая" }; + var кошка = new Кошка() { Кличка = "50", Порода = порода }; + var лапа = new Лапа() { Размер = 50 }; + кошка.Лапа.Add(лапа); + var перелом = new Перелом() { Дата = DateTime.UtcNow, Тип = ТипПерелома.Открытый }; + лапа.Перелом.Add(перелом); + + args.DataService.UpdateObject(кошка); + + string[] переломPropertiesNames = + { + Information.ExtractPropertyPath<Перелом>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Перелом>(x => x.Дата), + }; + var переломDynamicView = new View(new ViewAttribute("переломDynamicView", переломPropertiesNames), typeof(Перелом)); + + string[] лапаPropertiesNames = + { + Information.ExtractPropertyPath<Лапа>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Лапа>(x => x.Размер), + Information.ExtractPropertyPath<Лапа>(x => x.РазмерСтрокой), + }; + var лапаDynamicView = new View(new ViewAttribute("лапаDynamicView", лапаPropertiesNames), typeof(Лапа)); + + string[] кошкаPropertiesNames = + { + Information.ExtractPropertyPath<Кошка>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Кошка>(x => x.Кличка), + Information.ExtractPropertyPath<Кошка>(x => x.Тип), + Information.ExtractPropertyPath<Кошка>(x => x.КошкаСтрокой), + }; + var кошкаDynamicView = new View(new ViewAttribute("кошкаDynamicView", кошкаPropertiesNames), typeof(Кошка)); + + лапа.Размер = 100; + перелом.Дата = date; + + const string baseUrl = "http://localhost/odata"; + + string requestJsonDataЛапа = лапа.ToJson(лапаDynamicView, args.Token.Model); + DataObjectDictionary objJsonЛапа = DataObjectDictionary.Parse(requestJsonDataЛапа, лапаDynamicView, args.Token.Model); + + objJsonЛапа.Add( + $"{nameof(Лапа.Кошка)}@odata.bind", + string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name, + ((KeyGuid)кошка.__PrimaryKey).Guid.ToString("D"))); + + requestJsonDataЛапа = objJsonЛапа.Serialize(); + + string requestJsonDataПерелом = перелом.ToJson(переломDynamicView, args.Token.Model); + DataObjectDictionary objJsonПерелом = DataObjectDictionary.Parse(requestJsonDataПерелом, переломDynamicView, args.Token.Model); + + objJsonПерелом.Add( + $"{nameof(Перелом.Лапа)}@odata.bind", + string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Лапа)).Name, + ((KeyGuid)лапа.__PrimaryKey).Guid.ToString("D"))); + + requestJsonDataПерелом = objJsonПерелом.Serialize(); + + string[] changesets = new[] + { + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Лапа)).Name}", + requestJsonDataЛапа, + лапа), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Перелом)).Name}", + requestJsonDataПерелом, + перелом), + }; + + HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); + using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) + { + CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); + + кошкаDynamicView.AddDetailInView(Information.ExtractPropertyPath<Кошка>(x => x.Лапа), лапаDynamicView, true); + лапаDynamicView.AddDetailInView(Information.ExtractPropertyPath<Лапа>(x => x.Перелом), переломDynamicView, true); + + args.DataService.LoadObject(кошкаDynamicView, кошка); + + var лапы = кошка.Лапа.Cast<Лапа>(); + + var переломы = лапы.FirstOrDefault().Перелом.Cast<Перелом>(); + + Assert.Equal("50", кошка.Кличка); + Assert.Equal(1, лапы.Count(б => б.Размер == 100)); + Assert.Equal(1, переломы.Count(б => б.Дата == date.ToUniversalTime())); + } + }); + } + + /// + /// Test delete and add detail. + /// + [Fact] + public void UpdateDeletedAndAddedDetailWithAggregatorTest() + { + ActODataService(args => + { + string[] лапаPropertiesNames = + { + Information.ExtractPropertyPath<Лапа>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Лапа>(x => x.Размер), + }; + string[] кошкаPropertiesNames = + { + Information.ExtractPropertyPath<Кошка>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Кошка>(x => x.Кличка), + Information.ExtractPropertyPath<Кошка>(x => x.Тип), + Information.ExtractPropertyPath<Кошка>(x => x.КошкаСтрокой), + }; + var лапаDynamicView = new View(new ViewAttribute("лапаDynamicView", лапаPropertiesNames), typeof(Лапа)); + var кошкаDynamicView = new View(new ViewAttribute("кошкаDynamicView", кошкаPropertiesNames), typeof(Кошка)); + + var порода = new Порода() { Название = "Первая" }; + var кошка = new Кошка() { Кличка = "50", Порода = порода, Тип = ТипКошки.Домашняя }; + var лапа = new Лапа() { Размер = 50 }; + var лапа2 = new Лапа() { Размер = 1000 }; + var лапа3 = new Лапа() { Размер = 2000 }; + кошка.Лапа.Add(лапа); + кошка.Лапа.Add(лапа2); + + args.DataService.UpdateObject(кошка); + + кошка.Кличка = "100"; + кошка.Тип = ТипКошки.Дикая; + лапа.Размер = 100; + + const string baseUrl = "http://localhost/odata"; + + string requestJsonDataЛапа = лапа.ToJson(лапаDynamicView, args.Token.Model); + DataObjectDictionary objJsonЛапа = DataObjectDictionary.Parse(requestJsonDataЛапа, лапаDynamicView, args.Token.Model); + + objJsonЛапа.Add( + $"{nameof(Лапа.Кошка)}@odata.bind", + string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name, + ((KeyGuid)кошка.__PrimaryKey).Guid.ToString("D"))); + + requestJsonDataЛапа = objJsonЛапа.Serialize(); + + лапа2.SetStatus(ObjectStatus.Deleted); + + string requestJsonDataЛапа3 = лапа3.ToJson(лапаDynamicView, args.Token.Model); + DataObjectDictionary objJsonЛапа3 = DataObjectDictionary.Parse(requestJsonDataЛапа3, лапаDynamicView, args.Token.Model); + + objJsonЛапа3.Add( + $"{nameof(Лапа.Кошка)}@odata.bind", + string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name, + ((KeyGuid)кошка.__PrimaryKey).Guid.ToString("D"))); + + requestJsonDataЛапа3 = objJsonЛапа3.Serialize(); + + string[] changesets = new[] + { + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Лапа)).Name}", + string.Empty, + лапа2), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Лапа)).Name}", + requestJsonDataЛапа3, + лапа3), + }; + + HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); + using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) + { + CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.NoContent, HttpStatusCode.Created }); + + кошкаDynamicView.AddDetailInView(Information.ExtractPropertyPath<Кошка>(x => x.Лапа), лапаDynamicView, true); + + args.DataService.LoadObject(кошкаDynamicView, кошка); + + var лапы = кошка.Лапа.Cast<Лапа>(); + + Assert.Equal(2, лапы.Count()); + Assert.Equal(1, лапы.Count(x => x.Размер == 2000)); + Assert.Equal(0, лапы.Count(x => x.Размер == 1000)); + } + }); + } + + /// + /// Test batch update error handling when business server throws exception. + /// + [Fact] + public void BatchUpdateErrorHandlingTest() + { + ActODataService(args => + { + string[] лапаPropertiesNames = + { + Information.ExtractPropertyPath<Лапа>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Лапа>(x => x.Размер), + }; + string[] кошкаPropertiesNames = + { + Information.ExtractPropertyPath<Кошка>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Кошка>(x => x.Кличка), + Information.ExtractPropertyPath<Кошка>(x => x.Тип), + Information.ExtractPropertyPath<Кошка>(x => x.КошкаСтрокой), + }; + var лапаDynamicView = new View(new ViewAttribute("лапаDynamicView", лапаPropertiesNames), typeof(Лапа)); + var кошкаDynamicView = new View(new ViewAttribute("кошкаDynamicView", кошкаPropertiesNames), typeof(Кошка)); + + var порода = new Порода() { Название = "Первая" }; + var кошка = new Кошка() { Кличка = "50", Порода = порода, Тип = ТипКошки.Домашняя }; + var лапа = new Лапа() { Размер = 50 }; + кошка.Лапа.Add(лапа); + + args.DataService.UpdateObject(кошка); + + кошка.Кличка = "100"; + кошка.Тип = ТипКошки.Дикая; + + // Этот размер лапы указан в CatsBS как недопустимый размер, будет сгенерировано исключение. + лапа.Размер = 100899; + + const string baseUrl = "http://localhost/odata"; + + string requestJsonDataЛапа = лапа.ToJson(лапаDynamicView, args.Token.Model); + DataObjectDictionary objJsonЛапа = DataObjectDictionary.Parse(requestJsonDataЛапа, лапаDynamicView, args.Token.Model); + + objJsonЛапа.Add( + $"{nameof(Лапа.Кошка)}@odata.bind", + string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name, + ((KeyGuid)кошка.__PrimaryKey).Guid.ToString("D"))); + + requestJsonDataЛапа = objJsonЛапа.Serialize(); + + string[] changesets = new[] + { + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name}", + кошка.ToJson(кошкаDynamicView, args.Token.Model), + кошка), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Лапа)).Name}", + requestJsonDataЛапа, + лапа), + }; + + int exceptionHandled = 0; + + args.Token.Events.CallbackAfterInternalServerError = (Exception exception, ref HttpStatusCode code) => + { + Exception currentException = exception; + + while (currentException != null) + { + if (currentException.Message == "Недопустимый размер кошачьей лапы!") + { + exceptionHandled++; + } + + currentException = currentException.InnerException; + } + + return exception; + }; + + HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); + using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) + { + Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode); + Assert.Equal(1, exceptionHandled); + } + }); + } + + /// + /// Test update agregator with inheritance details. + /// + [Fact] + public void UpdateAgregatorWithInheritanceDetailsTest() + { + ActODataService(args => + { + var son = new Son() { Name = "Yakov", SuspendersColor = "Brown" }; + var daughter = new Daughter() { Name = "Yana", DressColor = "Red" }; + var person = new Person() { Name = "Yan" }; + person.Childrens.AddRange(son, daughter); + + args.DataService.UpdateObject(person); + + person.Name = "Yan Yakovlevich"; + + // Преобразуем объект данных в JSON-строку. + string[] personPropertiesNames = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.Name) + }; + + var personDynamicView = new View(new ViewAttribute("personDynamicView", personPropertiesNames), typeof(Person)); + + string requestJsonData = person.ToJson(personDynamicView, args.Token.Model); + + // Формируем URL запроса к OData-сервису. + string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Person)).Name); + + // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. + using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonData).Result) + { + // Убедимся, что запрос завершился успешно. + Assert.Equal(HttpStatusCode.Created, response.StatusCode); + } + }); + } + + /// + /// Test batch update detail of detail. + /// + [Fact] + public void UpdateDetailOfDetailTest() + { + ActODataService(args => + { + var базовыйКласс = new БазовыйКласс() { Свойство1 = "sv1" }; + var детейл = new Детейл() { prop1 = 1 }; + базовыйКласс.Детейл.Add(детейл); + var детейл2 = new Детейл2() { prop2 = "2" }; + детейл.Детейл2.Add(детейл2); + + args.DataService.UpdateObject(базовыйКласс); + string newValue = "new"; + базовыйКласс.Свойство1 = newValue; + детейл2.prop2 = newValue; + + const string baseUrl = "http://localhost/odata"; + + string[] classPropertiesNames = + { + Information.ExtractPropertyPath<БазовыйКласс>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<БазовыйКласс>(x => x.Свойство1), + }; + + string[] detail2PropertiesNames = + { + Information.ExtractPropertyPath<Детейл2>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Детейл2>(x => x.prop2), + }; + + var classDynamicView = new View(new ViewAttribute("classDynamicView", classPropertiesNames), typeof(БазовыйКласс)); + var detail2DynamicView = new View(new ViewAttribute("detailDynamicView", detail2PropertiesNames), typeof(Детейл2)); + + string classJson = базовыйКласс.ToJson(classDynamicView, args.Token.Model); + string detJson = детейл2.ToJson(detail2DynamicView, args.Token.Model); + + DataObjectDictionary objJson = DataObjectDictionary.Parse(detJson, detail2DynamicView, args.Token.Model); + + objJson.Add( + $"{nameof(Детейл2.Детейл)}@odata.bind", + string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Детейл)).Name, + ((KeyGuid)детейл.__PrimaryKey).Guid.ToString("D"))); + + detJson = objJson.Serialize(); + + detail2DynamicView.AddProperty(Information.ExtractPropertyPath<Детейл2>(x => x.Детейл)); + string[] changesets = new[] + { + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(БазовыйКласс)).Name}", + classJson, + базовыйКласс), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Детейл2)).Name}", + detJson, + детейл2), + }; + HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); + using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) + { + CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); + + args.DataService.LoadObject(detail2DynamicView, детейл2); + + Assert.Equal(newValue, детейл2.prop2); + } + }); + } + + /// + /// Test batch update detail of detail. + /// + [Fact] + public void UpdateDetailOfDetailDescOrderTest() + { + ActODataService(args => + { + var базовыйКласс = new БазовыйКласс() { Свойство1 = "sv1" }; + var детейл = new Детейл() { prop1 = 1 }; + базовыйКласс.Детейл.Add(детейл); + var детейл2 = new Детейл2() { prop2 = "2" }; + детейл.Детейл2.Add(детейл2); + + args.DataService.UpdateObject(базовыйКласс); + string newValue = "new"; + базовыйКласс.Свойство1 = newValue; + детейл2.prop2 = newValue; + + const string baseUrl = "http://localhost/odata"; + + string[] classPropertiesNames = + { + Information.ExtractPropertyPath<БазовыйКласс>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<БазовыйКласс>(x => x.Свойство1), + }; + + string[] detail2PropertiesNames = + { + Information.ExtractPropertyPath<Детейл2>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Детейл2>(x => x.prop2), + }; + + var classDynamicView = new View(new ViewAttribute("classDynamicView", classPropertiesNames), typeof(БазовыйКласс)); + var detail2DynamicView = new View(new ViewAttribute("detailDynamicView", detail2PropertiesNames), typeof(Детейл2)); + + string classJson = базовыйКласс.ToJson(classDynamicView, args.Token.Model); + string detJson = детейл2.ToJson(detail2DynamicView, args.Token.Model); + + DataObjectDictionary objJson = DataObjectDictionary.Parse(detJson, detail2DynamicView, args.Token.Model); + + objJson.Add( + $"{nameof(Детейл2.Детейл)}@odata.bind", + string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Детейл)).Name, + ((KeyGuid)детейл.__PrimaryKey).Guid.ToString("D"))); + + detJson = objJson.Serialize(); + + detail2DynamicView.AddProperty(Information.ExtractPropertyPath<Детейл2>(x => x.Детейл)); + string[] changesets = new[] + { + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Детейл2)).Name}", + detJson, + детейл2), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(БазовыйКласс)).Name}", + classJson, + базовыйКласс), + }; + HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); + using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) + { + CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); + + args.DataService.LoadObject(detail2DynamicView, детейл2); + + Assert.Equal(newValue, детейл2.prop2); + } + }); + } + + /// + /// Test batch update detail and another type detail. + /// + [Fact] + public void UpdateDetailAndDetailTest() + { + ActODataService(args => + { + var базовыйКласс = new Библиотека() { Адрес = "ул. Пушкина" }; + var мастер = new Автор() { Имя = "Александр" }; + var детейл1 = new Книга() { Название = "Му-Му", Автор1 = мастер }; + базовыйКласс.Книга.Add(детейл1); + var детейл2 = new Журнал() { Номер = 2, Автор2 = мастер }; + базовыйКласс.Журнал.Add(детейл2); + + args.DataService.UpdateObject(базовыйКласс); + string newValue = "ул. Лермонтова"; + int newIntValue = 3; + базовыйКласс.Адрес = newValue; + детейл1.Название = newValue; + детейл2.Номер = newIntValue; + + const string baseUrl = "http://localhost/odata"; + + string[] classPropertiesNames = + { + Information.ExtractPropertyPath<Библиотека>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Библиотека>(x => x.Адрес), + }; + + string[] detail1PropertiesNames = + { + Information.ExtractPropertyPath<Книга>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Книга>(x => x.Название), + }; + + string[] detail2PropertiesNames = + { + Information.ExtractPropertyPath<Журнал>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Журнал>(x => x.Номер), + }; + + var classDynamicView = new View(new ViewAttribute("classDynamicView", classPropertiesNames), typeof(Библиотека)); + var detail1DynamicView = new View(new ViewAttribute("detailDynamicView", detail1PropertiesNames), typeof(Книга)); + var detail2DynamicView = new View(new ViewAttribute("detailDynamicView", detail2PropertiesNames), typeof(Журнал)); + + string classJson = базовыйКласс.ToJson(classDynamicView, args.Token.Model); + string det1Json = детейл1.ToJson(detail1DynamicView, args.Token.Model); + string det2Json = детейл2.ToJson(detail2DynamicView, args.Token.Model); + + DataObjectDictionary obj1Json = DataObjectDictionary.Parse(det1Json, detail1DynamicView, args.Token.Model); + + obj1Json.Add( + $"{nameof(Книга.Библиотека1)}@odata.bind", + string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Библиотека)).Name, + ((KeyGuid)базовыйКласс.__PrimaryKey).Guid.ToString("D"))); + + det1Json = obj1Json.Serialize(); + + DataObjectDictionary obj2Json = DataObjectDictionary.Parse(det2Json, detail2DynamicView, args.Token.Model); + + obj2Json.Add( + $"{nameof(Журнал.Библиотека2)}@odata.bind", + string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Библиотека)).Name, + ((KeyGuid)базовыйКласс.__PrimaryKey).Guid.ToString("D"))); + + det2Json = obj2Json.Serialize(); + + string[] changesets = new[] + { + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Библиотека)).Name}", + classJson, + базовыйКласс), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Книга)).Name}", + det1Json, + детейл1), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Журнал)).Name}", + det2Json, + детейл2), + }; + HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); + using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) + { + CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK, HttpStatusCode.OK }); + + classDynamicView.AddDetailInView(nameof(Библиотека.Книга), detail1DynamicView, true); + classDynamicView.AddDetailInView(nameof(Библиотека.Журнал), detail2DynamicView, true); + + args.DataService.LoadObject(classDynamicView, базовыйКласс); + + Assert.Equal(newValue, базовыйКласс.Адрес = newValue); + Assert.Equal(newValue, базовыйКласс.Книга[0].Название); + Assert.Equal(newIntValue, базовыйКласс.Журнал[0].Номер); + + } + }); + } + + /// + /// Осуществляет проверку удаления данных. + /// + [Fact] + public void DeletePlainObjectTest() + { + ActODataService(args => + { + // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. + Медведь agregator = new Медведь() { МедведьСтрокой = "Agregator" }; + args.DataService.UpdateObject(agregator); + + View view = new View(typeof(Медведь), View.ReadType.OnlyThatObject); + Медведь foundAgregator0 = args.DataService.Query<Медведь>(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.NotNull(foundAgregator0); + + // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). + string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, agregator.__PrimaryKey); + requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был удален из базы. + Медведь foundAgregator = args.DataService.Query<Медведь>(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.Null(foundAgregator); + } + }); + } + + /// + /// Осуществляет проверку удаления данных, если детейл и мастер одного типа, но при этом пустые. + /// + [Fact] + public void DeleteObjectWithSameDetailAndMasterEmptyTest() + { + ActODataService(args => + { + // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. + AgregatorSameMD agregator = new AgregatorSameMD() { Name = "Agregator" }; + args.DataService.UpdateObject(agregator); + + View view = new View(typeof(AgregatorSameMD), View.ReadType.OnlyThatObject); + AgregatorSameMD foundAgregator0 = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.NotNull(foundAgregator0); + + // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). + string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(AgregatorSameMD)).Name, agregator.__PrimaryKey); + requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был удален из базы. + AgregatorSameMD foundAgregator = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.Null(foundAgregator); + } + }); + } + + /// + /// Осуществляет проверку удаления данных, если детейл и мастер одного типа? но лишь детейл заполнен. + /// + [Fact] + public void DeleteObjectWithSameDetailAndMasterTest() + { + ActODataService(args => + { + // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. + AgregatorSameMD agregator = new AgregatorSameMD() { Name = "Agregator" }; + args.DataService.UpdateObject(agregator); + + DetailAndMaster dm = new DetailAndMaster() { Name = "DetailAndMaster" }; + agregator.Details.Add(dm); + args.DataService.UpdateObject(dm); + + AgregatorSameMD agregator2 = new AgregatorSameMD() { Name = "Agregator2" }; + args.DataService.UpdateObject(agregator2); + DetailAndMaster dm2 = new DetailAndMaster() { Name = "DetailAndMaster2" }; + agregator2.Details.Add(dm2); + args.DataService.UpdateObject(dm2); + + View view = new View(typeof(AgregatorSameMD), View.ReadType.OnlyThatObject); + AgregatorSameMD foundAgregator0 = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.NotNull(foundAgregator0); + + // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). + string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(AgregatorSameMD)).Name, agregator.__PrimaryKey); + requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был удален из базы. + AgregatorSameMD foundAgregator = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.Null(foundAgregator); + } + }); + } + + /// + /// Осуществляет проверку удаления данных, если детейл и мастер одного типа, но не пустые. + /// + [Fact] + public void DeleteObjectWithSameDetailAndMaster2Test() + { + ActODataService(args => + { + // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. + AgregatorSameMD agregator = new AgregatorSameMD() { Name = "Agregator" }; + args.DataService.UpdateObject(agregator); + + DetailAndMaster dm = new DetailAndMaster() { Name = "DetailAndMaster" }; + agregator.Details.Add(dm); + args.DataService.UpdateObject(dm); + + AgregatorSameMD agregator2 = new AgregatorSameMD() { Name = "Agregator2" }; + args.DataService.UpdateObject(agregator2); + DetailAndMaster dm2 = new DetailAndMaster() { Name = "DetailAndMaster2" }; + agregator2.Details.Add(dm2); + args.DataService.UpdateObject(dm2); + + agregator.Master = dm2; + args.DataService.UpdateObject(agregator); + + View view = new View(typeof(AgregatorSameMD), View.ReadType.OnlyThatObject); + AgregatorSameMD foundAgregator0 = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.NotNull(foundAgregator0); + + // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). + string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(AgregatorSameMD)).Name, agregator.__PrimaryKey); + requestUrl = requestUrl.Replace("{", string.Empty).Replace("}", string.Empty); + + // Обращаемся к OData-сервису и обрабатываем ответ. + using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был удален из базы. + AgregatorSameMD foundAgregator = args.DataService.Query(view).FirstOrDefault(x => x.__PrimaryKey == agregator.__PrimaryKey); + Assert.Null(foundAgregator); + } + }); + } + + /// + /// Тест на изменение ссылки. + /// + [Fact] + public void MasterChangeTest() + { + ActODataService(args => + { + // Создаем объект данных, который потом будем обновлять, и добавляем в базу обычным сервисом данных. + Страна страна1 = new Страна { Название = "Страна1" }; + Страна страна2 = new Страна { Название = "Россия" }; + args.DataService.UpdateObject(страна1); + args.DataService.UpdateObject(страна2); + + Лес лес = new Лес { Название = "Тайга", Площадь = 2000, Страна = страна1 }; + args.DataService.UpdateObject(лес); + + // Обновляем ссылку. + лес.Страна = страна2; + + // Представление, по которому будем обновлять. + string[] лесPropertiesNames = + { + Information.ExtractPropertyPath<Лес>(x => x.__PrimaryKey), + }; + var лесDynamicView = new View(new ViewAttribute("лесDynamicView", лесPropertiesNames), typeof(Лес)); + + // Преобразуем объект данных в JSON-строку. + string requestJsonDataЛес = лес.ToJson(лесDynamicView, args.Token.Model); + + // Добавляем в payload информацию, что поменяли ссылку на страну. + var requestJsonData = ODataTestHelper.AddEntryRelationship(requestJsonDataЛес, лесDynamicView, args.Token.Model, страна2, nameof(Лес.Страна)); + + // Получаем адрес для PATCH запроса. + var requestUrl = ODataTestHelper.GetRequestUrl(args.Token.Model, лес); + + // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем обновляемый объект в формате JSON. + using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок обновления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был обновлен в базе, причем только по переданным атрибутам. + Лес updatedЛес = new Лес { __PrimaryKey = лес.__PrimaryKey }; + args.DataService.LoadObject(updatedЛес); + + Assert.Equal(лес.Страна.__PrimaryKey.ToString(), updatedЛес.Страна.__PrimaryKey.ToString()); + } + }); + } + + /// + /// Тест на изменение агрегатора у детейла. + /// + [Fact] + public void AggregatorChangeTest() + { + ActODataService(args => + { + // Создаем объекты данных, которые потом будем обновлять, и добавляем в базу обычным сервисом данных. + Медведь медведь1 = new Медведь { ПорядковыйНомер = 1 }; + Медведь медведь2 = new Медведь { ПорядковыйНомер = 2 }; + args.DataService.UpdateObject(медведь1); + args.DataService.UpdateObject(медведь2); + + Берлога берлога1 = new Берлога { Наименование = "Берлога1", Медведь = медведь1 }; + Берлога берлога2 = new Берлога { Наименование = "Берлога2", Медведь = медведь1 }; + Берлога берлога3 = new Берлога { Наименование = "Берлога3", Медведь = медведь1 }; + args.DataService.UpdateObject(берлога1); + args.DataService.UpdateObject(берлога2); + args.DataService.UpdateObject(берлога3); + + // Обновляем ссылку. + берлога1.Медведь = медведь2; + + // Представление, по которому будем обновлять. + string[] берлогаPropertiesNames = + { + Information.ExtractPropertyPath<Берлога>(x => x.__PrimaryKey), + }; + var берлогаDynamicView = new View(new ViewAttribute("берлогаDynamicView", берлогаPropertiesNames), typeof(Берлога)); + + // Преобразуем объект данных в JSON-строку. + string requestJsonData = берлога1.ToJson(берлогаDynamicView, args.Token.Model); + + // Добавляем в payload информацию, что поменяли ссылку на медведя. + requestJsonData = ODataTestHelper.AddEntryRelationship(requestJsonData, берлогаDynamicView, args.Token.Model, медведь2, nameof(Берлога.Медведь)); + + // Формируем URL запроса к OData-сервису (с идентификатором изменяемой сущности). + var requestUrl = ODataTestHelper.GetRequestUrl(args.Token.Model, берлога1); + + // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем обновляемый объект в формате JSON. + using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок обновления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был обновлен в базе, причем только по переданным атрибутам. + Берлога updatedБерлога = new Берлога { __PrimaryKey = берлога1.__PrimaryKey }; + args.DataService.LoadObject(updatedБерлога); + + Assert.Equal(берлога1.Медведь.__PrimaryKey.ToString(), updatedБерлога.Медведь.__PrimaryKey.ToString()); + } + }); + } + + /// + /// Проверка изменения сложного агрегатора (у которого есть ещё ссылки на другие мастера). + /// + [Fact] + public void ComplexAggregatorChangeTest() + { + ActODataService(args => + { + LegoDevice device1 = new LegoDevice { BlockId = 1, Name = "First" }; + LegoDevice device2 = new LegoDevice { BlockId = 2, Name = "Second" }; + LegoDevice device3 = new LegoDevice { BlockId = 3, Name = "Third" }; + args.DataService.UpdateObject(device1); + args.DataService.UpdateObject(device2); + args.DataService.UpdateObject(device3); + + // Создаем объекты данных, которые потом будем обновлять, и добавляем в базу обычным сервисом данных. + LegoPatent patent = new LegoPatent { Description = "Patent A", BaseLegoBlock = device1, Date = DateTime.Now }; + args.DataService.UpdateObject(patent); + + // Обновляем ссылку на агрегатора. + patent.BaseLegoBlock = device2; + + // Представление, по которому будем обновлять. + string[] patentPropertiesNames = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + }; + var patentDynamicView = new View(new ViewAttribute("patentDynamicView", patentPropertiesNames), typeof(LegoPatent)); + + // Преобразуем объект данных в JSON-строку. + string requestJsonData = patent.ToJson(patentDynamicView, args.Token.Model); + + // Добавляем в payload информацию, что поменяли ссылку на агрегатора. + requestJsonData = ODataTestHelper.AddEntryRelationship(requestJsonData, patentDynamicView, args.Token.Model, device2, nameof(LegoPatent.BaseLegoBlock)); + + // Формируем URL запроса к OData-сервису (с идентификатором изменяемой сущности). + var requestUrl = ODataTestHelper.GetRequestUrl(args.Token.Model, patent); + + // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем обновляемый объект в формате JSON. + using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result) + { + // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок обновления). + Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + + // Проверяем что объект данных был обновлен в базе, причем только по переданным атрибутам. + LegoPatent updatedLegoPatent = new LegoPatent { __PrimaryKey = patent.__PrimaryKey }; + args.DataService.LoadObject(updatedLegoPatent); + + Assert.Equal(patent.BaseLegoBlock.__PrimaryKey.ToString(), updatedLegoPatent.BaseLegoBlock.__PrimaryKey.ToString()); + } + }); + } + } +} diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs new file mode 100644 index 00000000..2979cc0d --- /dev/null +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs @@ -0,0 +1,77 @@ +#if NETCOREAPP +namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Update +{ + using System; + using System.Net; + using System.Net.Http; + + using ICSSoft.STORMNET; + using NewPlatform.Flexberry.ORM.ODataService.Tests.Extensions; + using NewPlatform.Flexberry.ORM.ODataService.Tests.Helpers; + + using Xunit; + using Xunit.Abstractions; + + /// + /// Тесты для проверки работы UpdateViews. + /// + public class UpdateViewsTest : BaseODataServiceIntegratedTest + { + /// + /// Конструктор по-умолчанию. + /// + /// Фабрика для приложения. + /// Вывод диагностической информации по тестам. + public UpdateViewsTest(CustomWebApplicationFactory factory, ITestOutputHelper output) + : base(factory, output) + { + + } + + /// + /// Проверка работы UpdateView - случай когда в UpdateView не включен мастер. + /// + [Fact] + public void UpdateViewNoMastersTest() + { + ActODataService(args => + { + // Создаем объекты данных, которые потом будем обновлять, и добавляем в базу обычным сервисом данных. + Медведь медведь1 = new Медведь { ПорядковыйНомер = 1 }; + Медведь медведь2 = new Медведь { ПорядковыйНомер = 2 }; + args.DataService.UpdateObject(медведь1); + args.DataService.UpdateObject(медведь2); + + Берлога берлога1 = new Берлога { Наименование = "Берлога1", Медведь = медведь1 }; + Берлога берлога2 = new Берлога { Наименование = "Берлога2", Медведь = медведь1 }; + Берлога берлога3 = new Берлога { Наименование = "Берлога3", Медведь = медведь1 }; + args.DataService.UpdateObject(берлога1); + args.DataService.UpdateObject(берлога2); + args.DataService.UpdateObject(берлога3); + + // Обновляем ссылку. + берлога1.Медведь = медведь2; + + // Представление, по которому будем обновлять. + string[] берлогаPropertiesNames = + { + Information.ExtractPropertyPath<Берлога>(x => x.__PrimaryKey), + }; + var берлогаDynamicView = new View(new ViewAttribute("берлогаDynamicView", берлогаPropertiesNames), typeof(Берлога)); + + // Преобразуем объект данных в JSON-строку. + string requestJsonData = берлога1.ToJson(берлогаDynamicView, args.Token.Model); + + // Добавляем в payload информацию, что поменяли ссылку на медведя. + requestJsonData = ODataHelper.AddEntryRelationship(requestJsonData, берлогаDynamicView, args.Token.Model, медведь2, nameof(Берлога.Медведь)); + + // Формируем URL запроса к OData-сервису (с идентификатором изменяемой сущности). + var requestUrl = ODataHelper.GetRequestUrl(args.Token.Model, берлога1); + + // Сейчас обновление мастеров не поддерживается. + Assert.Throws(() => args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result); // Если падает Exception, значит представление поменялось и работает. + }); + } + } +} +#endif diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp index 7b58aff7..3bbb0984 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp @@ -1,1333 +1,1333 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Helpers/ODataHelper.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Helpers/ODataHelper.cs new file mode 100644 index 00000000..ea2100be --- /dev/null +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Helpers/ODataHelper.cs @@ -0,0 +1,47 @@ +using ICSSoft.STORMNET; +using ICSSoft.STORMNET.KeyGen; +using NewPlatform.Flexberry.ORM.ODataService.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests.Helpers +{ + public class ODataHelper + { + /// + /// Добавить запись об изменении ссылки в OData Payload. + /// + /// Исходный payload. + /// Представление исходного объекта. + /// EDM модель. + /// Новый объект данных (по ссылке). + /// Ссылка на новый объект данных. + /// Новый OData Payload. + public static string AddEntryRelationship(string requestJsonData, View view, DataObjectEdmModel model, DataObject dataObject, string relationName) + { + DataObjectDictionary objJsonМедв = DataObjectDictionary.Parse(requestJsonData, view, model); + + objJsonМедв.Add( + $"{relationName}@odata.bind", + string.Format( + "{0}({1})", + model.GetEdmEntitySet(dataObject.GetType()).Name, + ((KeyGuid)dataObject.__PrimaryKey).Guid.ToString("D"))); + + var result = objJsonМедв.Serialize(); + return result; + } + + /// + /// Получить URL для запроса к OData. + /// + /// EDM модель. + /// Объект (по которому выполняется запрос). + /// URL запроса к OData. + public static string GetRequestUrl(DataObjectEdmModel model, DataObject dataObject) + => string.Format("http://localhost/odata/{0}({1})", model.GetEdmEntitySet(dataObject.GetType()).Name, ((KeyGuid)dataObject.__PrimaryKey).Guid.ToString()); + } +} diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startups/UpdateViewsTestStartup.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startups/UpdateViewsTestStartup.cs new file mode 100644 index 00000000..d65fbf94 --- /dev/null +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startups/UpdateViewsTestStartup.cs @@ -0,0 +1,76 @@ +#if NETCOREAPP +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using System; + using System.Collections.Generic; + using ICSSoft.Services; + using ICSSoft.STORMNET; + using IIS.Caseberry.Logging.Objects; + using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Hosting; + using Microsoft.AspNetCore.Routing; + using Microsoft.Extensions.Configuration; + using NewPlatform.Flexberry.ORM.ODataService; + using NewPlatform.Flexberry.ORM.ODataService.Extensions; + using NewPlatform.Flexberry.ORM.ODataService.Model; + using NewPlatform.Flexberry.ORM.ODataService.WebApi.Extensions; + using NewPlatform.Flexberry.Services; + using ODataServiceSample.AspNetCore; + using Unity; + + /// + /// Startup for testing UpdateView configuration. + /// + public class UpdateViewsTestStartup : Startup + { + /// + /// Initialize new instance of TestStartup. + /// + /// Configuration for new instance. + public UpdateViewsTestStartup(IConfiguration configuration) + : base(configuration) + { + } + + /// + public override void Configure(IApplicationBuilder app, IHostingEnvironment env) + { + IUnityContainer unityContainer = UnityFactory.GetContainer(); + unityContainer.RegisterInstance(env); + + app.UseMiddleware(); + + app.UseMvc(builder => + { + builder.MapRoute("Lock", "api/lock/{action}/{dataObjectId}", new { controller = "Lock" }); + builder.MapFileRoute(); + }); + + app.UseODataService(builder => + { + IUnityContainer container = UnityFactory.GetContainer(); + + var assemblies = new[] + { + typeof(Медведь).Assembly, + typeof(ApplicationLog).Assembly, + typeof(UserSetting).Assembly, + typeof(Lock).Assembly, + }; + + PseudoDetailDefinitions pseudoDetailDefinitions = (PseudoDetailDefinitions)container.Resolve(typeof(PseudoDetailDefinitions)); + var updateViews = new Dictionary() + { + { typeof(Медведь), Медведь.Views.МедведьUpdateView }, + { typeof(Берлога), Берлога.Views.БерлогаUpdateView }, + }; + var modelBuilder = new DefaultDataObjectEdmModelBuilder(assemblies, false, pseudoDetailDefinitions, updateViews: updateViews); + + var token = builder.MapDataObjectRoute(modelBuilder); + + container.RegisterInstance(typeof(ManagementToken), token); + }); + } + } +} +#endif diff --git "a/Tests/Objects/\320\221\320\265\321\200\320\273\320\276\320\263\320\260.cs" "b/Tests/Objects/\320\221\320\265\321\200\320\273\320\276\320\263\320\260.cs" index 1dd229ac..7dcc108c 100644 --- "a/Tests/Objects/\320\221\320\265\321\200\320\273\320\276\320\263\320\260.cs" +++ "b/Tests/Objects/\320\221\320\265\321\200\320\273\320\276\320\263\320\260.cs" @@ -50,6 +50,11 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "Сертификат", "СертификатСтрока"})] [MasterViewDefineAttribute("БерлогаE", "ЛесРасположения", ICSSoft.STORMNET.LookupTypeEnum.Standard, "", "Название")] + [View("БерлогаUpdateView", new string[] { + "Наименование as \'Наименование\'", + "Комфортность as \'Комфортность\'", + "Заброшена as \'Заброшена\'", + "ПолеБС"})] public class Берлога : ICSSoft.STORMNET.DataObject { @@ -393,6 +398,17 @@ public static ICSSoft.STORMNET.View БерлогаE return ICSSoft.STORMNET.Information.GetView("БерлогаE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Берлога)); } } + + /// + /// Представление для тестов UpdateView (без мастеров и детейлов). + /// + public static ICSSoft.STORMNET.View БерлогаUpdateView + { + get + { + return ICSSoft.STORMNET.Information.GetView("БерлогаUpdateView", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Берлога)); + } + } } } @@ -419,7 +435,7 @@ public class DetailArrayOfБерлога : ICSSoft.STORMNET.DetailArray /// /// Adds object with type Берлога. /// - public DetailArrayOfБерлога(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fМедведь) : + public DetailArrayOfБерлога(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fМедведь) : base(typeof(Берлога), ((ICSSoft.STORMNET.DataObject)(fМедведь))) { } diff --git "a/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" "b/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" index c379db99..f16467de 100644 --- "a/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" +++ "b/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" @@ -72,6 +72,13 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests "ЛесОбитания.Название as \'Название\'"})] [View("МедведьShort", new string[] { "ПорядковыйНомер as \'Порядковый номер\'"})] + [View("МедведьUpdateView", new string[] { + "ПорядковыйНомер as \'Порядковый номер\'", + "Вес as \'Вес\'", + "ЦветГлаз as \'Цвет глаз\'", + "Пол as \'Пол\'", + "ДатаРождения as \'Дата рождения\'", + "ПолеБС"})] [View("МедведьСДелейломИВычислимымСвойством", new string[] { "ПорядковыйНомер as \'Порядковый номер\'", "Вес as \'Вес\'", @@ -724,6 +731,17 @@ public static ICSSoft.STORMNET.View МедведьShort } } + /// + /// Представление для тестов UpdateView (без мастеров и детейлов). + /// + public static ICSSoft.STORMNET.View МедведьUpdateView + { + get + { + return ICSSoft.STORMNET.Information.GetView("МедведьUpdateView", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + /// /// "МедведьСДелейломИВычислимымСвойством" view. /// From 5d79d736235e0d378d6d6d9357263b9dcf3d9ee1 Mon Sep 17 00:00:00 2001 From: inaidanov Date: Tue, 23 Jan 2024 11:35:42 +0500 Subject: [PATCH 59/77] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20Assert=20=D0=B2=20UpdateViewsTest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CRUD/Update/UpdateViewsTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs index 2979cc0d..2172ff08 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs @@ -69,7 +69,7 @@ public void UpdateViewNoMastersTest() var requestUrl = ODataHelper.GetRequestUrl(args.Token.Model, берлога1); // Сейчас обновление мастеров не поддерживается. - Assert.Throws(() => args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result); // Если падает Exception, значит представление поменялось и работает. + Assert.ThrowsAsync(() => args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData)); // Если падает Exception, значит представление поменялось и работает. }); } } From 883e232846f5ece30a12e21f8345e36dac7d3bc0 Mon Sep 17 00:00:00 2001 From: Ilya Naidanov Date: Thu, 25 Jan 2024 16:40:31 +0500 Subject: [PATCH 60/77] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20Startup=20=D0=B2=20=D1=82=D0=B5=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BaseIntegratedTest.cs | 8 ++- .../BaseODataServiceIntegratedTest.cs | 8 ++- .../CRUD/Create/BusinessServersTest.cs | 7 ++- .../CRUD/Create/ChangeMasterInBSTest.cs | 7 ++- .../CreateWithPseudoDetailDefinedTest.cs | 7 ++- .../CRUD/GisCRUDTest.cs | 7 ++- .../CRUD/MultiThreadTests.cs | 9 ++- .../CRUD/Read/BuiltinQueryFunctionsTest.cs | 7 ++- .../CRUD/Read/Excel/ExcelExportTest.cs | 7 ++- .../Read/FilterByMasterDetailFieldTest.cs | 55 ++++++++++--------- .../CRUD/Read/FilterByMasterFieldTest.cs | 9 ++- .../FilterByMasterMasterDetailFieldTest.cs | 7 ++- .../Read/FilterByPseudoDetailFieldTest.cs | 7 ++- .../CRUD/Read/FilterTest.cs | 7 ++- .../CRUD/Read/GetTest.cs | 17 ++++-- .../CRUD/Read/MetaDataTest.cs | 7 ++- .../CRUD/Read/ReferenceToMasterTest.cs | 7 ++- .../CRUD/Read/SkipTopOrderByTest.cs | 7 ++- .../CRUD/Read/UtfRequestsTest.cs | 9 ++- .../CRUD/Update/BusinessServersTest.cs | 7 ++- .../CRUD/Update/ModifyDataTest.cs | 29 ++++++---- .../CRUD/Update/WebFileTest.cs | 9 ++- .../CustomWebApplicationFactory.cs | 2 +- .../Events/AfterGetTest.cs | 7 ++- .../Events/AfterInternalServerErrorTest.cs | 11 +++- .../Events/AfterSaveTest.cs | 7 ++- .../Events/BeforeGetTest.cs | 33 ++++++----- .../Events/BeforeSaveTest.cs | 7 ++- .../Files/FileControllerTest.cs | 7 ++- .../Functions/ActionsTest.cs | 7 ++- .../Functions/DelegateFunctionsTest.cs | 7 ++- .../Functions/FunctionsTest.cs | 7 ++- .../Model/CustomizationEdmModelNames.cs | 7 ++- .../DefaultOfflineManagerIntegratedTest.cs | 7 ++- .../OfflineAuditServiceIntegratedTest.cs | 7 ++- 35 files changed, 264 insertions(+), 96 deletions(-) diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/BaseIntegratedTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/BaseIntegratedTest.cs index 22cac7b0..61d3c46b 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/BaseIntegratedTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/BaseIntegratedTest.cs @@ -30,9 +30,11 @@ public abstract class BaseIntegratedTest : IDisposable /// /// Base class for integration tests. /// - public abstract class BaseIntegratedTest : IClassFixture>, IDisposable + /// Startup class used for booting the application. + public abstract class BaseIntegratedTest : IClassFixture>, IDisposable + where TStartup : class { - protected readonly WebApplicationFactory _factory; + protected readonly WebApplicationFactory _factory; #endif protected ITestOutputHelper _output; @@ -139,7 +141,7 @@ protected BaseIntegratedTest(string tempDbNamePrefix, bool useGisDataService = f /// Unit tests debug output. /// Prefix for temp database name. /// Use DataService with Gis support. - protected BaseIntegratedTest(CustomWebApplicationFactory factory, ITestOutputHelper output, string tempDbNamePrefix, bool useGisDataService = false) + protected BaseIntegratedTest(CustomWebApplicationFactory factory, ITestOutputHelper output, string tempDbNamePrefix, bool useGisDataService = false) { _factory = factory; _output = output; diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/BaseODataServiceIntegratedTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/BaseODataServiceIntegratedTest.cs index e904d023..eee8605f 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/BaseODataServiceIntegratedTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/BaseODataServiceIntegratedTest.cs @@ -35,7 +35,13 @@ /// /// Базовый класс для тестирования работы с данными через ODataService. /// +#if NETFRAMEWORK public class BaseODataServiceIntegratedTest : BaseIntegratedTest +#endif +#if NETCOREAPP + public class BaseODataServiceIntegratedTest : BaseIntegratedTest + where TStartup : class +#endif { protected IDataObjectEdmModelBuilder _builder; @@ -72,7 +78,7 @@ public BaseODataServiceIntegratedTest( } #endif #if NETCOREAPP - public BaseODataServiceIntegratedTest(CustomWebApplicationFactory factory, ITestOutputHelper output = null, bool useNamespaceInEntitySetName = false, bool useGisDataService = false, PseudoDetailDefinitions pseudoDetailDefinitions = null) + public BaseODataServiceIntegratedTest(CustomWebApplicationFactory factory, ITestOutputHelper output = null, bool useNamespaceInEntitySetName = false, bool useGisDataService = false, PseudoDetailDefinitions pseudoDetailDefinitions = null) : base(factory, output, "ODataDB", useGisDataService) { Init(useNamespaceInEntitySetName, pseudoDetailDefinitions); diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Create/BusinessServersTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Create/BusinessServersTest.cs index 6f1bfb16..27b8c4c4 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Create/BusinessServersTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Create/BusinessServersTest.cs @@ -13,7 +13,12 @@ /// /// Класс тестов для тестирования бизнес-серверов. /// +#if NETFRAMEWORK public class BusinessServersTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class BusinessServersTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -21,7 +26,7 @@ public class BusinessServersTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public BusinessServersTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public BusinessServersTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Create/ChangeMasterInBSTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Create/ChangeMasterInBSTest.cs index a340a454..ccae2f74 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Create/ChangeMasterInBSTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Create/ChangeMasterInBSTest.cs @@ -11,7 +11,12 @@ /// /// Класс тестов для тестирования изменения мастера при создании детейла. /// +#if NETFRAMEWORK public class ChangeMasterInBSTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class ChangeMasterInBSTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -19,7 +24,7 @@ public class ChangeMasterInBSTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public ChangeMasterInBSTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public ChangeMasterInBSTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Create/CreateWithPseudoDetailDefinedTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Create/CreateWithPseudoDetailDefinedTest.cs index f1aedc2b..7a364423 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Create/CreateWithPseudoDetailDefinedTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Create/CreateWithPseudoDetailDefinedTest.cs @@ -11,7 +11,12 @@ /// /// Unit-test class for creation entity instance with pseudodetail field defined through OData service. /// +#if NETFRAMEWORK public class CreateWithPseudoDetailDefinedTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class CreateWithPseudoDetailDefinedTest : BaseODataServiceIntegratedTest +#endif { private static PseudoDetailDefinitions GetPseudoDetailDefinitions() { @@ -31,7 +36,7 @@ public CreateWithPseudoDetailDefinedTest() : base(pseudoDetailDefinitions: GetPs } #endif #if NETCOREAPP - public CreateWithPseudoDetailDefinedTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output, pseudoDetailDefinitions: GetPseudoDetailDefinitions()) + public CreateWithPseudoDetailDefinedTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output, pseudoDetailDefinitions: GetPseudoDetailDefinitions()) { } #endif diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/GisCRUDTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/GisCRUDTest.cs index 104a1681..cd2d9985 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/GisCRUDTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/GisCRUDTest.cs @@ -21,7 +21,12 @@ /// /// Класс тестов для тестирования работы с гео-данными. /// +#if NETFRAMEWORK public class GisCRUDTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class GisCRUDTest : BaseODataServiceIntegratedTest +#endif { #if NETFRAMEWORK /// @@ -37,7 +42,7 @@ public GisCRUDTest() /// /// Фабрика для приложения. /// Вывод диагностической информации по тестам. - public GisCRUDTest(CustomWebApplicationFactory factory, ITestOutputHelper output) + public GisCRUDTest(CustomWebApplicationFactory factory, ITestOutputHelper output) : base(factory, output, false, true) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/MultiThreadTests.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/MultiThreadTests.cs index 238df9a2..6bcbfb42 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/MultiThreadTests.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/MultiThreadTests.cs @@ -33,7 +33,12 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD /// /// Тесты CRUD операций с множеством пользователей. /// +#if NETFRAMEWORK public class MultiThreadTests : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class MultiThreadTests : BaseODataServiceIntegratedTest +#endif { private const int ThreadCount = 50; @@ -54,7 +59,7 @@ public MultiThreadTests(Xunit.Abstractions.ITestOutputHelper output) /// /// Фабрика для приложения. /// Вывод отладочной информации. - public MultiThreadTests(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public MultiThreadTests(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } @@ -337,7 +342,7 @@ private static void RegisterCustomUser(IUnityContainer container) container.RegisterType(); #if NETCOREAPP container.RegisterType(); - #endif +#endif container.RegisterType(); } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/BuiltinQueryFunctionsTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/BuiltinQueryFunctionsTest.cs index 70df3068..0922578b 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/BuiltinQueryFunctionsTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/BuiltinQueryFunctionsTest.cs @@ -20,7 +20,12 @@ /// /// Класс тестов для тестирования применения $filter в OData-сервисе. /// +#if NETFRAMEWORK public class BuiltinQueryFunctionsTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class BuiltinQueryFunctionsTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -28,7 +33,7 @@ public class BuiltinQueryFunctionsTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public BuiltinQueryFunctionsTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public BuiltinQueryFunctionsTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/Excel/ExcelExportTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/Excel/ExcelExportTest.cs index 9eabb8aa..1ab78bf1 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/Excel/ExcelExportTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/Excel/ExcelExportTest.cs @@ -13,7 +13,12 @@ /// /// A class for testing exports from Excel. /// +#if NETFRAMEWORK public class ExcelExportTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class ExcelExportTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -21,7 +26,7 @@ public class ExcelExportTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public ExcelExportTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public ExcelExportTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByMasterDetailFieldTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByMasterDetailFieldTest.cs index 478014a6..4df72efb 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByMasterDetailFieldTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByMasterDetailFieldTest.cs @@ -16,7 +16,12 @@ /// /// Unit-test class for filtering data through OData service by master details fields. /// +#if NETFRAMEWORK public class FilterByMasterDetailFieldTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class FilterByMasterDetailFieldTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -24,7 +29,7 @@ public class FilterByMasterDetailFieldTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public FilterByMasterDetailFieldTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public FilterByMasterDetailFieldTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } @@ -145,42 +150,42 @@ public void TestFilterByDetailMaster() Медведь медведь3 = new Медведь() { ПорядковыйНомер = 3 }; Лес лес1 = new Лес() { Название = "Шишкин" }; - Лес лес2 = new Лес() { Название = "Ёжкин" }; + Лес лес2 = new Лес() { Название = "Ёжкин" }; Лес лес3 = new Лес() { Название = "Пыжкин" }; Берлога берлога1 = new Берлога() { Наименование = "Берлога 1", ЛесРасположения = лес1, Заброшена = true }; Берлога берлога2 = new Берлога() { Наименование = "Берлога 2", ЛесРасположения = лес1, Заброшена = false }; Берлога берлога3 = new Берлога() { Наименование = "Берлога 3", ЛесРасположения = лес2, Заброшена = false }; - Берлога берлога4 = new Берлога() { Наименование = "Берлога 4", ЛесРасположения = лес2, Заброшена = false }; + Берлога берлога4 = new Берлога() { Наименование = "Берлога 4", ЛесРасположения = лес2, Заброшена = false }; Берлога берлога5 = new Берлога() { Наименование = "Берлога 5", ЛесРасположения = лес3, Заброшена = false }; Берлога берлога6 = new Берлога() { Наименование = "Берлога 6", ЛесРасположения = лес3, Заброшена = true}; медведь1.Берлога.AddRange(берлога1, берлога2); - медведь2.Берлога.AddRange(берлога3, берлога4); + медведь2.Берлога.AddRange(берлога3, берлога4); медведь3.Берлога.AddRange(берлога5, берлога6); DataObject[] newDataObjects = new DataObject[] { лес1, лес2, лес3, медведь1, медведь2, берлога1, берлога2, берлога3, берлога4, берлога5, берлога6 }; args.DataService.UpdateObjects(ref newDataObjects); - ExternalLangDef.LanguageDef.DataService = args.DataService; - - // Act. + ExternalLangDef.LanguageDef.DataService = args.DataService; + + // Act. string requestUrl = string.Format( "http://localhost/odata/{0}?$filter={1}", args.Token.Model.GetEdmEntitySet(typeof(Берлога)).Name, "(Медведь/Берлога/any(f:(f/Заброшена eq true)))"); using (var response = args.HttpClient.GetAsync(requestUrl).Result) - { - // Assert. + { + // Assert. string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify(); Assert.Equal(HttpStatusCode.OK, response.StatusCode); Dictionary receivedDict = JsonConvert.DeserializeObject>(receivedStr); Assert.Equal(4, ((JArray)receivedDict["value"]).Count); } }); - } - + } + /// /// Tests filtering data by detail enum field with complex predicate. /// @@ -188,39 +193,39 @@ public void TestFilterByDetailMaster() public void TestFilterByEnumDetailMaster() { ActODataService(args => - { - // Arrange. - Driver driver1 = new Driver { CarCount = 2, Documents = true, Name = "Driver1" }; - Driver driver2 = new Driver { CarCount = 2, Documents = true, Name = "Driver2" }; - Driver driver3 = new Driver { CarCount = 2, Documents = true, Name = "Driver3" }; + { + // Arrange. + Driver driver1 = new Driver { CarCount = 2, Documents = true, Name = "Driver1" }; + Driver driver2 = new Driver { CarCount = 2, Documents = true, Name = "Driver2" }; + Driver driver3 = new Driver { CarCount = 2, Documents = true, Name = "Driver3" }; Car car1d1 = new Car { Model = "ВАЗ", TipCar = tTip.sedan }; Car car2d1 = new Car { Model = "ГАЗ", TipCar = tTip.sedan }; Car car1d2 = new Car { Model = "BMW", TipCar = tTip.crossover }; Car car2d2 = new Car { Model = "Porsche", TipCar = tTip.sedan }; - + Car car1d3 = new Car { Model = "Lamborghini", TipCar = tTip.crossover }; - Car car2d3 = new Car { Model = "Subaru", TipCar = tTip.sedan }; - + Car car2d3 = new Car { Model = "Subaru", TipCar = tTip.sedan }; + driver1.Car.AddRange(car1d1, car2d1); - driver2.Car.AddRange(car1d2, car2d2); + driver2.Car.AddRange(car1d2, car2d2); driver3.Car.AddRange(car1d3, car2d3); DataObject[] newDataObjects = new DataObject[] { driver1, driver2, driver3, car1d1, car2d1, car1d2, car2d2, car1d3, car2d3 }; args.DataService.UpdateObjects(ref newDataObjects); - ExternalLangDef.LanguageDef.DataService = args.DataService; - - // Act. + ExternalLangDef.LanguageDef.DataService = args.DataService; + + // Act. string requestUrl = string.Format( "http://localhost/odata/{0}?$filter={1}", args.Token.Model.GetEdmEntitySet(typeof(Car)).Name, "(Driver/Car/any(f:(f/TipCar eq NewPlatform.Flexberry.ORM.ODataService.Tests.tTip'crossover')))"); using (var response = args.HttpClient.GetAsync(requestUrl).Result) - { - // Assert. + { + // Assert. string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify(); Assert.Equal(HttpStatusCode.OK, response.StatusCode); Dictionary receivedDict = JsonConvert.DeserializeObject>(receivedStr); diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByMasterFieldTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByMasterFieldTest.cs index 283adb51..d6ae5e9b 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByMasterFieldTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByMasterFieldTest.cs @@ -15,15 +15,20 @@ /// /// Unit-test class for filtering data through OData service by master fields. /// +#if NETFRAMEWORK public class FilterByMasterFieldTest : BaseODataServiceIntegratedTest - { +#endif +#if NETCOREAPP + public class FilterByMasterFieldTest : BaseODataServiceIntegratedTest +#endif + { #if NETCOREAPP /// /// Конструктор по-умолчанию. /// /// Фабрика для приложения. /// Вывод отладочной информации. - public FilterByMasterFieldTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public FilterByMasterFieldTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByMasterMasterDetailFieldTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByMasterMasterDetailFieldTest.cs index f8298cab..8d983e31 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByMasterMasterDetailFieldTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByMasterMasterDetailFieldTest.cs @@ -16,7 +16,12 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Read /// /// Unit-test class for filtering data through OData service by master master details fields. /// +#if NETFRAMEWORK public class FilterByMasterMasterDetailFieldTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class FilterByMasterMasterDetailFieldTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -24,7 +29,7 @@ public class FilterByMasterMasterDetailFieldTest : BaseODataServiceIntegratedTes /// /// Фабрика для приложения. /// Вывод отладочной информации. - public FilterByMasterMasterDetailFieldTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public FilterByMasterMasterDetailFieldTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByPseudoDetailFieldTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByPseudoDetailFieldTest.cs index c9474cff..aa9a6fb4 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByPseudoDetailFieldTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterByPseudoDetailFieldTest.cs @@ -16,7 +16,12 @@ /// /// Unit-test class for filtering data through OData service by pseudodetail field. /// +#if NETFRAMEWORK public class FilterByPseudoDetailFieldTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class FilterByPseudoDetailFieldTest : BaseODataServiceIntegratedTest +#endif { private static PseudoDetailDefinitions GetPseudoDetailDefinitions() { @@ -36,7 +41,7 @@ public FilterByPseudoDetailFieldTest() : base(pseudoDetailDefinitions: GetPseudo } #endif #if NETCOREAPP - public FilterByPseudoDetailFieldTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public FilterByPseudoDetailFieldTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output, pseudoDetailDefinitions: GetPseudoDetailDefinitions()) { IUnityContainer container = UnityFactory.GetContainer(); diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterTest.cs index d6cdbb27..affba784 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/FilterTest.cs @@ -19,7 +19,12 @@ /// /// Класс тестов для тестирования применения $filter в OData-сервисе. /// +#if NETFRAMEWORK public class FilterTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class FilterTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -27,7 +32,7 @@ public class FilterTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public FilterTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public FilterTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs index 019014ad..8b69831f 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/GetTest.cs @@ -19,7 +19,12 @@ /// /// Класс тестов для проверки корректной обработки Get-запросов. /// +#if NETFRAMEWORK public class GetTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class GetTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -27,15 +32,15 @@ public class GetTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public GetTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public GetTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } #endif - /// - /// Проверка получения данных для классов, в которых есть нехранимые поля, который не содержат setter'ов. - /// (Такие варианты присутствуют в старом коде). + /// + /// Проверка получения данных для классов, в которых есть нехранимые поля, который не содержат setter'ов. + /// (Такие варианты присутствуют в старом коде). /// [Fact] public void TestGetNotStored() @@ -67,8 +72,8 @@ public void TestGetNotStored() }); } - /// - /// Проверка значение в атрибуте @odata.type. + /// + /// Проверка значение в атрибуте @odata.type. /// [Fact] public void TestGetWithMaster() diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs index e90fbf41..e3c9c00d 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/MetaDataTest.cs @@ -15,7 +15,12 @@ /// /// Класс тестов для тестирования метаданных, получаемых от OData-сервиса. /// +#if NETFRAMEWORK public class MetaDataTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class MetaDataTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -23,7 +28,7 @@ public class MetaDataTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public MetaDataTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public MetaDataTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/ReferenceToMasterTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/ReferenceToMasterTest.cs index ecbed583..14963a4f 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/ReferenceToMasterTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/ReferenceToMasterTest.cs @@ -18,7 +18,12 @@ /// /// Unit-test class for read data with reference to master through OData service. /// +#if NETFRAMEWORK public class ReferenceToMasterTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class ReferenceToMasterTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -26,7 +31,7 @@ public class ReferenceToMasterTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public ReferenceToMasterTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public ReferenceToMasterTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/SkipTopOrderByTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/SkipTopOrderByTest.cs index bc7f74ac..cc3c4ac9 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/SkipTopOrderByTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/SkipTopOrderByTest.cs @@ -20,7 +20,12 @@ /// /// Класс тестов для тестирования $skip, $top, $orderby. /// +#if NETFRAMEWORK public class SkipTopOrderByTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class SkipTopOrderByTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -28,7 +33,7 @@ public class SkipTopOrderByTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public SkipTopOrderByTest(CustomWebApplicationFactory factory, ITestOutputHelper output) + public SkipTopOrderByTest(CustomWebApplicationFactory factory, ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/UtfRequestsTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/UtfRequestsTest.cs index 931f1a75..adacb75c 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/UtfRequestsTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Read/UtfRequestsTest.cs @@ -18,15 +18,20 @@ /// /// Unit-test class for read data through OData service with using UTF8 requests. /// +#if NETFRAMEWORK public class UtfRequestsTest : BaseODataServiceIntegratedTest - { +#endif +#if NETCOREAPP + public class UtfRequestsTest : BaseODataServiceIntegratedTest +#endif + { #if NETCOREAPP /// /// Конструктор по-умолчанию. /// /// Фабрика для приложения. /// Вывод отладочной информации. - public UtfRequestsTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public UtfRequestsTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/BusinessServersTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/BusinessServersTest.cs index c10ae918..847d48e0 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/BusinessServersTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/BusinessServersTest.cs @@ -19,7 +19,12 @@ /// /// Класс тестов для тестирования бизнес-серверов. /// +#if NETFRAMEWORK public class BusinessServersTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class BusinessServersTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -27,7 +32,7 @@ public class BusinessServersTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public BusinessServersTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public BusinessServersTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs index 82210a42..9b65e4fb 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs @@ -21,7 +21,12 @@ /// /// Класс тестов для тестирования операций модификации данных OData-сервисом (вставка, обновление, удаление). /// +#if NETFRAMEWORK public class ModifyDataTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class ModifyDataTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -29,23 +34,23 @@ public class ModifyDataTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public ModifyDataTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public ModifyDataTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } #endif - /// - /// Осуществляет проверку того, что при PATCH запросах происходит вставка и удаление связей объекта. - /// Зависимые объекты (мастера, детейлы) представлены в виде - Имя_Связи@odata.bind: Имя_Набора_Сущностей(ключ) или Имя_Связи@odata.bind: [ Имя_Набора_Сущностей(ключ) ] . - /// Тест проверяет следующие факты: - /// - /// Вставка связи мастерового объекта. - /// Удаление связи мастеровго объекта путём присвоения null свойству. - /// Удаление связи мастеровго объекта путём присвоения null для Имя_Связи@odata.bind. - /// - /// - [Fact] + /// + /// Осуществляет проверку того, что при PATCH запросах происходит вставка и удаление связей объекта. + /// Зависимые объекты (мастера, детейлы) представлены в виде - Имя_Связи@odata.bind: Имя_Набора_Сущностей(ключ) или Имя_Связи@odata.bind: [ Имя_Набора_Сущностей(ключ) ] . + /// Тест проверяет следующие факты: + /// + /// Вставка связи мастерового объекта. + /// Удаление связи мастеровго объекта путём присвоения null свойству. + /// Удаление связи мастеровго объекта путём присвоения null для Имя_Связи@odata.bind. + /// + /// + [Fact] public void PatchNavigationPropertiesTest() { ActODataService(args => diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/WebFileTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/WebFileTest.cs index 708d2bb5..672fe9ac 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/WebFileTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/WebFileTest.cs @@ -13,7 +13,12 @@ using Unity; using Xunit; - public class WebFileTest: BaseODataServiceIntegratedTest +#if NETFRAMEWORK + public class WebFileTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class WebFileTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -21,7 +26,7 @@ public class WebFileTest: BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public WebFileTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public WebFileTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CustomWebApplicationFactory.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CustomWebApplicationFactory.cs index 926a4c23..98e815cc 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CustomWebApplicationFactory.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CustomWebApplicationFactory.cs @@ -22,7 +22,7 @@ protected override IWebHostBuilder CreateWebHostBuilder() var webHostBuilder = new WebHostBuilder() .UseUnityServiceProvider(container) .UseContentRoot(contentRootDirectory) - .UseStartup(); + .UseStartup(); return webHostBuilder; } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterGetTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterGetTest.cs index 4e108989..1cd43dcb 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterGetTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterGetTest.cs @@ -11,7 +11,12 @@ /// Класс тестов для тестирования логики после операции считывания данных OData-сервисом. /// +#if NETFRAMEWORK public class AfterGetTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class AfterGetTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -19,7 +24,7 @@ public class AfterGetTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public AfterGetTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public AfterGetTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterInternalServerErrorTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterInternalServerErrorTest.cs index 428eccb4..aa771b4a 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterInternalServerErrorTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterInternalServerErrorTest.cs @@ -12,7 +12,12 @@ /// /// Класс тестов для тестирования логики после возникновения исключения. /// +#if NETFRAMEWORK public class AfterInternalServerErrorTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class AfterInternalServerErrorTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -20,7 +25,7 @@ public class AfterInternalServerErrorTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public AfterInternalServerErrorTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public AfterInternalServerErrorTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } @@ -48,13 +53,13 @@ public Exception AfterInternalServerError(Exception e, ref HttpStatusCode code) public void TestAfterInternalServerError() { ActODataService(args => - { + { #if NETFRAMEWORK args.Token.Events.CallbackAfterInternalServerError = AfterInternalServerError; #elif NETCOREAPP CustomExceptionFilter.CallbackAfterInternalServerError = AfterInternalServerError; #endif - + Медведь медв = new Медведь { Вес = 48, Пол = tПол.Мужской }; Медведь медв2 = new Медведь { Вес = 148, Пол = tПол.Мужской }; Лес лес = new Лес { Название = "Бор" }; diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterSaveTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterSaveTest.cs index 52d93515..3779edd7 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterSaveTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/AfterSaveTest.cs @@ -23,7 +23,12 @@ /// /// Класс тестов для тестирования логики после операций модификации данных OData-сервисом (вставка, обновление, удаление). /// +#if NETFRAMEWORK public class AfterSaveTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class AfterSaveTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -31,7 +36,7 @@ public class AfterSaveTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public AfterSaveTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public AfterSaveTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/BeforeGetTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/BeforeGetTest.cs index 5644de97..ab3ef94a 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/BeforeGetTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/BeforeGetTest.cs @@ -1,14 +1,14 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests.Events { - using System; - using System.Collections.Generic; + using System; + using System.Collections.Generic; using System.Net; using System.Net.Http; using ICSSoft.STORMNET; - using ICSSoft.STORMNET.Business; - using NewPlatform.Flexberry.ORM.ODataService.Tests.Extensions; - using Newtonsoft.Json; + using ICSSoft.STORMNET.Business; + using NewPlatform.Flexberry.ORM.ODataService.Tests.Extensions; + using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Xunit; @@ -16,7 +16,12 @@ /// /// Класс тестов для тестирования логики после операций модификации данных OData-сервисом (вставка, обновление, удаление). /// +#if NETFRAMEWORK public class BeforeGetTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class BeforeGetTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -24,7 +29,7 @@ public class BeforeGetTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public BeforeGetTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public BeforeGetTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } @@ -43,14 +48,14 @@ public bool BeforeGet(ref LoadingCustomizationStruct lcs) return true; } - /// - /// Блокирует получение объектов. - /// - /// LCS. - /// false - public bool FalseBeforeGet(ref LoadingCustomizationStruct lcs) - { - return false; + /// + /// Блокирует получение объектов. + /// + /// LCS. + /// false + public bool FalseBeforeGet(ref LoadingCustomizationStruct lcs) + { + return false; } /// diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/BeforeSaveTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/BeforeSaveTest.cs index 153301b1..0e17c3f2 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/BeforeSaveTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Events/BeforeSaveTest.cs @@ -17,7 +17,12 @@ /// /// Класс тестов для тестирования логики перед операциями модификации данных OData-сервисом (вставка, обновление, удаление). /// +#if NETFRAMEWORK public class BeforeSaveTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class BeforeSaveTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -25,7 +30,7 @@ public class BeforeSaveTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public BeforeSaveTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public BeforeSaveTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Files/FileControllerTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Files/FileControllerTest.cs index 9ba02a91..3c2f67bb 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Files/FileControllerTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Files/FileControllerTest.cs @@ -26,7 +26,12 @@ /// /// Тесты файлового контроллера , отвечающего за загрузку файлов на сервер и их скачивание. /// +#if NETFRAMEWORK public class FileControllerTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class FileControllerTest : BaseODataServiceIntegratedTest +#endif { private const string FileBaseUrl = "http://localhost/api/File"; @@ -61,7 +66,7 @@ public class FileControllerTest : BaseODataServiceIntegratedTest #if NETFRAMEWORK public FileControllerTest() #elif NETCOREAPP - public FileControllerTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public FileControllerTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) #endif { diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Functions/ActionsTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Functions/ActionsTest.cs index f5431b2a..8bba6c0e 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Functions/ActionsTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Functions/ActionsTest.cs @@ -29,7 +29,12 @@ /// /// Класс тестов для тестирования метаданных, получаемых от OData-сервиса. /// +#if NETFRAMEWORK public class ActionsTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class ActionsTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -37,7 +42,7 @@ public class ActionsTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public ActionsTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public ActionsTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Functions/DelegateFunctionsTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Functions/DelegateFunctionsTest.cs index f18e1521..fc083751 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Functions/DelegateFunctionsTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Functions/DelegateFunctionsTest.cs @@ -13,7 +13,12 @@ /// /// Unit test class for OData Service user-defined functions /// +#if NETFRAMEWORK public class DelegateFunctionsTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class DelegateFunctionsTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -21,7 +26,7 @@ public class DelegateFunctionsTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public DelegateFunctionsTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public DelegateFunctionsTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Functions/FunctionsTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Functions/FunctionsTest.cs index a43b8ef3..ac38d289 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Functions/FunctionsTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Functions/FunctionsTest.cs @@ -28,7 +28,12 @@ /// /// Класс тестов для тестирования метаданных, получаемых от OData-сервиса. /// +#if NETFRAMEWORK public class FunctionsTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class FunctionsTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// @@ -36,7 +41,7 @@ public class FunctionsTest : BaseODataServiceIntegratedTest /// /// Фабрика для приложения. /// Вывод отладочной информации. - public FunctionsTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public FunctionsTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Model/CustomizationEdmModelNames.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Model/CustomizationEdmModelNames.cs index 0b8b0703..00c8b141 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Model/CustomizationEdmModelNames.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Model/CustomizationEdmModelNames.cs @@ -15,14 +15,19 @@ /// /// Класс тестов для тестирования метаданных, получаемых от OData-сервиса. /// +#if NETFRAMEWORK public class CustomizationEdmModelNames : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class CustomizationEdmModelNames : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// /// Конструктор по-умолчанию. /// /// Фабрика для приложения. - public CustomizationEdmModelNames(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public CustomizationEdmModelNames(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Offline/DefaultOfflineManagerIntegratedTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Offline/DefaultOfflineManagerIntegratedTest.cs index 53e435ae..b1bf2388 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Offline/DefaultOfflineManagerIntegratedTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Offline/DefaultOfflineManagerIntegratedTest.cs @@ -15,13 +15,18 @@ using NewPlatform.Flexberry.ORM.ODataService.Tests.Extensions; using NewPlatform.Flexberry.Services; +#if NETFRAMEWORK public class DefaultOfflineManagerIntegratedTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class DefaultOfflineManagerIntegratedTest : BaseODataServiceIntegratedTest +#endif { #if NETCOREAPP /// /// Конструктор по-умолчанию. /// - public DefaultOfflineManagerIntegratedTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + public DefaultOfflineManagerIntegratedTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) : base(factory, output) { } #endif diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Offline/OfflineAuditServiceIntegratedTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Offline/OfflineAuditServiceIntegratedTest.cs index 96e4b461..042cf1ae 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Offline/OfflineAuditServiceIntegratedTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Offline/OfflineAuditServiceIntegratedTest.cs @@ -13,7 +13,12 @@ /// ORM-integrated unit test for . /// /// +#if NETFRAMEWORK public class OfflineAuditServiceIntegratedTest : BaseIntegratedTest +#endif +#if NETCOREAPP + public class OfflineAuditServiceIntegratedTest : BaseIntegratedTest +#endif { #if NETFRAMEWORK /// @@ -28,7 +33,7 @@ public OfflineAuditServiceIntegratedTest() /// /// Initializes a new instance of the class. /// - public OfflineAuditServiceIntegratedTest(CustomWebApplicationFactory factory, ITestOutputHelper output) + public OfflineAuditServiceIntegratedTest(CustomWebApplicationFactory factory, ITestOutputHelper output) : base(factory, output, "offline") { } From fa03e022647e05030cf703050573937946fc0dc9 Mon Sep 17 00:00:00 2001 From: Ilya Naidanov Date: Thu, 25 Jan 2024 17:29:47 +0500 Subject: [PATCH 61/77] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D1=82=D0=B5=D1=81=D1=82=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20MS=20SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CRUD/Update/ModifyDataTest.cs | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs index 9b65e4fb..1fd0c9f3 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/ModifyDataTest.cs @@ -1,4 +1,4 @@ -namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Update +namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Update { using System; using System.Collections.Generic; @@ -40,17 +40,17 @@ public ModifyDataTest(CustomWebApplicationFactory factory, Xunit.Ab } #endif - /// - /// Осуществляет проверку того, что при PATCH запросах происходит вставка и удаление связей объекта. - /// Зависимые объекты (мастера, детейлы) представлены в виде - Имя_Связи@odata.bind: Имя_Набора_Сущностей(ключ) или Имя_Связи@odata.bind: [ Имя_Набора_Сущностей(ключ) ] . - /// Тест проверяет следующие факты: - /// - /// Вставка связи мастерового объекта. - /// Удаление связи мастеровго объекта путём присвоения null свойству. - /// Удаление связи мастеровго объекта путём присвоения null для Имя_Связи@odata.bind. - /// - /// - [Fact] + /// + /// Осуществляет проверку того, что при PATCH запросах происходит вставка и удаление связей объекта. + /// Зависимые объекты (мастера, детейлы) представлены в виде - Имя_Связи@odata.bind: Имя_Набора_Сущностей(ключ) или Имя_Связи@odata.bind: [ Имя_Набора_Сущностей(ключ) ] . + /// Тест проверяет следующие факты: + /// + /// Вставка связи мастерового объекта. + /// Удаление связи мастеровго объекта путём присвоения null свойству. + /// Удаление связи мастеровго объекта путём присвоения null для Имя_Связи@odata.bind. + /// + /// + [Fact] public void PatchNavigationPropertiesTest() { ActODataService(args => From 2957a3e38a989f569cee11e0ce9595a13c8bfbdc Mon Sep 17 00:00:00 2001 From: Ilya Naidanov Date: Thu, 25 Jan 2024 18:00:37 +0500 Subject: [PATCH 62/77] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataObjectController.ModifyData.cs | 61 ++++++++++--------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs index fd604103..4c70a39a 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs @@ -266,35 +266,35 @@ private NoContentResult DeleteEntity(object key) Init(); /* В ситуации, когда мастер и детейл одного типа, ORM без подгрузки копии данных не может корректно разобрать порядок, - * в котором объекты должны быть удалены. - */ + * в котором объекты должны быть удалены. + */ bool needDataCopyLoad = _typesWithSameDetailAndMaster.Contains(type); if (!_typesWithNotSameDetailAndMaster.Contains(type) && !needDataCopyLoad) { - string[] props = Information.GetAllPropertyNames(type); - int length = props.Length; - int index = 0; - - while(!needDataCopyLoad && index < length) - { - string prop = props[index]; - Type propType = Information.GetPropertyType(type, prop); - needDataCopyLoad = propType.IsSubclassOf(typeof(DataObject)) && Information.GetDetailArrayPropertyName(type, propType) != null; - - index++; - } + string[] props = Information.GetAllPropertyNames(type); + int length = props.Length; + int index = 0; + + while (!needDataCopyLoad && index < length) + { + string prop = props[index]; + Type propType = Information.GetPropertyType(type, prop); + needDataCopyLoad = propType.IsSubclassOf(typeof(DataObject)) && Information.GetDetailArrayPropertyName(type, propType) != null; + + index++; + } } DataObject obj = null; if (!needDataCopyLoad) { - obj = DataObjectCache.CreateDataObject(type, key); - _typesWithNotSameDetailAndMaster.Add(type); + obj = DataObjectCache.CreateDataObject(type, key); + _typesWithNotSameDetailAndMaster.Add(type); } else { - obj = LoadObject(type, key.ToString()); - _typesWithSameDetailAndMaster.Add(type); + obj = LoadObject(type, key.ToString()); + _typesWithSameDetailAndMaster.Add(type); } // Удаляем объект с заданным ключем. @@ -764,12 +764,12 @@ private DataObject ReturnDataObject(Type objType, object keyValue, View view) { // Для обратной совместимости сравним перечень загруженных свойств и свойств в представлении. /* Данный код срабатывает, например, если в кэше был объект, который загрузился только на уровне первичного ключа. - * - * Данный код также срабатывает в следующей ситуации: есть класс А, у него детейл Б, у которого есть наследник В. - * При загрузке объекта класса А подгрузятся его детейлы, однако они будут подгружены по представлению, которое соответствует классу Б, даже если детейлы класса В. - * Таким образом, в кэше окажутся объекты класса В, которые загружены только по свойствам Б. Раз не все свойства подгружены, то состояние LightLoaded. - * Догружать необходимо только те свойства, что ещё не загружались (потому что загруженные уже могут быть изменены). - */ + * + * Данный код также срабатывает в следующей ситуации: есть класс А, у него детейл Б, у которого есть наследник В. + * При загрузке объекта класса А подгрузятся его детейлы, однако они будут подгружены по представлению, которое соответствует классу Б, даже если детейлы класса В. + * Таким образом, в кэше окажутся объекты класса В, которые загружены только по свойствам Б. Раз не все свойства подгружены, то состояние LightLoaded. + * Догружать необходимо только те свойства, что ещё не загружались (потому что загруженные уже могут быть изменены). + */ string[] loadedProps = dataObjectFromCache.GetLoadedProperties(); IEnumerable ownProps = view.Properties.Where(p => !p.Name.Contains('.')); if (!ownProps.All(p => loadedProps.Contains(p.Name))) @@ -835,7 +835,7 @@ private DataObject ReturnDataObject(Type objType, object keyValue, View view) /// Список на обновление. /// Объект данных который добавляем. /// Добавлять в конец списка. - private static void AddDataObject(List objsToUpdate, DataObject dataObject, bool insertToEnd) + private static void AddObjectToUpdate(List objsToUpdate, DataObject dataObject, bool insertToEnd) { bool objAlreadyExists = objsToUpdate.Any(o => PKHelper.EQDataObject(o, dataObject, false)); if (!objAlreadyExists) @@ -887,16 +887,19 @@ private DataObject GetDataObjectByEdmEntity(EdmEntityObject edmEntity, object ke // Тем самым гарантируем загруженность свойств при необходимости обновления и установку нужного статуса. Type objType = _model.GetDataObjectType(edmEntity); - View view = _model.GetDataObjectDefaultView(objType); + View view = null; if (useUpdateView) { - view = _model.GetDataObjectUpdateView(objType) ?? view; + view = _model.GetDataObjectUpdateView(objType) ?? _model.GetDataObjectDefaultView(objType); + } else + { + view = _model.GetDataObjectDefaultView(objType); } DataObject obj = ReturnDataObject(objType, value, view); // Добавляем объект в список для обновления, если там ещё нет объекта с таким ключом. - AddDataObject(dObjs, obj, endObject); + AddObjectToUpdate(dObjs, obj, endObject); // Все свойства объекта данных означим из пришедшей сущности, если они были там установлены(изменены). string agregatorPropertyName = Information.GetAgregatePropertyName(objType); @@ -1072,7 +1075,7 @@ private DataObject GetDataObjectByEdmEntity(EdmEntityObject edmEntity, object ke if (agregator != null) { - AddDataObject(dObjs, agregator, endObject); + AddObjectToUpdate(dObjs, agregator, endObject); } } From ba83fe5f2ce34b50b7ebea0cdc739b95c51550b9 Mon Sep 17 00:00:00 2001 From: inaidanov Date: Thu, 25 Jan 2024 18:46:10 +0500 Subject: [PATCH 63/77] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B9=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Model/DefaultDataObjectEdmModelBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs index b6e3bd18..de346ef2 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs @@ -224,7 +224,7 @@ private void SetUpdateView(Type dataObjectType, View updateView) return; } - if (dataObjectType != updateView.DefineClassType) + if (!Information.CheckViewForClasses(updateView.Name, dataObjectType)) { throw new ArgumentException($"View from DataObject {updateView.DefineClassType} can not be set for a DataObject of type {dataObjectType}.", nameof(updateView)); } From 62086b0f59dc600ed7f181e099827dcc5b3632a3 Mon Sep 17 00:00:00 2001 From: inaidanov Date: Mon, 29 Jan 2024 14:37:37 +0500 Subject: [PATCH 64/77] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataObjectController.ModifyData.cs | 2 +- .../Model/DefaultDataObjectEdmModelBuilder.cs | 2 +- .../CRUD/Update/UpdateViewsTest.cs | 9 ++++--- .../DotNetCoreTests.cs | 6 ++--- .../{ODataHelper.cs => ODataTestHelper.cs} | 26 +++++++++---------- .../Startups/UpdateViewsTestStartup.cs | 3 ++- 6 files changed, 24 insertions(+), 24 deletions(-) rename Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Helpers/{ODataHelper.cs => ODataTestHelper.cs} (74%) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs index 4c70a39a..a3e0e503 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs @@ -833,7 +833,7 @@ private DataObject ReturnDataObject(Type objType, object keyValue, View view) /// Добавляет объект данных в список на обновление если его там ещё нет. /// /// Список на обновление. - /// Объект данных который добавляем. + /// Объект данных, который добавляем. /// Добавлять в конец списка. private static void AddObjectToUpdate(List objsToUpdate, DataObject dataObject, bool insertToEnd) { diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs index de346ef2..4eef8eac 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs @@ -213,7 +213,7 @@ private void SetUpdateView(IEnumerable> updateViews) /// Update view to be used for objects of type . Setting removes update view for the type. private void SetUpdateView(Type dataObjectType, View updateView) { - if (!typeof(DataObject).IsAssignableFrom(dataObjectType)) + if (dataObjectType.IsSubclassOf(typeof(DataObject))) { throw new ArgumentException("Update view can be set only for a DataObject.", nameof(dataObjectType)); } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs index 2172ff08..17036da3 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs @@ -13,7 +13,8 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Update using Xunit.Abstractions; /// - /// Тесты для проверки работы UpdateViews. + /// Тесты для проверки работы UpdateViews. Для запуска OData backend используется модифицированная версия Startup - , + /// которая задаёт UpdateView для Берлоги и Медведя. /// public class UpdateViewsTest : BaseODataServiceIntegratedTest { @@ -29,7 +30,7 @@ public UpdateViewsTest(CustomWebApplicationFactory facto } /// - /// Проверка работы UpdateView - случай когда в UpdateView не включен мастер. + /// Проверка работы UpdateView - случай, когда в UpdateView не включен мастер. /// [Fact] public void UpdateViewNoMastersTest() @@ -63,10 +64,10 @@ public void UpdateViewNoMastersTest() string requestJsonData = берлога1.ToJson(берлогаDynamicView, args.Token.Model); // Добавляем в payload информацию, что поменяли ссылку на медведя. - requestJsonData = ODataHelper.AddEntryRelationship(requestJsonData, берлогаDynamicView, args.Token.Model, медведь2, nameof(Берлога.Медведь)); + requestJsonData = ODataTestHelper.AddEntryRelationship(requestJsonData, берлогаDynamicView, args.Token.Model, медведь2, nameof(Берлога.Медведь)); // Формируем URL запроса к OData-сервису (с идентификатором изменяемой сущности). - var requestUrl = ODataHelper.GetRequestUrl(args.Token.Model, берлога1); + var requestUrl = ODataTestHelper.GetRequestUrl(args.Token.Model, берлога1); // Сейчас обновление мастеров не поддерживается. Assert.ThrowsAsync(() => args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData)); // Если падает Exception, значит представление поменялось и работает. diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/DotNetCoreTests.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/DotNetCoreTests.cs index e7bb4b35..882334bf 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/DotNetCoreTests.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/DotNetCoreTests.cs @@ -13,11 +13,11 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests /// /// Тесты, специфичные для .NET Core. /// - public class DotNetCoreTests : IClassFixture> + public class DotNetCoreTests : IClassFixture> { - private readonly WebApplicationFactory _factory; + private readonly WebApplicationFactory _factory; - public DotNetCoreTests(CustomWebApplicationFactory factory) + public DotNetCoreTests(CustomWebApplicationFactory factory) { _factory = factory; } diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Helpers/ODataHelper.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Helpers/ODataTestHelper.cs similarity index 74% rename from Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Helpers/ODataHelper.cs rename to Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Helpers/ODataTestHelper.cs index ea2100be..4f8bf49c 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Helpers/ODataHelper.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Helpers/ODataTestHelper.cs @@ -1,25 +1,23 @@ -using ICSSoft.STORMNET; -using ICSSoft.STORMNET.KeyGen; -using NewPlatform.Flexberry.ORM.ODataService.Model; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests.Helpers +namespace NewPlatform.Flexberry.ORM.ODataService.Tests.Helpers { - public class ODataHelper + using ICSSoft.STORMNET; + using ICSSoft.STORMNET.KeyGen; + using NewPlatform.Flexberry.ORM.ODataService.Model; + + /// + /// Вспомогательные утилиты для тестирования OData. + /// + public static class ODataTestHelper { /// - /// Добавить запись об изменении ссылки в OData Payload. + /// Добавить запись об изменении ссылки у объекта в тело запроса к OData. /// - /// Исходный payload. + /// Исходное тело запроса. /// Представление исходного объекта. /// EDM модель. /// Новый объект данных (по ссылке). /// Ссылка на новый объект данных. - /// Новый OData Payload. + /// Новое тело запроса к OData. public static string AddEntryRelationship(string requestJsonData, View view, DataObjectEdmModel model, DataObject dataObject, string relationName) { DataObjectDictionary objJsonМедв = DataObjectDictionary.Parse(requestJsonData, view, model); diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startups/UpdateViewsTestStartup.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startups/UpdateViewsTestStartup.cs index d65fbf94..68239ad9 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startups/UpdateViewsTestStartup.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startups/UpdateViewsTestStartup.cs @@ -20,6 +20,7 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests /// /// Startup for testing UpdateView configuration. + /// Differs from TestStartup that it sets UpdateView for and data objects. /// public class UpdateViewsTestStartup : Startup { @@ -59,7 +60,7 @@ public override void Configure(IApplicationBuilder app, IHostingEnvironment env) }; PseudoDetailDefinitions pseudoDetailDefinitions = (PseudoDetailDefinitions)container.Resolve(typeof(PseudoDetailDefinitions)); - var updateViews = new Dictionary() + var updateViews = new Dictionary() // setting updateViews for testing { { typeof(Медведь), Медведь.Views.МедведьUpdateView }, { typeof(Берлога), Берлога.Views.БерлогаUpdateView }, From 504989b1c9eb8b7bcff0b51b198c9fb2db91850b Mon Sep 17 00:00:00 2001 From: inaidanov Date: Mon, 29 Jan 2024 15:19:05 +0500 Subject: [PATCH 65/77] =?UTF-8?q?fix=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B8=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=B0=20=D0=B2=20UpdateVie?= =?UTF-8?q?w?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Model/DefaultDataObjectEdmModelBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs index 4eef8eac..3e6ed225 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Model/DefaultDataObjectEdmModelBuilder.cs @@ -213,7 +213,7 @@ private void SetUpdateView(IEnumerable> updateViews) /// Update view to be used for objects of type . Setting removes update view for the type. private void SetUpdateView(Type dataObjectType, View updateView) { - if (dataObjectType.IsSubclassOf(typeof(DataObject))) + if (!dataObjectType.IsSubclassOf(typeof(DataObject))) { throw new ArgumentException("Update view can be set only for a DataObject.", nameof(dataObjectType)); } From 2bc0c002b0081377718e65ff60c61fab9a2a884f Mon Sep 17 00:00:00 2001 From: inaidanov Date: Mon, 29 Jan 2024 16:33:13 +0500 Subject: [PATCH 66/77] =?UTF-8?q?changelog=20=D0=B8=20nuspec=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=20-=207.2.0-alpha02?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 7 +- NewPlatform.Flexberry.ORM.ODataService.nuspec | 226 +++++++++--------- 2 files changed, 119 insertions(+), 114 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 477c9832..5323ee85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] ### Added +1. `updateViews` parameter of `DefaultDataObjectEdmModelBuilder` class. It allows to change update views for data objects (update view is used for loading a data object during OData update requests). ### Changed 1. Updated Flexberry ORM up to 7.2.0-beta01. @@ -106,7 +107,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). 3. Support for limits on master details. 4. Support for limits on pseudodetails. 5. Decode Excel export column name. -6. HttpConfiguretion MapDataObjectRoute() extension method. +6. HttpConfiguretion MapDataObjectRoute() extension method. ### Changed @@ -160,13 +161,13 @@ This project adheres to [Semantic Versioning](http://semver.org/). 3. Add support actions. 4. Add handler, called after exception appears. 5. In user functions and actions add possibility to return collections of primitive types and enums. In actions add possibility to use primitive types and enums as parameters. - + ### Fixed 1. Fix reading properties of files. 2. Fix error which occured in Mono in method `DefaultODataPathHandler.Parse(IEdmModel model, string serviceRoot, string odataPath)`. 3. Fix errors in work of user functions. 4. Fix error in association object enumeration filtration. - + ### Changed 1. Update dependencies. 2. Update ODataService package version to according ORM package version. diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 5afc0ad2..3fcf28b3 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -1,111 +1,115 @@ - - - - NewPlatform.Flexberry.ORM.ODataService - 7.2.0-beta02 - Flexberry ORM ODataService - New Platform Ltd. - New Platform Ltd. - http://flexberry.ru/License-FlexberryOrm-Runtime - https://flexberry.net/ru/developers-flexberry-orm.html - https://flexberry.net/img/logo-color.png - true - Flexberry ORM OData Service Package. - - Changed - 1. Updated Flexberry ORM up to 7.2.0-beta01. - Fixed - 1. Fixed loading of object with crushing of already loaded masters. - 2. Fixed loading of details. - - Copyright New Platform Ltd 2023 - Flexberry ORM OData ODataService - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + NewPlatform.Flexberry.ORM.ODataService + 7.2.0-beta02 + Flexberry ORM ODataService + New Platform Ltd. + New Platform Ltd. + http://flexberry.ru/License-FlexberryOrm-Runtime + https://flexberry.net/ru/developers-flexberry-orm.html + https://flexberry.net/img/logo-color.png + true + Flexberry ORM OData Service Package. + + Added + 1. `updateViews` parameter of `DefaultDataObjectEdmModelBuilder` class. It allows to change update views for data objects (update view is used for loading a data object during OData update requests). + + Changed + 1. Updated Flexberry ORM up to 7.2.0-beta01. + + Fixed + 1. Fixed loading of object with crushing of already loaded masters. + 2. Fixed loading of details. + + Copyright New Platform Ltd 2023 + Flexberry ORM OData ODataService + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From bfeca1a6a34d0062e70f419cb96d671cb7fee923 Mon Sep 17 00:00:00 2001 From: inaidanov Date: Fri, 2 Feb 2024 17:44:01 +0500 Subject: [PATCH 67/77] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20PR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 5 +++-- .../Controllers/DataObjectController.ModifyData.cs | 2 +- .../CRUD/Update/UpdateViewsTest.cs | 4 ++-- .../Startups/UpdateViewsTestStartup.cs | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5323ee85..dc3351ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,14 +5,15 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] ### Added -1. `updateViews` parameter of `DefaultDataObjectEdmModelBuilder` class. It allows to change update views for data objects (update view is used for loading a data object during OData update requests). +1. Helper class `DataObjectEdmModelDependencies` (it helps send named settings of Unity to class `DataObjectEdmModel`). +2. `updateViews` parameter of `DefaultDataObjectEdmModelBuilder` class. It allows to change update views for data objects (update view is used for loading a data object during OData update requests). ### Changed 1. Updated Flexberry ORM up to 7.2.0-beta01. ### Fixed 1. Fixed loading of object with crushing of already loaded masters. -2. Fixed loading of details. +2. Fixed loading of details. ## [7.1.1] - 2023.06.08 diff --git a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs index a3e0e503..fd279b66 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs @@ -830,7 +830,7 @@ private DataObject ReturnDataObject(Type objType, object keyValue, View view) } /// - /// Добавляет объект данных в список на обновление если его там ещё нет. + /// Добавляет объект данных в список на обновление, если его там ещё нет. /// /// Список на обновление. /// Объект данных, который добавляем. diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs index 17036da3..b7a9f6ec 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/Update/UpdateViewsTest.cs @@ -13,8 +13,8 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Update using Xunit.Abstractions; /// - /// Тесты для проверки работы UpdateViews. Для запуска OData backend используется модифицированная версия Startup - , - /// которая задаёт UpdateView для Берлоги и Медведя. + /// Тесты для проверки работы UpdateViews - представлений, которые используются вместо представления по умолчанию при обновлении объекта через OData. + /// Для запуска OData backend используется модифицированная версия Startup - , которая задаёт UpdateView для Берлоги и Медведя. /// public class UpdateViewsTest : BaseODataServiceIntegratedTest { diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startups/UpdateViewsTestStartup.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startups/UpdateViewsTestStartup.cs index 68239ad9..85785963 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startups/UpdateViewsTestStartup.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/Startups/UpdateViewsTestStartup.cs @@ -19,7 +19,7 @@ namespace NewPlatform.Flexberry.ORM.ODataService.Tests using Unity; /// - /// Startup for testing UpdateView configuration. + /// Startup for testing UpdateView configuration - a view that is used instead of a default view during data object updates. /// Differs from TestStartup that it sets UpdateView for and data objects. /// public class UpdateViewsTestStartup : Startup From 4d90a68ba3ad821ea4e8144bb1247b66a3b0f0a9 Mon Sep 17 00:00:00 2001 From: Ilya Naidanov Date: Mon, 19 Feb 2024 14:51:03 +0500 Subject: [PATCH 68/77] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B5=20=D0=B8=D0=B7=20?= =?UTF-8?q?changelog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc3351ed..a62c646e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] ### Added -1. Helper class `DataObjectEdmModelDependencies` (it helps send named settings of Unity to class `DataObjectEdmModel`). -2. `updateViews` parameter of `DefaultDataObjectEdmModelBuilder` class. It allows to change update views for data objects (update view is used for loading a data object during OData update requests). +1. `updateViews` parameter of `DefaultDataObjectEdmModelBuilder` class. It allows to change update views for data objects (update view is used for loading a data object during OData update requests). ### Changed 1. Updated Flexberry ORM up to 7.2.0-beta01. From 127e7b4ac9103d165f63e011f271d70ef8a6f202 Mon Sep 17 00:00:00 2001 From: Ilya Naidanov Date: Mon, 4 Mar 2024 13:45:56 +0500 Subject: [PATCH 69/77] =?UTF-8?q?=D0=9E=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .directory | 2 ++ .../Extensions/DataServiceExtensions.cs | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 .directory diff --git a/.directory b/.directory new file mode 100644 index 00000000..7d357e67 --- /dev/null +++ b/.directory @@ -0,0 +1,2 @@ +[Desktop Entry] +Icon=folder-violet diff --git a/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs b/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs index a299aa6c..b7639b38 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Extensions/DataServiceExtensions.cs @@ -245,7 +245,7 @@ public static void SafeLoadObject(this IDataService dataService, DataObject data throw new ArgumentNullException(nameof(view)); } - // Вычитывать объект сразу с детейлами нельзя, поскольку в этой же транзакции могут уже оказать отдельные операции с детейлами и перевычитка затрёт эти изменения. + // Вычитывать объект сразу с детейлами нельзя, поскольку в этой же транзакции могут уже оказаться отдельные операции с детейлами и перевычитка затрёт эти изменения. View miniView = view.Clone(); DetailInView[] miniViewDetails = miniView.Details; miniView.Details = new DetailInView[0]; From e0fe97470bfbf3b6fc161be86fbe450d3aae360d Mon Sep 17 00:00:00 2001 From: Ilya Naidanov Date: Mon, 4 Mar 2024 14:31:56 +0500 Subject: [PATCH 70/77] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B1=D0=B8=D0=BB=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CRUD/BatchTest.cs | 515 +++++++++--------- 1 file changed, 260 insertions(+), 255 deletions(-) diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs index c0de8995..8dc8960e 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CRUD/BatchTest.cs @@ -1,255 +1,260 @@ -namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Update -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Net; - using System.Net.Http; - - using ICSSoft.STORMNET; - using ICSSoft.STORMNET.Business.LINQProvider; - using ICSSoft.STORMNET.KeyGen; - using NewPlatform.Flexberry.ORM.ODataService.Tests.Extensions; - using NewPlatform.Flexberry.ORM.ODataService.Tests.Helpers; - using Xunit; - using View = ICSSoft.STORMNET.View; - - /// - /// The class of tests for CRUD operations at Batch form. - /// There are extra batch tests at . - /// - public class BatchTest : BaseODataServiceIntegratedTest - { -#if NETCOREAPP - /// - /// Default constructor. - /// - /// Factory for application. - /// Output for debug information. - public BatchTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) - : base(factory, output) - { - } -#endif - - /// - /// Test batch update of master-class with class at the same time. - /// It checks that dataobject cache is not crashed. - /// There are a master and object with link to master at batch request. Master is the first at the batch request. The link between object and master is not changed. - /// It is necessary that during batch processing master stay the same and is not overwriten. - /// - [Fact] - public void UpdateMasterAndClassTest() - { - ActODataService(args => - { - // Arrange. - string[] porodaPropertiesNames = - { - Information.ExtractPropertyPath<Порода>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Порода>(x => x.Название), - }; - string[] koshkaPropertiesNames = - { - Information.ExtractPropertyPath<Кошка>(x => x.__PrimaryKey), - Information.ExtractPropertyPath<Кошка>(x => x.Кличка), - }; - View porodaDynamicView = new View(new ViewAttribute("porodaDynamicView", porodaPropertiesNames), typeof(Порода)); - View koshkaDynamicView = new View(new ViewAttribute("koshkaDynamicView", koshkaPropertiesNames), typeof(Кошка)); - - const string InitialName = "Initial"; - const string OtherName = "Other"; - Порода poroda = new Порода() { Название = InitialName }; - Кошка koshka = new Кошка() { Кличка = InitialName, Порода = poroda}; - args.DataService.UpdateObject(koshka); - - Порода poroda1 = args.DataService.Query<Порода>(porodaDynamicView).FirstOrDefault(x => x.__PrimaryKey == poroda.__PrimaryKey); - Кошка koshka1 = args.DataService.Query<Кошка>(koshkaDynamicView).FirstOrDefault(x => x.__PrimaryKey == koshka.__PrimaryKey); - Assert.NotNull(poroda1); - Assert.NotNull(koshka1); - - poroda.Название = OtherName; - koshka.Кличка = OtherName; - - string requestJsonDatakoshka = koshka.ToJson(koshkaDynamicView, args.Token.Model); - DataObjectDictionary objJsonKoshka = DataObjectDictionary.Parse(requestJsonDatakoshka, koshkaDynamicView, args.Token.Model); - - objJsonKoshka.Add( - $"{nameof(Кошка.Порода)}@odata.bind", - string.Format( - "{0}({1})", - args.Token.Model.GetEdmEntitySet(typeof(Порода)).Name, - ((KeyGuid)poroda.__PrimaryKey).Guid.ToString("D"))); - - requestJsonDatakoshka = objJsonKoshka.Serialize(); - - const string baseUrl = "http://localhost/odata"; - string[] changesets = new[] // Важно, чтобы сначала шёл мастер, потом объект, имеющий на него ссылку. - { - - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Порода)).Name}", - poroda.ToJson(porodaDynamicView, args.Token.Model), - poroda), - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name}", - requestJsonDatakoshka, - koshka), - }; - - // Act. - HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); - using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) - { - // Assert. - CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); - Порода poroda2 = args.DataService.Query<Порода>(porodaDynamicView).FirstOrDefault(x => x.__PrimaryKey == poroda.__PrimaryKey); - Кошка koshka2 = args.DataService.Query<Кошка>(koshkaDynamicView).FirstOrDefault(x => x.__PrimaryKey == koshka.__PrimaryKey); - Assert.NotNull(poroda2); - Assert.NotNull(koshka2); - Assert.Equal(OtherName, poroda2.Название); - Assert.Equal(OtherName, koshka2.Кличка); - } - }); - } - - /// - /// Test batch update with inheritance. - /// It checks that dataobject cache is not crashed. - /// There are classes A, its detail B, that has descendant C. During class A loading its details are loaded too, but details are loaded by View of class B, while details are of class C. - /// Thus there are objects of type C at the cache while they are loaded by properties of class B only. That's why the state of details is LightLoaded. - /// It is necessary to post-load only propertues that are not loaded before (loaded properties can be changed). - /// - [Fact] - public void UpdateWithInheritanceAndDetailsTest() - { - ActODataService(args => - { - // Arrange. - const string InitialName = "Initial"; - const string OtherName = "Other"; - TestConfiguration testConfiguration = new TestConfiguration() { Name = InitialName }; - FirstLevel first = new FirstLevel() { Name = InitialName, TestConfiguration = testConfiguration }; - TestClass second1 = new TestClass { Name = InitialName, FirstLevel = first }; - TestAssociation second2 = new TestAssociation { Name = InitialName, FirstLevel = first, SecondLevel1 = second1 }; - ThirdLevel third = new ThirdLevel { Name = InitialName, TestClass = second1 }; - DataObject[] updateObjects = new DataObject[] { testConfiguration, first, second1, second2, third }; - args.DataService.UpdateObjects(ref updateObjects); - - second2.Name = OtherName; // Изменение значения детейла одного типа, который имеет мастеровую ссылку на детейл второго типа (второй тип имеет детейл собственный). - ThirdLevel third2 = new ThirdLevel { Name = OtherName, TestClass = second1 }; // Добавление детейлов в детейл второго типа. - - string[] firstPropertiesNames = - { - Information.ExtractPropertyPath(x => x.__PrimaryKey), - Information.ExtractPropertyPath(x => x.Name), - }; - View firstLevelDynamicView = new View(new ViewAttribute("firstLevelDynamicView", firstPropertiesNames), typeof(FirstLevel)); - - string[] second1PropertiesNames = - { - Information.ExtractPropertyPath(x => x.__PrimaryKey), - Information.ExtractPropertyPath(x => x.Name), - }; - View second1DynamicView = new View(new ViewAttribute("second1DynamicView", second1PropertiesNames), typeof(TestClass)); - - string[] second2PropertiesNames = - { - Information.ExtractPropertyPath(x => x.__PrimaryKey), - Information.ExtractPropertyPath(x => x.Name), - }; - View second2DynamicView = new View(new ViewAttribute("second2DynamicView", second2PropertiesNames), typeof(TestAssociation)); - - string[] thirdPropertiesNames = - { - Information.ExtractPropertyPath(x => x.__PrimaryKey), - Information.ExtractPropertyPath(x => x.Name), - }; - View thirdLevelDynamicView = new View(new ViewAttribute("thirdDynamicView", thirdPropertiesNames), typeof(ThirdLevel)); - - // Операция изменения детейла второго типа (он попадает в батч-запрос как агрегатор к добавляемому детейлу второго уровня). - string requestJsonDataSecond1 = second1.ToJson(second1DynamicView, args.Token.Model); - DataObjectDictionary objJsonSecond1 = DataObjectDictionary.Parse(requestJsonDataSecond1, second1DynamicView, args.Token.Model); - objJsonSecond1.Add( // Добавляется ссылка на агрегатор. - $"{nameof(TestClass.FirstLevel)}@odata.bind", - string.Format("{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(FirstLevel)).Name, ((KeyGuid)first.__PrimaryKey).Guid.ToString("D"))); - requestJsonDataSecond1 = objJsonSecond1.Serialize(); - - // Операция вставки детейла второго уровня. - string requestJsonDataThird2 = third2.ToJson(thirdLevelDynamicView, args.Token.Model); - DataObjectDictionary objJsonThird2 = DataObjectDictionary.Parse(requestJsonDataThird2, thirdLevelDynamicView, args.Token.Model); - objJsonThird2.Add( // Добавляется ссылка на агрегатор. - $"{nameof(ThirdLevel.TestClass)}@odata.bind", - string.Format("{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(TestClass)).Name, ((KeyGuid)second1.__PrimaryKey).Guid.ToString("D"))); - requestJsonDataThird2 = objJsonThird2.Serialize(); - - // Операция изменения детейла первого типа. - string requestJsonDataSecond2 = second2.ToJson(second2DynamicView, args.Token.Model); - DataObjectDictionary objJsonSecond2 = DataObjectDictionary.Parse(requestJsonDataSecond2, second2DynamicView, args.Token.Model); - objJsonSecond2.Add( // Добавляется ссылка на агрегатор. - $"{nameof(TestAssociation.FirstLevel)}@odata.bind", - string.Format("{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(FirstLevel)).Name, ((KeyGuid)first.__PrimaryKey).Guid.ToString("D"))); - objJsonSecond2.Add( // Добавляется ссылка мастеровая на другой детейл. - $"{nameof(TestAssociation.SecondLevel1)}@odata.bind", - string.Format("{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(TestClass)).Name, ((KeyGuid)second1.__PrimaryKey).Guid.ToString("D"))); - requestJsonDataSecond2 = objJsonSecond2.Serialize(); - - const string baseUrl = "http://localhost/odata"; - string[] changesets = new[] - { - - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(TestClass)).Name}", - requestJsonDataSecond1, - second1), - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(ThirdLevel)).Name}", - requestJsonDataThird2, - third2), - CreateChangeset( - $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(TestAssociation)).Name}", - requestJsonDataSecond2, - second2), - }; - HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); - - // Код для удобства отлавливания исключений. - args.Token.Events.CallbackAfterInternalServerError = (Exception exception, ref HttpStatusCode code) => - { - Exception currentException = exception; - - while (currentException != null) - { - currentException = currentException.InnerException; - } - - return exception; - }; - - // Act. - using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) - { - // Assert. - CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.Created, HttpStatusCode.OK }); - - string[] thirdPropertiesNames2 = - { - Information.ExtractPropertyPath(x => x.__PrimaryKey), - Information.ExtractPropertyPath(x => x.Name), - Information.ExtractPropertyPath(x => x.TestClass), - }; - View thirdLevelDynamicView2 = new View(new ViewAttribute("thirdDynamicView2", thirdPropertiesNames2), typeof(ThirdLevel)); - List thirdLevelList = args.DataService.Query(thirdLevelDynamicView2).Where(x => x.TestClass.__PrimaryKey == second1.__PrimaryKey).ToList(); - Assert.NotNull(thirdLevelList); - Assert.True(thirdLevelList.Any()); - Assert.Equal(2, thirdLevelList.Count); - - TestAssociation checkAssociation = args.DataService.Query(second2DynamicView).FirstOrDefault(x => x.__PrimaryKey == second2.__PrimaryKey); - Assert.NotNull(checkAssociation); - Assert.Equal(OtherName, checkAssociation.Name); - } - }); - } - } -} - +namespace NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Update +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Net; + using System.Net.Http; + + using ICSSoft.STORMNET; + using ICSSoft.STORMNET.Business.LINQProvider; + using ICSSoft.STORMNET.KeyGen; + using NewPlatform.Flexberry.ORM.ODataService.Tests.Extensions; + using NewPlatform.Flexberry.ORM.ODataService.Tests.Helpers; + using Xunit; + using View = ICSSoft.STORMNET.View; + + /// + /// The class of tests for CRUD operations at Batch form. + /// There are extra batch tests at . + /// +#if NETFRAMEWORK + public class BatchTest : BaseODataServiceIntegratedTest +#endif +#if NETCOREAPP + public class BatchTest : BaseODataServiceIntegratedTest +#endif + { +#if NETCOREAPP + /// + /// Default constructor. + /// + /// Factory for application. + /// Output for debug information. + public BatchTest(CustomWebApplicationFactory factory, Xunit.Abstractions.ITestOutputHelper output) + : base(factory, output) + { + } +#endif + + /// + /// Test batch update of master-class with class at the same time. + /// It checks that dataobject cache is not crashed. + /// There are a master and object with link to master at batch request. Master is the first at the batch request. The link between object and master is not changed. + /// It is necessary that during batch processing master stay the same and is not overwriten. + /// + [Fact] + public void UpdateMasterAndClassTest() + { + ActODataService(args => + { + // Arrange. + string[] porodaPropertiesNames = + { + Information.ExtractPropertyPath<Порода>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Порода>(x => x.Название), + }; + string[] koshkaPropertiesNames = + { + Information.ExtractPropertyPath<Кошка>(x => x.__PrimaryKey), + Information.ExtractPropertyPath<Кошка>(x => x.Кличка), + }; + View porodaDynamicView = new View(new ViewAttribute("porodaDynamicView", porodaPropertiesNames), typeof(Порода)); + View koshkaDynamicView = new View(new ViewAttribute("koshkaDynamicView", koshkaPropertiesNames), typeof(Кошка)); + + const string InitialName = "Initial"; + const string OtherName = "Other"; + Порода poroda = new Порода() { Название = InitialName }; + Кошка koshka = new Кошка() { Кличка = InitialName, Порода = poroda}; + args.DataService.UpdateObject(koshka); + + Порода poroda1 = args.DataService.Query<Порода>(porodaDynamicView).FirstOrDefault(x => x.__PrimaryKey == poroda.__PrimaryKey); + Кошка koshka1 = args.DataService.Query<Кошка>(koshkaDynamicView).FirstOrDefault(x => x.__PrimaryKey == koshka.__PrimaryKey); + Assert.NotNull(poroda1); + Assert.NotNull(koshka1); + + poroda.Название = OtherName; + koshka.Кличка = OtherName; + + string requestJsonDatakoshka = koshka.ToJson(koshkaDynamicView, args.Token.Model); + DataObjectDictionary objJsonKoshka = DataObjectDictionary.Parse(requestJsonDatakoshka, koshkaDynamicView, args.Token.Model); + + objJsonKoshka.Add( + $"{nameof(Кошка.Порода)}@odata.bind", + string.Format( + "{0}({1})", + args.Token.Model.GetEdmEntitySet(typeof(Порода)).Name, + ((KeyGuid)poroda.__PrimaryKey).Guid.ToString("D"))); + + requestJsonDatakoshka = objJsonKoshka.Serialize(); + + const string baseUrl = "http://localhost/odata"; + string[] changesets = new[] // Важно, чтобы сначала шёл мастер, потом объект, имеющий на него ссылку. + { + + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Порода)).Name}", + poroda.ToJson(porodaDynamicView, args.Token.Model), + poroda), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(Кошка)).Name}", + requestJsonDatakoshka, + koshka), + }; + + // Act. + HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); + using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) + { + // Assert. + CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.OK }); + Порода poroda2 = args.DataService.Query<Порода>(porodaDynamicView).FirstOrDefault(x => x.__PrimaryKey == poroda.__PrimaryKey); + Кошка koshka2 = args.DataService.Query<Кошка>(koshkaDynamicView).FirstOrDefault(x => x.__PrimaryKey == koshka.__PrimaryKey); + Assert.NotNull(poroda2); + Assert.NotNull(koshka2); + Assert.Equal(OtherName, poroda2.Название); + Assert.Equal(OtherName, koshka2.Кличка); + } + }); + } + + /// + /// Test batch update with inheritance. + /// It checks that dataobject cache is not crashed. + /// There are classes A, its detail B, that has descendant C. During class A loading its details are loaded too, but details are loaded by View of class B, while details are of class C. + /// Thus there are objects of type C at the cache while they are loaded by properties of class B only. That's why the state of details is LightLoaded. + /// It is necessary to post-load only propertues that are not loaded before (loaded properties can be changed). + /// + [Fact] + public void UpdateWithInheritanceAndDetailsTest() + { + ActODataService(args => + { + // Arrange. + const string InitialName = "Initial"; + const string OtherName = "Other"; + TestConfiguration testConfiguration = new TestConfiguration() { Name = InitialName }; + FirstLevel first = new FirstLevel() { Name = InitialName, TestConfiguration = testConfiguration }; + TestClass second1 = new TestClass { Name = InitialName, FirstLevel = first }; + TestAssociation second2 = new TestAssociation { Name = InitialName, FirstLevel = first, SecondLevel1 = second1 }; + ThirdLevel third = new ThirdLevel { Name = InitialName, TestClass = second1 }; + DataObject[] updateObjects = new DataObject[] { testConfiguration, first, second1, second2, third }; + args.DataService.UpdateObjects(ref updateObjects); + + second2.Name = OtherName; // Изменение значения детейла одного типа, который имеет мастеровую ссылку на детейл второго типа (второй тип имеет детейл собственный). + ThirdLevel third2 = new ThirdLevel { Name = OtherName, TestClass = second1 }; // Добавление детейлов в детейл второго типа. + + string[] firstPropertiesNames = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.Name), + }; + View firstLevelDynamicView = new View(new ViewAttribute("firstLevelDynamicView", firstPropertiesNames), typeof(FirstLevel)); + + string[] second1PropertiesNames = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.Name), + }; + View second1DynamicView = new View(new ViewAttribute("second1DynamicView", second1PropertiesNames), typeof(TestClass)); + + string[] second2PropertiesNames = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.Name), + }; + View second2DynamicView = new View(new ViewAttribute("second2DynamicView", second2PropertiesNames), typeof(TestAssociation)); + + string[] thirdPropertiesNames = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.Name), + }; + View thirdLevelDynamicView = new View(new ViewAttribute("thirdDynamicView", thirdPropertiesNames), typeof(ThirdLevel)); + + // Операция изменения детейла второго типа (он попадает в батч-запрос как агрегатор к добавляемому детейлу второго уровня). + string requestJsonDataSecond1 = second1.ToJson(second1DynamicView, args.Token.Model); + DataObjectDictionary objJsonSecond1 = DataObjectDictionary.Parse(requestJsonDataSecond1, second1DynamicView, args.Token.Model); + objJsonSecond1.Add( // Добавляется ссылка на агрегатор. + $"{nameof(TestClass.FirstLevel)}@odata.bind", + string.Format("{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(FirstLevel)).Name, ((KeyGuid)first.__PrimaryKey).Guid.ToString("D"))); + requestJsonDataSecond1 = objJsonSecond1.Serialize(); + + // Операция вставки детейла второго уровня. + string requestJsonDataThird2 = third2.ToJson(thirdLevelDynamicView, args.Token.Model); + DataObjectDictionary objJsonThird2 = DataObjectDictionary.Parse(requestJsonDataThird2, thirdLevelDynamicView, args.Token.Model); + objJsonThird2.Add( // Добавляется ссылка на агрегатор. + $"{nameof(ThirdLevel.TestClass)}@odata.bind", + string.Format("{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(TestClass)).Name, ((KeyGuid)second1.__PrimaryKey).Guid.ToString("D"))); + requestJsonDataThird2 = objJsonThird2.Serialize(); + + // Операция изменения детейла первого типа. + string requestJsonDataSecond2 = second2.ToJson(second2DynamicView, args.Token.Model); + DataObjectDictionary objJsonSecond2 = DataObjectDictionary.Parse(requestJsonDataSecond2, second2DynamicView, args.Token.Model); + objJsonSecond2.Add( // Добавляется ссылка на агрегатор. + $"{nameof(TestAssociation.FirstLevel)}@odata.bind", + string.Format("{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(FirstLevel)).Name, ((KeyGuid)first.__PrimaryKey).Guid.ToString("D"))); + objJsonSecond2.Add( // Добавляется ссылка мастеровая на другой детейл. + $"{nameof(TestAssociation.SecondLevel1)}@odata.bind", + string.Format("{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(TestClass)).Name, ((KeyGuid)second1.__PrimaryKey).Guid.ToString("D"))); + requestJsonDataSecond2 = objJsonSecond2.Serialize(); + + const string baseUrl = "http://localhost/odata"; + string[] changesets = new[] + { + + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(TestClass)).Name}", + requestJsonDataSecond1, + second1), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(ThirdLevel)).Name}", + requestJsonDataThird2, + third2), + CreateChangeset( + $"{baseUrl}/{args.Token.Model.GetEdmEntitySet(typeof(TestAssociation)).Name}", + requestJsonDataSecond2, + second2), + }; + HttpRequestMessage batchRequest = CreateBatchRequest(baseUrl, changesets); + + // Код для удобства отлавливания исключений. + args.Token.Events.CallbackAfterInternalServerError = (Exception exception, ref HttpStatusCode code) => + { + Exception currentException = exception; + + while (currentException != null) + { + currentException = currentException.InnerException; + } + + return exception; + }; + + // Act. + using (HttpResponseMessage response = args.HttpClient.SendAsync(batchRequest).Result) + { + // Assert. + CheckODataBatchResponseStatusCode(response, new HttpStatusCode[] { HttpStatusCode.OK, HttpStatusCode.Created, HttpStatusCode.OK }); + + string[] thirdPropertiesNames2 = + { + Information.ExtractPropertyPath(x => x.__PrimaryKey), + Information.ExtractPropertyPath(x => x.Name), + Information.ExtractPropertyPath(x => x.TestClass), + }; + View thirdLevelDynamicView2 = new View(new ViewAttribute("thirdDynamicView2", thirdPropertiesNames2), typeof(ThirdLevel)); + List thirdLevelList = args.DataService.Query(thirdLevelDynamicView2).Where(x => x.TestClass.__PrimaryKey == second1.__PrimaryKey).ToList(); + Assert.NotNull(thirdLevelList); + Assert.True(thirdLevelList.Any()); + Assert.Equal(2, thirdLevelList.Count); + + TestAssociation checkAssociation = args.DataService.Query(second2DynamicView).FirstOrDefault(x => x.__PrimaryKey == second2.__PrimaryKey); + Assert.NotNull(checkAssociation); + Assert.Equal(OtherName, checkAssociation.Name); + } + }); + } + } +} + From db06e78c55587e2207649d43fe6f915e4b535fab Mon Sep 17 00:00:00 2001 From: Ilya Naidanov Date: Mon, 4 Mar 2024 16:53:55 +0500 Subject: [PATCH 71/77] =?UTF-8?q?=D0=9B=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .directory | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .directory diff --git a/.directory b/.directory deleted file mode 100644 index 7d357e67..00000000 --- a/.directory +++ /dev/null @@ -1,2 +0,0 @@ -[Desktop Entry] -Icon=folder-violet From bd419f025a7a4f439d1b42bc05ee15db9e28b31f Mon Sep 17 00:00:00 2001 From: Ilya Naidanov Date: Mon, 4 Mar 2024 17:51:55 +0500 Subject: [PATCH 72/77] test --- .../DataObjectController.ModifyData.cs | 2170 ++++++++--------- 1 file changed, 1085 insertions(+), 1085 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs index fd279b66..e5b682bd 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs +++ b/NewPlatform.Flexberry.ORM.ODataService/Controllers/DataObjectController.ModifyData.cs @@ -1,1085 +1,1085 @@ -namespace NewPlatform.Flexberry.ORM.ODataService.Controllers -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Net; - using System.Net.Http; - using System.Text; - using ICSSoft.STORMNET; - using ICSSoft.STORMNET.Business; - using ICSSoft.STORMNET.FunctionalLanguage; - using Microsoft.AspNet.OData; - using Microsoft.OData.Edm; - using NewPlatform.Flexberry.ORM.ODataService.Batch; - using NewPlatform.Flexberry.ORM.ODataService.Extensions; - using NewPlatform.Flexberry.ORM.ODataService.Files; - using NewPlatform.Flexberry.ORM.ODataService.Files.Providers; - using NewPlatform.Flexberry.ORM.ODataService.Formatter; - using Newtonsoft.Json; - using File = ICSSoft.STORMNET.FileType.File; - using KeySegment = Microsoft.OData.UriParser.KeySegment; - -#if NETFRAMEWORK - using System.Net.Http.Formatting; - using System.Web.Http; - using System.Web.Http.Results; - using System.Web.Http.Validation; - using NewPlatform.Flexberry.ORM.ODataService.Events; - using NewPlatform.Flexberry.ORM.ODataService.Handlers; -#endif -#if NETSTANDARD - using Microsoft.AspNet.OData.Formatter; - using Microsoft.AspNetCore.Http; - using Microsoft.AspNetCore.Mvc; - using Microsoft.AspNetCore.Mvc.Formatters; - using Microsoft.Extensions.Primitives; - using NewPlatform.Flexberry.ORM.ODataService.Middleware; -#endif - - /// - /// Определяет класс контроллера OData, который поддерживает запись и чтение данных с использованием OData формата. - /// - public partial class DataObjectController - { - /// - /// Метаданные файлов, временно загруженных в каталог файлового хранилища и привязанных к свойствам обрабатываемых объектов данных. - /// Файлы будут удалены из файловой системы - /// в случае успешного сохранения объектов данных. - /// - private List _removingFileDescriptions = new List(); - - /// - /// Кэш типов, у которых одинакового типа детейлы и мастера. - /// - private List _typesWithSameDetailAndMaster = new List(); - - /// - /// Кэш типов, у которых нет одинакового типа детейлов и мастеров. - /// - private List _typesWithNotSameDetailAndMaster = new List(); - - /// - /// Создание сущности и всех связанных. При существовании в БД произойдёт обновление. - /// - /// Создаваемая сущность. - /// Созданная сущность. -#if NETFRAMEWORK - public HttpResponseMessage Post([FromBody] EdmEntityObject edmEntity) -#elif NETSTANDARD - public IActionResult Post([FromBody] EdmEntityObject edmEntity) -#endif - { - try - { - if (edmEntity == null) - { - edmEntity = ReplaceOdataBindNull(); - } - - DataObject obj = UpdateObject(edmEntity, null); - ExecuteCallbackAfterCreate(obj); - - edmEntity = GetEdmObject(_model.GetEdmEntityType(type), obj, 1, null, null); - var responseForPreferMinimal = TestPreferMinimal(); - if (responseForPreferMinimal != null) - { - return responseForPreferMinimal; - } - -#if NETFRAMEWORK - var result = Request.CreateResponse(HttpStatusCode.Created, edmEntity); - if (Request.Headers.Contains("Prefer")) - { - result.Headers.Add("Preference-Applied", "return=representation"); - } -#elif NETSTANDARD - var result = new ObjectResult(edmEntity) { StatusCode = StatusCodes.Status201Created }; - if (Request.Headers.ContainsKey("Prefer")) - { - Response.Headers.Add("Preference-Applied", "return=representation"); - } -#endif - - return result; - } - catch (Exception ex) - { -#if NETFRAMEWORK - return InternalServerErrorMessage(ex); -#elif NETSTANDARD - throw CustomException(ex); -#endif - } - } - - /// - /// Обновление сущности (свойства могут быть заданы частично, т.е. указывать можно значения только измененных свойств). - /// Если сущности с заданным ключом нет в БД происходит Upsert (в соответствии со стандартом). - /// - /// Ключ обновляемой сущности. - /// Обновляемая сущность. - /// Обновлённая сущность. -#if NETFRAMEWORK - public HttpResponseMessage Patch([FromODataUri] Guid key, [FromBody] EdmEntityObject edmEntity) -#elif NETSTANDARD - public IActionResult Patch([FromODataUri] Guid key, [FromBody] EdmEntityObject edmEntity) -#endif - { - try - { - if (key == null) - { - throw new ArgumentNullException("key"); - } - - if (edmEntity == null) - { - edmEntity = ReplaceOdataBindNull(); - } - - IEdmEntityType entityType = (IEdmEntityType)edmEntity.ActualEdmType; - -#if NETFRAMEWORK - var dictionary = Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.Dictionary) ? - (Dictionary)Request.Properties[ExtendedODataEntityDeserializer.Dictionary] : - new Dictionary(); -#elif NETSTANDARD - var dictionary = Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.Dictionary) ? - (Dictionary)Request.HttpContext.Items[ExtendedODataEntityDeserializer.Dictionary] : - new Dictionary(); -#endif - - foreach (var prop in entityType.Properties()) - { - if (!dictionary.ContainsKey(prop.Name) && edmEntity.GetChangedPropertyNames().Contains(prop.Name) && prop is EdmNavigationProperty) - { - const string msg = "Error processing request stream. Deep updates are not supported in PUT or PATCH operations."; -#if NETFRAMEWORK - return Request.CreateResponse(HttpStatusCode.BadRequest, msg); -#elif NETSTANDARD - return BadRequest(msg); -#endif - } - - if (dictionary.ContainsKey(prop.Name) && dictionary[prop.Name] == null && - (!prop.Type.IsNullable || prop.Type.IsCollection())) - { - string msg = $"The property {prop.Name} can not be null."; -#if NETFRAMEWORK - return Request.CreateResponse(HttpStatusCode.BadRequest, msg); -#elif NETSTANDARD - return BadRequest(msg); -#endif - } - } - - DataObject obj = UpdateObject(edmEntity, key); - ExecuteCallbackAfterUpdate(obj); - - var responseForPreferMinimal = TestPreferMinimal(); - if (responseForPreferMinimal != null) - { - return responseForPreferMinimal; - } - -#if NETFRAMEWORK - if (!Request.Headers.Contains("Prefer")) - { - return Request.CreateResponse(HttpStatusCode.NoContent); - } -#elif NETSTANDARD - if (!Request.Headers.ContainsKey("Prefer")) - { - return NoContent(); - } -#endif - - edmEntity = GetEdmObject(_model.GetEdmEntityType(type), obj, 1, null, null); -#if NETFRAMEWORK - var result = Request.CreateResponse(HttpStatusCode.OK, edmEntity); - result.Headers.Add("Preference-Applied", "return=representation"); -#elif NETSTANDARD - var result = Ok(edmEntity); - Response.Headers.Add("Preference-Applied", "return=representation"); -#endif - return result; - } - catch (Exception ex) - { -#if NETFRAMEWORK - return InternalServerErrorMessage(ex); -#elif NETSTANDARD - throw CustomException(ex); -#endif - } - } - - /// - /// Осуществляет удаление сущности. - /// - /// - /// Результат выполнения запроса типа , соответствующий статусу . - /// -#if NETFRAMEWORK - public HttpResponseMessage DeleteString() -#elif NETSTANDARD - public NoContentResult DeleteString() -#endif - { - var keySegment = ODataPath.Segments[1] as KeySegment; - string key = keySegment.Keys.First().Value.ToString().Trim().Replace("'", string.Empty); - return DeleteEntity(key); - } - - /// - /// Осуществляет удаление сущности. - /// - /// - /// Результат выполнения запроса типа , соответствующий статусу . - /// -#if NETFRAMEWORK - public HttpResponseMessage DeleteGuid() -#elif NETSTANDARD - public NoContentResult DeleteGuid() -#endif - { - var keySegment = ODataPath.Segments[1] as KeySegment; - Guid key = new Guid(keySegment.Keys.First().Value.ToString()); - return DeleteEntity(key); - } - -#if NETFRAMEWORK - private HttpResponseMessage DeleteEntity(object key) -#elif NETSTANDARD - private NoContentResult DeleteEntity(object key) -#endif - { - try - { - if (key == null) - { - throw new ArgumentNullException(nameof(key)); - } - - Init(); - - /* В ситуации, когда мастер и детейл одного типа, ORM без подгрузки копии данных не может корректно разобрать порядок, - * в котором объекты должны быть удалены. - */ - bool needDataCopyLoad = _typesWithSameDetailAndMaster.Contains(type); - if (!_typesWithNotSameDetailAndMaster.Contains(type) && !needDataCopyLoad) - { - string[] props = Information.GetAllPropertyNames(type); - int length = props.Length; - int index = 0; - - while (!needDataCopyLoad && index < length) - { - string prop = props[index]; - Type propType = Information.GetPropertyType(type, prop); - needDataCopyLoad = propType.IsSubclassOf(typeof(DataObject)) && Information.GetDetailArrayPropertyName(type, propType) != null; - - index++; - } - } - - DataObject obj = null; - if (!needDataCopyLoad) - { - obj = DataObjectCache.CreateDataObject(type, key); - _typesWithNotSameDetailAndMaster.Add(type); - } - else - { - obj = LoadObject(type, key.ToString()); - _typesWithSameDetailAndMaster.Add(type); - } - - // Удаляем объект с заданным ключем. - // Детейлы удалятся вместе с агрегатором автоматически. - // Если удаляемый объект является мастером для какого-либо объекта, то - // спецификация предполагает, что зависимые объекты будут каскадно удалены либо ссылки в них заменены - // на null/значению по умолчанию, если это задано в модели через ReferentialConstraints. - // Но если это задано в модели, то соответвующие объекты данных реализуют интерфейсы - // IReferencesCascadeDelete/IReferencesNullDelete и требуемые действия будут выполнены автоматически. - // В данный момент ReferentialConstraints не создаются в модели. - obj.SetStatus(ObjectStatus.Deleted); - - // Раз объект данных удаляется, то и все ассоциированные с ним файлы должны быть удалены. - // Запоминаем метаданные всех ассоциированных файлов, кроме файлов соответствующих файловым свойствам типа File - // (файлы соответствующие свойствам типа File хранятся в БД, и из файловой системы просто нечего удалять). - // TODO: подумать как быть с детейлами, детейлами детейлов, и т д. - var descriptions = _dataObjectFileAccessor.GetDataObjectFileDescriptions(_dataService, obj, new List { typeof(File) }); - _removingFileDescriptions.AddRange(descriptions); - - List objs = new List(); - - if (ExecuteCallbackBeforeDelete(obj)) - { - string agregatorPropertyName = Information.GetAgregatePropertyName(type); - if (!string.IsNullOrEmpty(agregatorPropertyName)) - { - DataObject agregator = (DataObject)Information.GetPropValueByName(obj, agregatorPropertyName); - - if (agregator != null) - { - objs.Add(agregator); - } - } - - objs.Add(obj); - - if (IsBatchChangeSetRequest) - { -#if NETFRAMEWORK - List dataObjectsToUpdate = (List)Request.Properties[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; - List allProcessedObjects = (List)Request.Properties[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; - -#elif NETSTANDARD - List dataObjectsToUpdate = (List)HttpContext.Items[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; - List allProcessedObjects = (List)HttpContext.Items[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; -#endif - dataObjectsToUpdate.AddRange(objs); - allProcessedObjects.Add(obj); - } - else - { - DataObject[] dataObjects = objs.ToArray(); - _dataService.UpdateObjects(ref dataObjects); - } - } - - // При успешном удалении вычищаем из файловой системы, файлы подлежащие удалению. - _dataObjectFileAccessor.RemoveFileUploadDirectories(_removingFileDescriptions); - ExecuteCallbackAfterDelete(obj); - -#if NETFRAMEWORK - return Request.CreateResponse(HttpStatusCode.NoContent); -#elif NETSTANDARD - return NoContent(); -#endif - } - catch (Exception ex) - { - _removingFileDescriptions.Clear(); -#if NETFRAMEWORK - return InternalServerErrorMessage(ex); -#elif NETSTANDARD - throw CustomException(ex); -#endif - } - } - -#if NETFRAMEWORK - /// - /// Создаётся http-ответ с кодом 500 по-умолчанию, на возникшую в сервисе ошибку. - /// Для изменения возвращаемого кода необходимо реализовать обработчик CallbackAfterInternalServerError. - /// - /// Ошибка сервиса. - /// Http-ответ. - private HttpResponseMessage InternalServerErrorMessage(Exception ex) - { - return InternalServerErrorMessage(ex, _events, Request); - } - - /// - /// Создаётся http-ответ с кодом 500 по-умолчанию, на возникшую в сервисе ошибку. - /// Для изменения возвращаемого кода необходимо реализовать обработчик CallbackAfterInternalServerError. - /// - /// Ошибка сервиса. - /// The container with registered events. - /// Original HTTP request message for create a response. - /// Http-ответ. - public static HttpResponseMessage InternalServerErrorMessage(Exception ex, IEventHandlerContainer events, HttpRequestMessage request) - { - HttpStatusCode code = HttpStatusCode.InternalServerError; - Exception originalEx = ex; - - if (events?.CallbackAfterInternalServerError != null) - { - ex = events?.CallbackAfterInternalServerError(ex, ref code); - } - - if (ex == null) - { - ex = new Exception("Exception is null."); - } - - StringBuilder details = new StringBuilder(); - StringBuilder trace = new StringBuilder(); - var ex2 = ex; - while (ex2.InnerException != null) - { - string detailsItem = - "{" + - $"{JsonConvert.ToString("code")}: {JsonConvert.ToString($"{(int)code}")}, " + - $"{JsonConvert.ToString("message")}: {JsonConvert.ToString(ex2.InnerException.Message)}" + - "}"; - if (details.Length > 0) - details.Append(", "); - details.Append(detailsItem); - ex2 = ex2.InnerException; - } - - ex2 = ex; - do - { - string traceItem = - "{" + - $"{JsonConvert.ToString("message")}: {JsonConvert.ToString(ex2.Message)}, " + - $"{JsonConvert.ToString("stack")}: {JsonConvert.ToString(ex2.StackTrace)}" + - "}"; - if (trace.Length > 0) - trace.Append(", "); - trace.Append(traceItem); - ex2 = ex2.InnerException; - } - while (ex2 != null); - - details.Insert(0, "[").Append("]"); - trace.Insert(0, $"{{{JsonConvert.ToString("trace")}: [").Append("]}"); - - HttpResponseMessage msg = request.CreateResponse(code); - msg.Content = new StringContent( - "{" + - $"{JsonConvert.ToString("error")}: " + - "{ " + - $"{JsonConvert.ToString("code")}: {JsonConvert.ToString($"{(int)code}")}, " + - $"{JsonConvert.ToString("message")}: {JsonConvert.ToString(ex.Message)}, " + - $"{JsonConvert.ToString("details")}: {details.ToString()}, " + - $"{JsonConvert.ToString("innererror")}: {trace.ToString()}" + - "}" + - "}", - Encoding.UTF8, - "application/json"); - LogService.LogError(originalEx.Message, originalEx); - return msg; - } -#endif - -#if NETFRAMEWORK - private HttpResponseMessage TestPreferMinimal() - { - if (Request.Headers.Contains("Prefer")) - { - KeyValuePair> header = Request.Headers.FirstOrDefault(h => h.Key.ToLower() == "prefer"); - if (header.Value != null && header.Value.ToString().ToLower().Contains("return=minimal")) - { - HttpResponseMessage result = Request.CreateResponse(HttpStatusCode.NoContent); - result.Headers.Add("Preference-Applied", "return=minimal"); - return result; - } - } - - return null; - } -#elif NETSTANDARD - - private NoContentResult TestPreferMinimal() - { - if (Request.Headers.ContainsKey("Prefer")) - { - KeyValuePair header = Request.Headers.FirstOrDefault(h => h.Key.ToLower() == "prefer"); - if (header.Value.ToString() != null && header.Value.ToString().ToLower().Contains("return=minimal")) - { - NoContentResult result = NoContent(); - Request.Headers.Add("Preference-Applied", "return=minimal"); - - return result; - } - } - - return null; - } -#endif - -#if NETFRAMEWORK - /// - /// Заменяет в теле запроса представление навигационных свойств с Имя_Связи@odata.bind:null на представление Имя_Связи:null. - /// - /// Возвращается EdmEntityObject преобразованный из JSON-строки. - private EdmEntityObject ReplaceOdataBindNull() - { - if (!Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.OdataBindNull)) - { - if (Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) - throw (Exception)Request.Properties[ExtendedODataEntityDeserializer.ReadException]; - throw new Exception("ReplaceOdataBindNull: edmEntity is null."); - } - - Stream stream; - - string requestContentKey = PostPatchHandler.RequestContent; - if (Request.Properties.ContainsKey(PostPatchHandler.PropertyKeyBatchRequest) && (bool)Request.Properties[PostPatchHandler.PropertyKeyBatchRequest] == true) - { - requestContentKey = PostPatchHandler.RequestContent + $"_{PostPatchHandler.PropertyKeyContentId}_{Request.Properties[PostPatchHandler.PropertyKeyContentId]}"; - } - - string json = (string)Request.Properties[requestContentKey]; - - Dictionary props = - JsonConvert.DeserializeObject>(json, new JsonSerializerSettings() { FloatParseHandling = FloatParseHandling.Decimal }); - var keys = props.Keys.ToArray(); - var odataBindNullList = new List(); - foreach (var key in keys) - { - var p = key.IndexOf("@odata.bind"); - if (p != -1 && props[key] == null) - { - props.Remove(key); - var newKey = key.Substring(0, p); - if (props.ContainsKey(newKey)) - { - props.Remove(newKey); - } - - var type = (EdmEntityTypeReference)Request.Properties[ExtendedODataEntityDeserializer.OdataBindNull]; - - var prop = type.FindNavigationProperty(newKey); - if (prop.Type.IsCollection()) - { - odataBindNullList.Add(newKey); - } - else - { - props.Add(newKey, null); - } - } - } - - json = JsonConvert.SerializeObject(props); - Request.Content = new StringContent(json, Encoding.UTF8, "application/json"); - - IContentNegotiator negotiator = (IContentNegotiator)Configuration.Services.GetService(typeof(IContentNegotiator)); - var resultNegotiate = negotiator.Negotiate(typeof(EdmEntityObject), Request, Configuration.Formatters); - - stream = Request.Content.ReadAsStreamAsync().Result; - var formatter = resultNegotiate.Formatter; - - /* - // Другой вариант получения форматтера. - var formatter = ((ODataMediaTypeFormatter)Configuration.Formatters[0]).GetPerRequestFormatterInstance( - typeof(EdmEntityObject), Request, Request.Content.Headers.ContentType); - - */ - - var edmEntity = (EdmEntityObject)formatter.ReadFromStreamAsync( - typeof(EdmEntityObject), - stream, - Request.Content, - new ModelStateFormatterLogger(ModelState, "edmEntity")).Result; - if (edmEntity == null && Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) - { - throw (Exception)Request.Properties[ExtendedODataEntityDeserializer.ReadException]; - } - - foreach (var prop in odataBindNullList) - { - edmEntity.TrySetPropertyValue(prop, null); - } - - return edmEntity; - } -#elif NETSTANDARD - /// - /// Заменяет в теле запроса представление навигационных свойств с Имя_Связи@odata.bind:null на представление Имя_Связи:null. - /// - /// Возвращается EdmEntityObject преобразованный из JSON-строки. - private EdmEntityObject ReplaceOdataBindNull() - { - if (!Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.OdataBindNull)) - { - if (Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) - throw (Exception)Request.HttpContext.Items[ExtendedODataEntityDeserializer.ReadException]; - throw new Exception("ReplaceOdataBindNull: edmEntity is null."); - } - - string json = (string)Request.HttpContext.Items[RequestHeadersHookMiddleware.PropertyKeyRequestContent]; - - Dictionary props = JsonConvert.DeserializeObject>(json); - var keys = props.Keys.ToArray(); - var odataBindNullList = new List(); - foreach (var key in keys) - { - var p = key.IndexOf("@odata.bind"); - if (p != -1 && props[key] == null) - { - props.Remove(key); - var newKey = key.Substring(0, p); - if (props.ContainsKey(newKey)) - { - props.Remove(newKey); - } - - var type = (EdmEntityTypeReference)Request.HttpContext.Items[ExtendedODataEntityDeserializer.OdataBindNull]; - - var prop = type.FindNavigationProperty(newKey); - if (prop.Type.IsCollection()) - { - odataBindNullList.Add(newKey); - } - else - { - props.Add(newKey, null); - } - } - } - - json = JsonConvert.SerializeObject(props); - Request.Body = new StringContent(json, Encoding.UTF8, "application/json").ReadAsStreamAsync().Result; - - var ictx = new InputFormatterContext( - HttpContext, - string.Empty, - ModelState, - MetadataProvider.GetMetadataForType(typeof(EdmEntityObject)), - (x, y) => new StreamReader(x, y)); - - IList formatters = ODataInputFormatterFactory.Create(); - - // The JSON input formatter is the first formatter in the OData input formatters list. - InputFormatterResult formatterResult = formatters.First().ReadRequestBodyAsync(ictx, Encoding.UTF8).Result; - - var edmEntity = (EdmEntityObject)formatterResult.Model; - - if (edmEntity == null && Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) - { - throw (Exception)Request.HttpContext.Items[ExtendedODataEntityDeserializer.ReadException]; - } - - foreach (var prop in odataBindNullList) - { - edmEntity.TrySetPropertyValue(prop, null); - } - - return edmEntity; - } -#endif - - /// - /// Общая логика модификации данных: вставка и обновление в зависимости от статуса. - /// Используется в Post (вставка) и Patch (обновление). - /// - /// Модифицируемая сущность. - /// Ключ сущности. Использовать, если не задан в сущности, но специфичен (не д.б. сгенерирован). - /// Созданная сущность. - private DataObject UpdateObject(EdmEntityObject edmEntity, object key) - { - Init(); - - // Список объектов для обновления. - List objs = new List(); - - try - { - // Создадим объект данных по пришедшей сущности. - // В переменной objs сформируем список всех объектов для обновления в нужном порядке: сам объект и зависимые всех уровней. - DataObject obj = GetDataObjectByEdmEntity(edmEntity, key, objs, useUpdateView: true); - - for (int i = 0; i < objs.Count; i++) - { - ObjectStatus status = objs[i].GetStatus(false); - if (status == ObjectStatus.Created) - { - if (!ExecuteCallbackBeforeCreate(objs[i])) - { - objs.RemoveAt(i); - i++; - } - } - else - { - if (!ExecuteCallbackBeforeUpdate(objs[i])) - { - objs.RemoveAt(i); - i++; - } - } - } - - if (!OfflineManager.UnlockObjects(QueryOptions, objs)) - throw new OperationCanceledException(); // TODO - - // Обработка объектов данных в хранилище средствами сервиса данных. - // Статусы объектов должны автоматически получиться верными, т.к. в GetDataObjectByEdmEntity объект создаем - // только при неудачной попытке вычитки и лишь затем инициализируем свойства пришедшими значениями. - var objsArr = objs.ToArray(); - - // Список объектов для обновления без UnAltered. - var objsArrSmall = objsArr.Where(t => t.GetStatus() != ObjectStatus.UnAltered).ToArray(); - if (IsBatchChangeSetRequest) - { -#if NETFRAMEWORK - List dataObjectsToUpdate = (List)Request.Properties[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; - List allProcessedObjects = (List)Request.Properties[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; -#elif NETSTANDARD - List dataObjectsToUpdate = (List)Request.HttpContext.Items[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; - List allProcessedObjects = (List)Request.HttpContext.Items[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; -#endif - dataObjectsToUpdate.AddRange(objsArrSmall); - allProcessedObjects.Add(obj); - } - else - { - _dataService.UpdateObjects(ref objsArrSmall); - } - - // При успешном обновлении вычищаем из файловой системы, файлы подлежащие удалению. - _dataObjectFileAccessor.RemoveFileUploadDirectories(_removingFileDescriptions); - - return obj; - } - catch (Exception) - { - _removingFileDescriptions.Clear(); - throw; - } - } - - /// - /// Получить объект данных по ключу: если объект есть в хранилище, то возвращается загруженным по представлению , иначе - создаётся новый. - /// - /// Тип объекта, не может быть null. - /// Значение ключа. - /// Представление для загрузки объекта. - /// Объект данных. - private DataObject ReturnDataObject(Type objType, object keyValue, View view) - { - if (objType == null) - { - throw new ArgumentNullException(nameof(objType)); - } - - if (keyValue != null) - { - DataObject dataObjectFromCache = DataObjectCache.GetLivingDataObject(objType, keyValue); - - if (dataObjectFromCache != null) - { - // Если объект не новый и не загружен целиком (начиная с ORM@5.1.0-beta15). - if (dataObjectFromCache.GetStatus(false) == ObjectStatus.UnAltered - && dataObjectFromCache.GetLoadingState() != LoadingState.Loaded) - { - // Для обратной совместимости сравним перечень загруженных свойств и свойств в представлении. - /* Данный код срабатывает, например, если в кэше был объект, который загрузился только на уровне первичного ключа. - * - * Данный код также срабатывает в следующей ситуации: есть класс А, у него детейл Б, у которого есть наследник В. - * При загрузке объекта класса А подгрузятся его детейлы, однако они будут подгружены по представлению, которое соответствует классу Б, даже если детейлы класса В. - * Таким образом, в кэше окажутся объекты класса В, которые загружены только по свойствам Б. Раз не все свойства подгружены, то состояние LightLoaded. - * Догружать необходимо только те свойства, что ещё не загружались (потому что загруженные уже могут быть изменены). - */ - string[] loadedProps = dataObjectFromCache.GetLoadedProperties(); - IEnumerable ownProps = view.Properties.Where(p => !p.Name.Contains('.')); - if (!ownProps.All(p => loadedProps.Contains(p.Name))) - { - // Вычитывать объект сразу с детейлами нельзя, поскольку в этой же транзакции могут уже оказать отдельные операции с детейлами и перевычитка затрёт эти изменения. - View miniView = view.Clone(); - DetailInView[] miniViewDetails = miniView.Details; - miniView.Details = new DetailInView[0]; - _dataService.SafeLoadWithMasters(miniView, dataObjectFromCache, DataObjectCache); - - if (miniViewDetails.Length > 0) - { - _dataService.SafeLoadDetails(view, new DataObject[] { dataObjectFromCache }, DataObjectCache); - } - } - } - - return dataObjectFromCache; - } - - // Вычитывать объект сразу с детейлами нельзя, поскольку в этой же транзакции могут уже оказать отдельные операции с детейлами и перевычитка затрёт эти изменения. - View lightView = view.Clone(); - DetailInView[] lightViewDetails = lightView.Details; - lightView.Details = new DetailInView[0]; - - // Проверим существование объекта в базе. - LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(objType, lightView); - lcs.LimitFunction = FunctionBuilder.BuildEquals(keyValue); - lcs.ReturnTop = 2; - DataObject[] dobjs = _dataService.LoadObjects(lcs, DataObjectCache); - if (dobjs.Length == 1) - { - DataObject dataObject = dobjs[0]; - if (lightViewDetails.Any()) - { - // Дочитаем детейлы, чтобы в бизнес-серверах эти данные уже были. Детейлы с изменёнными состояниями будут пропущены из зачитки. - _dataService.SafeLoadDetails(view, new DataObject[] { dataObject }, DataObjectCache); - } - - return dataObject; - } - } - - // Значение ключа автоматически создаётся. - DataObject obj; - - if (keyValue != null) - { - obj = DataObjectCache.CreateDataObject(objType, keyValue); - } - else - { - obj = (DataObject)Activator.CreateInstance(objType); - DataObjectCache.AddDataObject(obj); - } - - return obj; - } - - /// - /// Добавляет объект данных в список на обновление, если его там ещё нет. - /// - /// Список на обновление. - /// Объект данных, который добавляем. - /// Добавлять в конец списка. - private static void AddObjectToUpdate(List objsToUpdate, DataObject dataObject, bool insertToEnd) - { - bool objAlreadyExists = objsToUpdate.Any(o => PKHelper.EQDataObject(o, dataObject, false)); - if (!objAlreadyExists) - { - if (insertToEnd) - { - objsToUpdate.Add(dataObject); // Добавляем в конец списка. - } else - { - objsToUpdate.Insert(0, dataObject); // Добавляем объект в начало списка. - } - - } - } - - /// - /// Построение объекта данных по сущности OData. - /// - /// Сущность OData. - /// Значение ключевого поля сущности. - /// Список объектов для обновления. - /// Признак, что объект добавляется в конец списка обновления. - /// Использовать представление для обновления (вместо представления по умолчанию). - /// Объект данных. - private DataObject GetDataObjectByEdmEntity(EdmEntityObject edmEntity, object key, List dObjs, bool endObject = false, bool useUpdateView = false) - { - if (edmEntity == null) - { - return null; - } - - // Значение свойства. - object value; - - // Получим значение ключа. - IEdmEntityType entityType = (IEdmEntityType)edmEntity.ActualEdmType; - IEnumerable entityProps = entityType.Properties().ToList(); - var keyProperty = entityProps.FirstOrDefault(prop => prop.Name == _model.KeyPropertyName); - if (key != null) - { - value = key; - } - else - { - edmEntity.TryGetPropertyValue(keyProperty.Name, out value); - } - - // Загрузим объект из хранилища, если он там есть, или создадим, если нет, но только для POST. - // Тем самым гарантируем загруженность свойств при необходимости обновления и установку нужного статуса. - Type objType = _model.GetDataObjectType(edmEntity); - - View view = null; - if (useUpdateView) - { - view = _model.GetDataObjectUpdateView(objType) ?? _model.GetDataObjectDefaultView(objType); - } else - { - view = _model.GetDataObjectDefaultView(objType); - } - - DataObject obj = ReturnDataObject(objType, value, view); - - // Добавляем объект в список для обновления, если там ещё нет объекта с таким ключом. - AddObjectToUpdate(dObjs, obj, endObject); - - // Все свойства объекта данных означим из пришедшей сущности, если они были там установлены(изменены). - string agregatorPropertyName = Information.GetAgregatePropertyName(objType); - IEnumerable changedPropNames = edmEntity.GetChangedPropertyNames(); - - // Обрабатываем агрегатор первым. - List changedProps = entityProps - .Where(ep => changedPropNames.Contains(ep.Name)) - .OrderBy(ep => ep.Name != agregatorPropertyName) - .ToList(); - foreach (var prop in changedProps) - { - string dataObjectPropName; - try - { - dataObjectPropName = _model.GetDataObjectProperty(entityType.FullTypeName(), prop.Name).Name; - } - catch (KeyNotFoundException) - { - // Check if prop value is the link from master to pseudodetail (pseudoproperty). - if (HasPseudoproperty(entityType, prop.Name)) - { - continue; - } - - throw; - } - - // Обработка мастеров и детейлов. - if (prop is EdmNavigationProperty navProp) - { - edmEntity.TryGetPropertyValue(prop.Name, out value); - - EdmMultiplicity edmMultiplicity = navProp.TargetMultiplicity(); - - // Обработка мастеров. - if (edmMultiplicity == EdmMultiplicity.One || edmMultiplicity == EdmMultiplicity.ZeroOrOne) - { - if (value is EdmEntityObject edmMaster) - { - // Порядок вставки влияет на порядок отправки объектов в UpdateObjects это в свою очередь влияет на то, как срабатывают бизнес-серверы. Бизнес-сервер мастера должен сработать после, а агрегатора перед этим объектом. - bool insertIntoEnd = string.IsNullOrEmpty(agregatorPropertyName); - DataObject master = GetDataObjectByEdmEntity(edmMaster, null, dObjs, insertIntoEnd, useUpdateView); - - Information.SetPropValueByName(obj, dataObjectPropName, master); - - if (dataObjectPropName == agregatorPropertyName) - { - master.AddDetail(obj); - - // Нужно обязательно обозначить детейловое свойство загруженным, поскольку мы вносим в него изменения. - string detailPropName = Information.GetDetailArrayPropertyName(master.GetType(), obj.GetType()); - if (!string.IsNullOrEmpty(detailPropName) && !master.CheckLoadedProperty(detailPropName)) - { - master.AddLoadedProperties(detailPropName); - } - } - } - else - { - Information.SetPropValueByName(obj, dataObjectPropName, null); - } - } - - // Обработка детейлов. - if (edmMultiplicity == EdmMultiplicity.Many) - { - DetailArray detarr = (DetailArray)Information.GetPropValueByName(obj, dataObjectPropName); - - if (value is EdmEntityObjectCollection coll) - { - if (coll != null && coll.Count > 0) - { - foreach (var edmEnt in coll) - { - DataObject det = GetDataObjectByEdmEntity( - (EdmEntityObject)edmEnt, - null, - dObjs, - true, - useUpdateView); - - if (det.__PrimaryKey == null) - { - detarr.AddObject(det); - } - else - { - detarr.SetByKey(det.__PrimaryKey, det); - } - } - } - } - else - { - detarr.Clear(); - } - } - } - else - { - // Обработка собственных свойств объекта (неключевых, т.к. ключ устанавливаем при начальной инициализации объекта obj). - if (prop.Name != keyProperty.Name) - { - Type dataObjectPropertyType = Information.GetPropertyType(objType, dataObjectPropName); - edmEntity.TryGetPropertyValue(prop.Name, out value); - - // Если тип свойства относится к одному из зарегистрированных провайдеров файловых свойств, - // значит свойство файловое, и его нужно обработать особым образом. - if (_dataObjectFileAccessor.HasDataObjectFileProvider(dataObjectPropertyType)) - { - IDataObjectFileProvider dataObjectFileProvider = _dataObjectFileAccessor.GetDataObjectFileProvider(dataObjectPropertyType); - - // Обработка файловых свойств объектов данных. - string serializedFileDescription = value as string; - if (serializedFileDescription == null) - { - // Файловое свойство было сброшено на клиенте. - // Ассоциированный файл должен быть удален, после успешного сохранения изменений. - // Для этого запоминаем метаданные ассоциированного файла, до того как свойство будет сброшено - // (для получения метаданных свойство будет дочитано в объект данных). - // Файловое свойство типа File хранит данные ассоциированного файла прямо в БД, - // соответственно из файловой системы просто нечего удалять, - // поэтому обходим его стороной, чтобы избежать лишных вычиток файлов из БД. - if (dataObjectPropertyType != typeof(File)) - { - var fileDescription = dataObjectFileProvider.GetFileDescription(_dataService, obj, dataObjectPropName); - _removingFileDescriptions.Add(fileDescription); - } - - // Сбрасываем файловое свойство в изменяемом объекте данных. - Information.SetPropValueByName(obj, dataObjectPropName, null); - } - else - { - // Файловое свойство было изменено, но не сброшено. - // Если в метаданных файла присутствует FileUploadKey значит файл был загружен на сервер, - // но еще не был ассоциирован с объектом данных, и это нужно сделать. - FileDescription fileDescription = FileDescription.FromJson(serializedFileDescription); - fileDescription.FilePropertyType = dataObjectPropertyType; - if (!(string.IsNullOrEmpty(fileDescription.FileUploadKey) || string.IsNullOrEmpty(fileDescription.FileName))) - { - var fileProperty = dataObjectFileProvider.GetFileProperty(_dataService, fileDescription); - Information.SetPropValueByName(obj, dataObjectPropName, fileProperty); - - // Файловое свойство типа File хранит данные ассоциированного файла прямо в БД, - // поэтому после успешного сохранения объекта данных, оссоциированный с ним файл должен быть удален из файловой системы. - // Для этого запоминаем описание загруженного файла. - if (dataObjectPropertyType == typeof(File)) - { - _removingFileDescriptions.Add(fileDescription); - } - } - } - } - else - { - // Преобразование типов для примитивных свойств. - if (value is DateTimeOffset) - value = ((DateTimeOffset)value).UtcDateTime; - if (value is EdmEnumObject) - value = ((EdmEnumObject)value).Value; - - Information.SetPropValueByName(obj, dataObjectPropName, value); - } - } - } - } - - if (!string.IsNullOrEmpty(agregatorPropertyName)) - { - DataObject agregator = (DataObject)Information.GetPropValueByName(obj, agregatorPropertyName); - - if (agregator != null) - { - AddObjectToUpdate(dObjs, agregator, endObject); - } - } - - return obj; - } - } -} +namespace NewPlatform.Flexberry.ORM.ODataService.Controllers +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Net.Http; + using System.Text; + using ICSSoft.STORMNET; + using ICSSoft.STORMNET.Business; + using ICSSoft.STORMNET.FunctionalLanguage; + using Microsoft.AspNet.OData; + using Microsoft.OData.Edm; + using NewPlatform.Flexberry.ORM.ODataService.Batch; + using NewPlatform.Flexberry.ORM.ODataService.Extensions; + using NewPlatform.Flexberry.ORM.ODataService.Files; + using NewPlatform.Flexberry.ORM.ODataService.Files.Providers; + using NewPlatform.Flexberry.ORM.ODataService.Formatter; + using Newtonsoft.Json; + using File = ICSSoft.STORMNET.FileType.File; + using KeySegment = Microsoft.OData.UriParser.KeySegment; + +#if NETFRAMEWORK + using System.Net.Http.Formatting; + using System.Web.Http; + using System.Web.Http.Results; + using System.Web.Http.Validation; + using NewPlatform.Flexberry.ORM.ODataService.Events; + using NewPlatform.Flexberry.ORM.ODataService.Handlers; +#endif +#if NETSTANDARD + using Microsoft.AspNet.OData.Formatter; + using Microsoft.AspNetCore.Http; + using Microsoft.AspNetCore.Mvc; + using Microsoft.AspNetCore.Mvc.Formatters; + using Microsoft.Extensions.Primitives; + using NewPlatform.Flexberry.ORM.ODataService.Middleware; +#endif + + /// + /// Определяет класс контроллера OData, который поддерживает запись и чтение данных с использованием OData формата. + /// + public partial class DataObjectController + { + /// + /// Метаданные файлов, временно загруженных в каталог файлового хранилища и привязанных к свойствам обрабатываемых объектов данных. + /// Файлы будут удалены из файловой системы + /// в случае успешного сохранения объектов данных. + /// + private List _removingFileDescriptions = new List(); + + /// + /// Кэш типов, у которых одинакового типа детейлы и мастера. + /// + private List _typesWithSameDetailAndMaster = new List(); + + /// + /// Кэш типов, у которых нет одинакового типа детейлов и мастеров. + /// + private List _typesWithNotSameDetailAndMaster = new List(); + + /// + /// Создание сущности и всех связанных. При существовании в БД произойдёт обновление. + /// + /// Создаваемая сущность. + /// Созданная сущность. +#if NETFRAMEWORK + public HttpResponseMessage Post([FromBody] EdmEntityObject edmEntity) +#elif NETSTANDARD + public IActionResult Post([FromBody] EdmEntityObject edmEntity) +#endif + { + try + { + if (edmEntity == null) + { + edmEntity = ReplaceOdataBindNull(); + } + + DataObject obj = UpdateObject(edmEntity, null); + ExecuteCallbackAfterCreate(obj); + + edmEntity = GetEdmObject(_model.GetEdmEntityType(type), obj, 1, null, null); + var responseForPreferMinimal = TestPreferMinimal(); + if (responseForPreferMinimal != null) + { + return responseForPreferMinimal; + } + +#if NETFRAMEWORK + var result = Request.CreateResponse(HttpStatusCode.Created, edmEntity); + if (Request.Headers.Contains("Prefer")) + { + result.Headers.Add("Preference-Applied", "return=representation"); + } +#elif NETSTANDARD + var result = new ObjectResult(edmEntity) { StatusCode = StatusCodes.Status201Created }; + if (Request.Headers.ContainsKey("Prefer")) + { + Response.Headers.Add("Preference-Applied", "return=representation"); + } +#endif + + return result; + } + catch (Exception ex) + { +#if NETFRAMEWORK + return InternalServerErrorMessage(ex); +#elif NETSTANDARD + throw CustomException(ex); +#endif + } + } + + /// + /// Обновление сущности (свойства могут быть заданы частично, т.е. указывать можно значения только измененных свойств). + /// Если сущности с заданным ключом нет в БД происходит Upsert (в соответствии со стандартом). + /// + /// Ключ обновляемой сущности. + /// Обновляемая сущность. + /// Обновлённая сущность. +#if NETFRAMEWORK + public HttpResponseMessage Patch([FromODataUri] Guid key, [FromBody] EdmEntityObject edmEntity) +#elif NETSTANDARD + public IActionResult Patch([FromODataUri] Guid key, [FromBody] EdmEntityObject edmEntity) +#endif + { + try + { + if (key == null) + { + throw new ArgumentNullException("key"); + } + + if (edmEntity == null) + { + edmEntity = ReplaceOdataBindNull(); + } + + IEdmEntityType entityType = (IEdmEntityType)edmEntity.ActualEdmType; + +#if NETFRAMEWORK + var dictionary = Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.Dictionary) ? + (Dictionary)Request.Properties[ExtendedODataEntityDeserializer.Dictionary] : + new Dictionary(); +#elif NETSTANDARD + var dictionary = Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.Dictionary) ? + (Dictionary)Request.HttpContext.Items[ExtendedODataEntityDeserializer.Dictionary] : + new Dictionary(); +#endif + + foreach (var prop in entityType.Properties()) + { + if (!dictionary.ContainsKey(prop.Name) && edmEntity.GetChangedPropertyNames().Contains(prop.Name) && prop is EdmNavigationProperty) + { + const string msg = "Error processing request stream. Deep updates are not supported in PUT or PATCH operations."; +#if NETFRAMEWORK + return Request.CreateResponse(HttpStatusCode.BadRequest, msg); +#elif NETSTANDARD + return BadRequest(msg); +#endif + } + + if (dictionary.ContainsKey(prop.Name) && dictionary[prop.Name] == null && + (!prop.Type.IsNullable || prop.Type.IsCollection())) + { + string msg = $"The property {prop.Name} can not be null."; +#if NETFRAMEWORK + return Request.CreateResponse(HttpStatusCode.BadRequest, msg); +#elif NETSTANDARD + return BadRequest(msg); +#endif + } + } + + DataObject obj = UpdateObject(edmEntity, key); + ExecuteCallbackAfterUpdate(obj); + + var responseForPreferMinimal = TestPreferMinimal(); + if (responseForPreferMinimal != null) + { + return responseForPreferMinimal; + } + +#if NETFRAMEWORK + if (!Request.Headers.Contains("Prefer")) + { + return Request.CreateResponse(HttpStatusCode.NoContent); + } +#elif NETSTANDARD + if (!Request.Headers.ContainsKey("Prefer")) + { + return NoContent(); + } +#endif + + edmEntity = GetEdmObject(_model.GetEdmEntityType(type), obj, 1, null, null); +#if NETFRAMEWORK + var result = Request.CreateResponse(HttpStatusCode.OK, edmEntity); + result.Headers.Add("Preference-Applied", "return=representation"); +#elif NETSTANDARD + var result = Ok(edmEntity); + Response.Headers.Add("Preference-Applied", "return=representation"); +#endif + return result; + } + catch (Exception ex) + { +#if NETFRAMEWORK + return InternalServerErrorMessage(ex); +#elif NETSTANDARD + throw CustomException(ex); +#endif + } + } + + /// + /// Осуществляет удаление сущности. + /// + /// + /// Результат выполнения запроса типа , соответствующий статусу . + /// +#if NETFRAMEWORK + public HttpResponseMessage DeleteString() +#elif NETSTANDARD + public NoContentResult DeleteString() +#endif + { + var keySegment = ODataPath.Segments[1] as KeySegment; + string key = keySegment.Keys.First().Value.ToString().Trim().Replace("'", string.Empty); + return DeleteEntity(key); + } + + /// + /// Осуществляет удаление сущности. + /// + /// + /// Результат выполнения запроса типа , соответствующий статусу . + /// +#if NETFRAMEWORK + public HttpResponseMessage DeleteGuid() +#elif NETSTANDARD + public NoContentResult DeleteGuid() +#endif + { + var keySegment = ODataPath.Segments[1] as KeySegment; + Guid key = new Guid(keySegment.Keys.First().Value.ToString()); + return DeleteEntity(key); + } + +#if NETFRAMEWORK + private HttpResponseMessage DeleteEntity(object key) +#elif NETSTANDARD + private NoContentResult DeleteEntity(object key) +#endif + { + try + { + if (key == null) + { + throw new ArgumentNullException(nameof(key)); + } + + Init(); + + /* В ситуации, когда мастер и детейл одного типа, ORM без подгрузки копии данных не может корректно разобрать порядок, + * в котором объекты должны быть удалены. + */ + bool needDataCopyLoad = _typesWithSameDetailAndMaster.Contains(type); + if (!_typesWithNotSameDetailAndMaster.Contains(type) && !needDataCopyLoad) + { + string[] props = Information.GetAllPropertyNames(type); + int length = props.Length; + int index = 0; + + while (!needDataCopyLoad && index < length) + { + string prop = props[index]; + Type propType = Information.GetPropertyType(type, prop); + needDataCopyLoad = propType.IsSubclassOf(typeof(DataObject)) && Information.GetDetailArrayPropertyName(type, propType) != null; + + index++; + } + } + + DataObject obj = null; + if (!needDataCopyLoad) + { + obj = DataObjectCache.CreateDataObject(type, key); + _typesWithNotSameDetailAndMaster.Add(type); + } + else + { + obj = LoadObject(type, key.ToString()); + _typesWithSameDetailAndMaster.Add(type); + } + + // Удаляем объект с заданным ключем. + // Детейлы удалятся вместе с агрегатором автоматически. + // Если удаляемый объект является мастером для какого-либо объекта, то + // спецификация предполагает, что зависимые объекты будут каскадно удалены либо ссылки в них заменены + // на null/значению по умолчанию, если это задано в модели через ReferentialConstraints. + // Но если это задано в модели, то соответвующие объекты данных реализуют интерфейсы + // IReferencesCascadeDelete/IReferencesNullDelete и требуемые действия будут выполнены автоматически. + // В данный момент ReferentialConstraints не создаются в модели. + obj.SetStatus(ObjectStatus.Deleted); + + // Раз объект данных удаляется, то и все ассоциированные с ним файлы должны быть удалены. + // Запоминаем метаданные всех ассоциированных файлов, кроме файлов соответствующих файловым свойствам типа File + // (файлы соответствующие свойствам типа File хранятся в БД, и из файловой системы просто нечего удалять). + // TODO: подумать как быть с детейлами, детейлами детейлов, и т д. + var descriptions = _dataObjectFileAccessor.GetDataObjectFileDescriptions(_dataService, obj, new List { typeof(File) }); + _removingFileDescriptions.AddRange(descriptions); + + List objs = new List(); + + if (ExecuteCallbackBeforeDelete(obj)) + { + string agregatorPropertyName = Information.GetAgregatePropertyName(type); + if (!string.IsNullOrEmpty(agregatorPropertyName)) + { + DataObject agregator = (DataObject)Information.GetPropValueByName(obj, agregatorPropertyName); + + if (agregator != null) + { + objs.Add(agregator); + } + } + + objs.Add(obj); + + if (IsBatchChangeSetRequest) + { +#if NETFRAMEWORK + List dataObjectsToUpdate = (List)Request.Properties[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; + List allProcessedObjects = (List)Request.Properties[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; + +#elif NETSTANDARD + List dataObjectsToUpdate = (List)HttpContext.Items[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; + List allProcessedObjects = (List)HttpContext.Items[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; +#endif + dataObjectsToUpdate.AddRange(objs); + allProcessedObjects.Add(obj); + } + else + { + DataObject[] dataObjects = objs.ToArray(); + _dataService.UpdateObjects(ref dataObjects); + } + } + + // При успешном удалении вычищаем из файловой системы, файлы подлежащие удалению. + _dataObjectFileAccessor.RemoveFileUploadDirectories(_removingFileDescriptions); + ExecuteCallbackAfterDelete(obj); + +#if NETFRAMEWORK + return Request.CreateResponse(HttpStatusCode.NoContent); +#elif NETSTANDARD + return NoContent(); +#endif + } + catch (Exception ex) + { + _removingFileDescriptions.Clear(); +#if NETFRAMEWORK + return InternalServerErrorMessage(ex); +#elif NETSTANDARD + throw CustomException(ex); +#endif + } + } + +#if NETFRAMEWORK + /// + /// Создаётся http-ответ с кодом 500 по-умолчанию, на возникшую в сервисе ошибку. + /// Для изменения возвращаемого кода необходимо реализовать обработчик CallbackAfterInternalServerError. + /// + /// Ошибка сервиса. + /// Http-ответ. + private HttpResponseMessage InternalServerErrorMessage(Exception ex) + { + return InternalServerErrorMessage(ex, _events, Request); + } + + /// + /// Создаётся http-ответ с кодом 500 по-умолчанию, на возникшую в сервисе ошибку. + /// Для изменения возвращаемого кода необходимо реализовать обработчик CallbackAfterInternalServerError. + /// + /// Ошибка сервиса. + /// The container with registered events. + /// Original HTTP request message for create a response. + /// Http-ответ. + public static HttpResponseMessage InternalServerErrorMessage(Exception ex, IEventHandlerContainer events, HttpRequestMessage request) + { + HttpStatusCode code = HttpStatusCode.InternalServerError; + Exception originalEx = ex; + + if (events?.CallbackAfterInternalServerError != null) + { + ex = events?.CallbackAfterInternalServerError(ex, ref code); + } + + if (ex == null) + { + ex = new Exception("Exception is null."); + } + + StringBuilder details = new StringBuilder(); + StringBuilder trace = new StringBuilder(); + var ex2 = ex; + while (ex2.InnerException != null) + { + string detailsItem = + "{" + + $"{JsonConvert.ToString("code")}: {JsonConvert.ToString($"{(int)code}")}, " + + $"{JsonConvert.ToString("message")}: {JsonConvert.ToString(ex2.InnerException.Message)}" + + "}"; + if (details.Length > 0) + details.Append(", "); + details.Append(detailsItem); + ex2 = ex2.InnerException; + } + + ex2 = ex; + do + { + string traceItem = + "{" + + $"{JsonConvert.ToString("message")}: {JsonConvert.ToString(ex2.Message)}, " + + $"{JsonConvert.ToString("stack")}: {JsonConvert.ToString(ex2.StackTrace)}" + + "}"; + if (trace.Length > 0) + trace.Append(", "); + trace.Append(traceItem); + ex2 = ex2.InnerException; + } + while (ex2 != null); + + details.Insert(0, "[").Append("]"); + trace.Insert(0, $"{{{JsonConvert.ToString("trace")}: [").Append("]}"); + + HttpResponseMessage msg = request.CreateResponse(code); + msg.Content = new StringContent( + "{" + + $"{JsonConvert.ToString("error")}: " + + "{ " + + $"{JsonConvert.ToString("code")}: {JsonConvert.ToString($"{(int)code}")}, " + + $"{JsonConvert.ToString("message")}: {JsonConvert.ToString(ex.Message)}, " + + $"{JsonConvert.ToString("details")}: {details.ToString()}, " + + $"{JsonConvert.ToString("innererror")}: {trace.ToString()}" + + "}" + + "}", + Encoding.UTF8, + "application/json"); + LogService.LogError(originalEx.Message, originalEx); + return msg; + } +#endif + +#if NETFRAMEWORK + private HttpResponseMessage TestPreferMinimal() + { + if (Request.Headers.Contains("Prefer")) + { + KeyValuePair> header = Request.Headers.FirstOrDefault(h => h.Key.ToLower() == "prefer"); + if (header.Value != null && header.Value.ToString().ToLower().Contains("return=minimal")) + { + HttpResponseMessage result = Request.CreateResponse(HttpStatusCode.NoContent); + result.Headers.Add("Preference-Applied", "return=minimal"); + return result; + } + } + + return null; + } +#elif NETSTANDARD + + private NoContentResult TestPreferMinimal() + { + if (Request.Headers.ContainsKey("Prefer")) + { + KeyValuePair header = Request.Headers.FirstOrDefault(h => h.Key.ToLower() == "prefer"); + if (header.Value.ToString() != null && header.Value.ToString().ToLower().Contains("return=minimal")) + { + NoContentResult result = NoContent(); + Request.Headers.Add("Preference-Applied", "return=minimal"); + + return result; + } + } + + return null; + } +#endif + +#if NETFRAMEWORK + /// + /// Заменяет в теле запроса представление навигационных свойств с Имя_Связи@odata.bind:null на представление Имя_Связи:null. + /// + /// Возвращается EdmEntityObject преобразованный из JSON-строки. + private EdmEntityObject ReplaceOdataBindNull() + { + if (!Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.OdataBindNull)) + { + if (Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) + throw (Exception)Request.Properties[ExtendedODataEntityDeserializer.ReadException]; + throw new Exception("ReplaceOdataBindNull: edmEntity is null."); + } + + Stream stream; + + string requestContentKey = PostPatchHandler.RequestContent; + if (Request.Properties.ContainsKey(PostPatchHandler.PropertyKeyBatchRequest) && (bool)Request.Properties[PostPatchHandler.PropertyKeyBatchRequest] == true) + { + requestContentKey = PostPatchHandler.RequestContent + $"_{PostPatchHandler.PropertyKeyContentId}_{Request.Properties[PostPatchHandler.PropertyKeyContentId]}"; + } + + string json = (string)Request.Properties[requestContentKey]; + + Dictionary props = + JsonConvert.DeserializeObject>(json, new JsonSerializerSettings() { FloatParseHandling = FloatParseHandling.Decimal }); + var keys = props.Keys.ToArray(); + var odataBindNullList = new List(); + foreach (var key in keys) + { + var p = key.IndexOf("@odata.bind"); + if (p != -1 && props[key] == null) + { + props.Remove(key); + var newKey = key.Substring(0, p); + if (props.ContainsKey(newKey)) + { + props.Remove(newKey); + } + + var type = (EdmEntityTypeReference)Request.Properties[ExtendedODataEntityDeserializer.OdataBindNull]; + + var prop = type.FindNavigationProperty(newKey); + if (prop.Type.IsCollection()) + { + odataBindNullList.Add(newKey); + } + else + { + props.Add(newKey, null); + } + } + } + + json = JsonConvert.SerializeObject(props); + Request.Content = new StringContent(json, Encoding.UTF8, "application/json"); + + IContentNegotiator negotiator = (IContentNegotiator)Configuration.Services.GetService(typeof(IContentNegotiator)); + var resultNegotiate = negotiator.Negotiate(typeof(EdmEntityObject), Request, Configuration.Formatters); + + stream = Request.Content.ReadAsStreamAsync().Result; + var formatter = resultNegotiate.Formatter; + + /* + // Другой вариант получения форматтера. + var formatter = ((ODataMediaTypeFormatter)Configuration.Formatters[0]).GetPerRequestFormatterInstance( + typeof(EdmEntityObject), Request, Request.Content.Headers.ContentType); + + */ + + var edmEntity = (EdmEntityObject)formatter.ReadFromStreamAsync( + typeof(EdmEntityObject), + stream, + Request.Content, + new ModelStateFormatterLogger(ModelState, "edmEntity")).Result; + if (edmEntity == null && Request.Properties.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) + { + throw (Exception)Request.Properties[ExtendedODataEntityDeserializer.ReadException]; + } + + foreach (var prop in odataBindNullList) + { + edmEntity.TrySetPropertyValue(prop, null); + } + + return edmEntity; + } +#elif NETSTANDARD + /// + /// Заменяет в теле запроса представление навигационных свойств с Имя_Связи@odata.bind:null на представление Имя_Связи:null. + /// + /// Возвращается EdmEntityObject преобразованный из JSON-строки. + private EdmEntityObject ReplaceOdataBindNull() + { + if (!Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.OdataBindNull)) + { + if (Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) + throw (Exception)Request.HttpContext.Items[ExtendedODataEntityDeserializer.ReadException]; + throw new Exception("ReplaceOdataBindNull: edmEntity is null."); + } + + string json = (string)Request.HttpContext.Items[RequestHeadersHookMiddleware.PropertyKeyRequestContent]; + + Dictionary props = JsonConvert.DeserializeObject>(json); + var keys = props.Keys.ToArray(); + var odataBindNullList = new List(); + foreach (var key in keys) + { + var p = key.IndexOf("@odata.bind"); + if (p != -1 && props[key] == null) + { + props.Remove(key); + var newKey = key.Substring(0, p); + if (props.ContainsKey(newKey)) + { + props.Remove(newKey); + } + + var type = (EdmEntityTypeReference)Request.HttpContext.Items[ExtendedODataEntityDeserializer.OdataBindNull]; + + var prop = type.FindNavigationProperty(newKey); + if (prop.Type.IsCollection()) + { + odataBindNullList.Add(newKey); + } + else + { + props.Add(newKey, null); + } + } + } + + json = JsonConvert.SerializeObject(props); + Request.Body = new StringContent(json, Encoding.UTF8, "application/json").ReadAsStreamAsync().Result; + + var ictx = new InputFormatterContext( + HttpContext, + string.Empty, + ModelState, + MetadataProvider.GetMetadataForType(typeof(EdmEntityObject)), + (x, y) => new StreamReader(x, y)); + + IList formatters = ODataInputFormatterFactory.Create(); + + // The JSON input formatter is the first formatter in the OData input formatters list. + InputFormatterResult formatterResult = formatters.First().ReadRequestBodyAsync(ictx, Encoding.UTF8).Result; + + var edmEntity = (EdmEntityObject)formatterResult.Model; + + if (edmEntity == null && Request.HttpContext.Items.ContainsKey(ExtendedODataEntityDeserializer.ReadException)) + { + throw (Exception)Request.HttpContext.Items[ExtendedODataEntityDeserializer.ReadException]; + } + + foreach (var prop in odataBindNullList) + { + edmEntity.TrySetPropertyValue(prop, null); + } + + return edmEntity; + } +#endif + + /// + /// Общая логика модификации данных: вставка и обновление в зависимости от статуса. + /// Используется в Post (вставка) и Patch (обновление). + /// + /// Модифицируемая сущность. + /// Ключ сущности. Использовать, если не задан в сущности, но специфичен (не д.б. сгенерирован). + /// Созданная сущность. + private DataObject UpdateObject(EdmEntityObject edmEntity, object key) + { + Init(); + + // Список объектов для обновления. + List objs = new List(); + + try + { + // Создадим объект данных по пришедшей сущности. + // В переменной objs сформируем список всех объектов для обновления в нужном порядке: сам объект и зависимые всех уровней. + DataObject obj = GetDataObjectByEdmEntity(edmEntity, key, objs, useUpdateView: true); + + for (int i = 0; i < objs.Count; i++) + { + ObjectStatus status = objs[i].GetStatus(false); + if (status == ObjectStatus.Created) + { + if (!ExecuteCallbackBeforeCreate(objs[i])) + { + objs.RemoveAt(i); + i++; + } + } + else + { + if (!ExecuteCallbackBeforeUpdate(objs[i])) + { + objs.RemoveAt(i); + i++; + } + } + } + + if (!OfflineManager.UnlockObjects(QueryOptions, objs)) + throw new OperationCanceledException(); // TODO + + // Обработка объектов данных в хранилище средствами сервиса данных. + // Статусы объектов должны автоматически получиться верными, т.к. в GetDataObjectByEdmEntity объект создаем + // только при неудачной попытке вычитки и лишь затем инициализируем свойства пришедшими значениями. + var objsArr = objs.ToArray(); + + // Список объектов для обновления без UnAltered. + var objsArrSmall = objsArr.Where(t => t.GetStatus() != ObjectStatus.UnAltered).ToArray(); + if (IsBatchChangeSetRequest) + { +#if NETFRAMEWORK + List dataObjectsToUpdate = (List)Request.Properties[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; + List allProcessedObjects = (List)Request.Properties[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; +#elif NETSTANDARD + List dataObjectsToUpdate = (List)Request.HttpContext.Items[DataObjectODataBatchHandler.DataObjectsToUpdatePropertyKey]; + List allProcessedObjects = (List)Request.HttpContext.Items[DataObjectODataBatchHandler.AllProcessedObjectsPropertyKey]; +#endif + dataObjectsToUpdate.AddRange(objsArrSmall); + allProcessedObjects.Add(obj); + } + else + { + _dataService.UpdateObjects(ref objsArrSmall); + } + + // При успешном обновлении вычищаем из файловой системы, файлы подлежащие удалению. + _dataObjectFileAccessor.RemoveFileUploadDirectories(_removingFileDescriptions); + + return obj; + } + catch (Exception) + { + _removingFileDescriptions.Clear(); + throw; + } + } + + /// + /// Получить объект данных по ключу: если объект есть в хранилище, то возвращается загруженным по представлению , иначе - создаётся новый. + /// + /// Тип объекта, не может быть null. + /// Значение ключа. + /// Представление для загрузки объекта. + /// Объект данных. + private DataObject ReturnDataObject(Type objType, object keyValue, View view) + { + if (objType == null) + { + throw new ArgumentNullException(nameof(objType)); + } + + if (keyValue != null) + { + DataObject dataObjectFromCache = DataObjectCache.GetLivingDataObject(objType, keyValue); + + if (dataObjectFromCache != null) + { + // Если объект не новый и не загружен целиком (начиная с ORM@5.1.0-beta15). + if (dataObjectFromCache.GetStatus(false) == ObjectStatus.UnAltered + && dataObjectFromCache.GetLoadingState() != LoadingState.Loaded) + { + // Для обратной совместимости сравним перечень загруженных свойств и свойств в представлении. + /* Данный код срабатывает, например, если в кэше был объект, который загрузился только на уровне первичного ключа. + * + * Данный код также срабатывает в следующей ситуации: есть класс А, у него детейл Б, у которого есть наследник В. + * При загрузке объекта класса А подгрузятся его детейлы, однако они будут подгружены по представлению, которое соответствует классу Б, даже если детейлы класса В. + * Таким образом, в кэше окажутся объекты класса В, которые загружены только по свойствам Б. Раз не все свойства подгружены, то состояние LightLoaded. + * Догружать необходимо только те свойства, что ещё не загружались (потому что загруженные уже могут быть изменены). + */ + string[] loadedProps = dataObjectFromCache.GetLoadedProperties(); + IEnumerable ownProps = view.Properties.Where(p => !p.Name.Contains('.')); + if (!ownProps.All(p => loadedProps.Contains(p.Name))) + { + // Вычитывать объект сразу с детейлами нельзя, поскольку в этой же транзакции могут уже оказать отдельные операции с детейлами и перевычитка затрёт эти изменения. + View miniView = view.Clone(); + DetailInView[] miniViewDetails = miniView.Details; + miniView.Details = new DetailInView[0]; + _dataService.SafeLoadWithMasters(miniView, dataObjectFromCache, DataObjectCache); + + if (miniViewDetails.Length > 0) + { + _dataService.SafeLoadDetails(view, new DataObject[] { dataObjectFromCache }, DataObjectCache); + } + } + } + + return dataObjectFromCache; + } + + // Вычитывать объект сразу с детейлами нельзя, поскольку в этой же транзакции могут уже оказать отдельные операции с детейлами и перевычитка затрёт эти изменения. + View lightView = view.Clone(); + DetailInView[] lightViewDetails = lightView.Details; + lightView.Details = new DetailInView[0]; + + // Проверим существование объекта в базе. + LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(objType, lightView); + lcs.LimitFunction = FunctionBuilder.BuildEquals(keyValue); + lcs.ReturnTop = 2; + DataObject[] dobjs = _dataService.LoadObjects(lcs, DataObjectCache); + if (dobjs.Length == 1) + { + DataObject dataObject = dobjs[0]; + if (lightViewDetails.Any()) + { + // Дочитаем детейлы, чтобы в бизнес-серверах эти данные уже были. Детейлы с изменёнными состояниями будут пропущены из зачитки. + _dataService.SafeLoadDetails(view, new DataObject[] { dataObject }, DataObjectCache); + } + + return dataObject; + } + } + + // Значение ключа автоматически создаётся. + DataObject obj; + + if (keyValue != null) + { + obj = DataObjectCache.CreateDataObject(objType, keyValue); + } + else + { + obj = (DataObject)Activator.CreateInstance(objType); + DataObjectCache.AddDataObject(obj); + } + + return obj; + } + + /// + /// Добавляет объект данных в список на обновление, если его там ещё нет. + /// + /// Список на обновление. + /// Объект данных, который добавляем. + /// Добавлять в конец списка. + private static void AddObjectToUpdate(List objsToUpdate, DataObject dataObject, bool insertToEnd) + { + bool objAlreadyExists = objsToUpdate.Any(o => PKHelper.EQDataObject(o, dataObject, false)); + if (!objAlreadyExists) + { + if (insertToEnd) + { + objsToUpdate.Add(dataObject); // Добавляем в конец списка. + } else + { + objsToUpdate.Insert(0, dataObject); // Добавляем объект в начало списка. + } + + } + } + + /// + /// Построение объекта данных по сущности OData. + /// + /// Сущность OData. + /// Значение ключевого поля сущности. + /// Список объектов для обновления. + /// Признак, что объект добавляется в конец списка обновления. + /// Использовать представление для обновления (вместо представления по умолчанию). + /// Объект данных. + private DataObject GetDataObjectByEdmEntity(EdmEntityObject edmEntity, object key, List dObjs, bool endObject = false, bool useUpdateView = false) + { + if (edmEntity == null) + { + return null; + } + + // Значение свойства. + object value; + + // Получим значение ключа. + IEdmEntityType entityType = (IEdmEntityType)edmEntity.ActualEdmType; + IEnumerable entityProps = entityType.Properties().ToList(); + var keyProperty = entityProps.FirstOrDefault(prop => prop.Name == _model.KeyPropertyName); + if (key != null) + { + value = key; + } + else + { + edmEntity.TryGetPropertyValue(keyProperty.Name, out value); + } + + // Загрузим объект из хранилища, если он там есть, или создадим, если нет, но только для POST. + // Тем самым гарантируем загруженность свойств при необходимости обновления и установку нужного статуса. + Type objType = _model.GetDataObjectType(edmEntity); + + View view = null; + if (useUpdateView) + { + view = _model.GetDataObjectUpdateView(objType) ?? _model.GetDataObjectDefaultView(objType); + } else + { + view = _model.GetDataObjectDefaultView(objType); + } + + DataObject obj = ReturnDataObject(objType, value, view); + + // Добавляем объект в список для обновления, если там ещё нет объекта с таким ключом. + AddObjectToUpdate(dObjs, obj, endObject); + + // Все свойства объекта данных означим из пришедшей сущности, если они были там установлены(изменены). + string agregatorPropertyName = Information.GetAgregatePropertyName(objType); + IEnumerable changedPropNames = edmEntity.GetChangedPropertyNames(); + + // Обрабатываем агрегатор первым. + List changedProps = entityProps + .Where(ep => changedPropNames.Contains(ep.Name)) + .OrderBy(ep => ep.Name != agregatorPropertyName) + .ToList(); + foreach (var prop in changedProps) + { + string dataObjectPropName; + try + { + dataObjectPropName = _model.GetDataObjectProperty(entityType.FullTypeName(), prop.Name).Name; + } + catch (KeyNotFoundException) + { + // Check if prop value is the link from master to pseudodetail (pseudoproperty). + if (HasPseudoproperty(entityType, prop.Name)) + { + continue; + } + + throw; + } + + // Обработка мастеров и детейлов. + if (prop is EdmNavigationProperty navProp) + { + edmEntity.TryGetPropertyValue(prop.Name, out value); + + EdmMultiplicity edmMultiplicity = navProp.TargetMultiplicity(); + + // Обработка мастеров. + if (edmMultiplicity == EdmMultiplicity.One || edmMultiplicity == EdmMultiplicity.ZeroOrOne) + { + if (value is EdmEntityObject edmMaster) + { + // Порядок вставки влияет на порядок отправки объектов в UpdateObjects это в свою очередь влияет на то, как срабатывают бизнес-серверы. Бизнес-сервер мастера должен сработать после, а агрегатора перед этим объектом. + bool insertIntoEnd = string.IsNullOrEmpty(agregatorPropertyName); + DataObject master = GetDataObjectByEdmEntity(edmMaster, null, dObjs, insertIntoEnd, useUpdateView); + + Information.SetPropValueByName(obj, dataObjectPropName, master); + + if (dataObjectPropName == agregatorPropertyName) + { + master.AddDetail(obj); + + // Нужно обязательно обозначить детейловое свойство загруженным, поскольку мы вносим в него изменения. + string detailPropName = Information.GetDetailArrayPropertyName(master.GetType(), obj.GetType()); + if (!string.IsNullOrEmpty(detailPropName) && !master.CheckLoadedProperty(detailPropName)) + { + master.AddLoadedProperties(detailPropName); + } + } + } + else + { + Information.SetPropValueByName(obj, dataObjectPropName, null); + } + } + + // Обработка детейлов. + if (edmMultiplicity == EdmMultiplicity.Many) + { + DetailArray detarr = (DetailArray)Information.GetPropValueByName(obj, dataObjectPropName); + + if (value is EdmEntityObjectCollection coll) + { + if (coll != null && coll.Count > 0) + { + foreach (var edmEnt in coll) + { + DataObject det = GetDataObjectByEdmEntity( + (EdmEntityObject)edmEnt, + null, + dObjs, + true, + useUpdateView); + + if (det.__PrimaryKey == null) + { + detarr.AddObject(det); + } + else + { + detarr.SetByKey(det.__PrimaryKey, det); + } + } + } + } + else + { + detarr.Clear(); + } + } + } + else + { + // Обработка собственных свойств объекта (неключевых, т.к. ключ устанавливаем при начальной инициализации объекта obj). + if (prop.Name != keyProperty.Name) + { + Type dataObjectPropertyType = Information.GetPropertyType(objType, dataObjectPropName); + edmEntity.TryGetPropertyValue(prop.Name, out value); + + // Если тип свойства относится к одному из зарегистрированных провайдеров файловых свойств, + // значит свойство файловое, и его нужно обработать особым образом. + if (_dataObjectFileAccessor.HasDataObjectFileProvider(dataObjectPropertyType)) + { + IDataObjectFileProvider dataObjectFileProvider = _dataObjectFileAccessor.GetDataObjectFileProvider(dataObjectPropertyType); + + // Обработка файловых свойств объектов данных. + string serializedFileDescription = value as string; + if (serializedFileDescription == null) + { + // Файловое свойство было сброшено на клиенте. + // Ассоциированный файл должен быть удален, после успешного сохранения изменений. + // Для этого запоминаем метаданные ассоциированного файла, до того как свойство будет сброшено + // (для получения метаданных свойство будет дочитано в объект данных). + // Файловое свойство типа File хранит данные ассоциированного файла прямо в БД, + // соответственно из файловой системы просто нечего удалять, + // поэтому обходим его стороной, чтобы избежать лишных вычиток файлов из БД. + if (dataObjectPropertyType != typeof(File)) + { + var fileDescription = dataObjectFileProvider.GetFileDescription(_dataService, obj, dataObjectPropName); + _removingFileDescriptions.Add(fileDescription); + } + + // Сбрасываем файловое свойство в изменяемом объекте данных. + Information.SetPropValueByName(obj, dataObjectPropName, null); + } + else + { + // Файловое свойство было изменено, но не сброшено. + // Если в метаданных файла присутствует FileUploadKey значит файл был загружен на сервер, + // но еще не был ассоциирован с объектом данных, и это нужно сделать. + FileDescription fileDescription = FileDescription.FromJson(serializedFileDescription); + fileDescription.FilePropertyType = dataObjectPropertyType; + if (!(string.IsNullOrEmpty(fileDescription.FileUploadKey) || string.IsNullOrEmpty(fileDescription.FileName))) + { + var fileProperty = dataObjectFileProvider.GetFileProperty(_dataService, fileDescription); + Information.SetPropValueByName(obj, dataObjectPropName, fileProperty); + + // Файловое свойство типа File хранит данные ассоциированного файла прямо в БД, + // поэтому после успешного сохранения объекта данных, оссоциированный с ним файл должен быть удален из файловой системы. + // Для этого запоминаем описание загруженного файла. + if (dataObjectPropertyType == typeof(File)) + { + _removingFileDescriptions.Add(fileDescription); + } + } + } + } + else + { + // Преобразование типов для примитивных свойств. + if (value is DateTimeOffset) + value = ((DateTimeOffset)value).UtcDateTime; + if (value is EdmEnumObject) + value = ((EdmEnumObject)value).Value; + + Information.SetPropValueByName(obj, dataObjectPropName, value); + } + } + } + } + + if (!string.IsNullOrEmpty(agregatorPropertyName)) + { + DataObject agregator = (DataObject)Information.GetPropValueByName(obj, agregatorPropertyName); + + if (agregator != null) + { + AddObjectToUpdate(dObjs, agregator, endObject); + } + } + + return obj; + } + } +} From c9805d9b573a98641e7762187edc1cda16602406 Mon Sep 17 00:00:00 2001 From: Ilya Naidanov Date: Mon, 11 Mar 2024 10:42:54 +0500 Subject: [PATCH 73/77] =?UTF-8?q?=D0=9C=D0=B5=D0=B4=D0=B2=D0=B5=D0=B4?= =?UTF-8?q?=D1=8C=20LF=20->=20CRLF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\264\320\262\320\265\320\264\321\214.cs" | 1700 ++++++++--------- 1 file changed, 850 insertions(+), 850 deletions(-) diff --git "a/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" "b/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" index f16467de..854f42cf 100644 --- "a/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" +++ "b/Tests/Objects/\320\234\320\265\320\264\320\262\320\265\320\264\321\214.cs" @@ -1,850 +1,850 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace NewPlatform.Flexberry.ORM.ODataService.Tests -{ - using ICSSoft.STORMNET.Business; - using ICSSoft.STORMNET; - using ICSSoft.STORMNET.Business.Audit; - using ICSSoft.STORMNET.Business.Audit.Objects; - - - // *** Start programmer edit section *** (Using statements) - - // *** End programmer edit section *** (Using statements) - - - /// - /// Медведь - ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. - /// - // *** Start programmer edit section *** (Медведь CustomAttributes) - - // *** End programmer edit section *** (Медведь CustomAttributes) - [BusinessServer("NewPlatform.Flexberry.ORM.ODataService.Tests.BearBS, NewPlatform.Flexberry.ORM.OD" + - "ataService.Tests.BusinessServers", ICSSoft.STORMNET.Business.DataServiceObjectEvents.OnAllEvents)] - [AutoAltered()] - [AccessType(ICSSoft.STORMNET.AccessType.none)] - [View("LoadTestView", new string[] { - "ЛесОбитания", - "ЛесОбитания.Заповедник", - "Мама", - "Мама.ЦветГлаз", - "Вес"})] - [AssociatedDetailViewAttribute("LoadTestView", "Берлога", "LoadTestView", true, "", "", true, new string[] { - ""})] - [View("OrderNumberTest", new string[] { - "ПорядковыйНомер", - "ЛесОбитания"})] - [View("МедведьE", new string[] { - "ПорядковыйНомер as \'Порядковый номер\'", - "Вес as \'Вес\'", - "ЦветГлаз as \'Цвет глаз\'", - "Пол as \'Пол\'", - "ДатаРождения as \'Дата рождения\'", - "Мама as \'Мама\'", - "Мама.ЦветГлаз as \'Цвет глаз\'", - "Мама.Вес", - "Папа as \'Папа\'", - "Папа.ЦветГлаз as \'Цвет глаз\'", - "Папа.Вес", - "ЛесОбитания as \'Лес обитания\'", - "ЛесОбитания.Название as \'Название\'", - "ПолеБС", - "СтранаРождения", - "СтранаРождения.Название"})] - [AssociatedDetailViewAttribute("МедведьE", "Берлога", "БерлогаE", true, "", "Берлога", true, new string[] { - ""})] - [View("МедведьL", new string[] { - "ПорядковыйНомер as \'Порядковый номер\'", - "Вес as \'Вес\'", - "ЦветГлаз as \'Цвет глаз\'", - "Пол as \'Пол\'", - "ДатаРождения as \'Дата рождения\'", - "Мама.ЦветГлаз as \'Цвет глаз\'", - "Папа.ЦветГлаз as \'Цвет глаз\'", - "ЛесОбитания.Название as \'Название\'"})] - [View("МедведьShort", new string[] { - "ПорядковыйНомер as \'Порядковый номер\'"})] - [View("МедведьUpdateView", new string[] { - "ПорядковыйНомер as \'Порядковый номер\'", - "Вес as \'Вес\'", - "ЦветГлаз as \'Цвет глаз\'", - "Пол as \'Пол\'", - "ДатаРождения as \'Дата рождения\'", - "ПолеБС"})] - [View("МедведьСДелейломИВычислимымСвойством", new string[] { - "ПорядковыйНомер as \'Порядковый номер\'", - "Вес as \'Вес\'", - "ЦветГлаз as \'Цвет глаз\'", - "Пол as \'Пол\'", - "ДатаРождения as \'Дата рождения\'", - "Мама as \'Мама\'", - "Мама.ЦветГлаз as \'Цвет глаз\'", - "Папа as \'Папа\'", - "Папа.ЦветГлаз as \'Цвет глаз\'", - "ЛесОбитания as \'Лес обитания\'", - "ЛесОбитания.Название as \'Название\'", - "МедведьСтрокой"})] - [AssociatedDetailViewAttribute("МедведьСДелейломИВычислимымСвойством", "Берлога", "БерлогаE", true, "", "Берлога", true, new string[] { - ""})] - public class Медведь : ICSSoft.STORMNET.DataObject, IDataObjectWithAuditFields - { - - private int fВес; - - private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fДатаРождения; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.tПол fПол; - - private string fПолеБС; - - private int fПорядковыйНомер; - - private string fЦветГлаз; - - private System.Nullable fCreateTime; - - private string fCreator; - - private string fEditor; - - private System.Nullable fEditTime; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Лес fЛесОбитания; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fМама; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fПапа; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.Страна fСтранаРождения; - - private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога fБерлога; - - // *** Start programmer edit section *** (Медведь CustomMembers) - - // *** End programmer edit section *** (Медведь CustomMembers) - - - /// - /// Вес. - /// - // *** Start programmer edit section *** (Медведь.Вес CustomAttributes) - - // *** End programmer edit section *** (Медведь.Вес CustomAttributes) - public virtual int Вес - { - get - { - // *** Start programmer edit section *** (Медведь.Вес Get start) - - // *** End programmer edit section *** (Медведь.Вес Get start) - int result = this.fВес; - // *** Start programmer edit section *** (Медведь.Вес Get end) - - // *** End programmer edit section *** (Медведь.Вес Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Вес Set start) - - // *** End programmer edit section *** (Медведь.Вес Set start) - this.fВес = value; - // *** Start programmer edit section *** (Медведь.Вес Set end) - - // *** End programmer edit section *** (Медведь.Вес Set end) - } - } - - /// - /// ВычислимоеПоле. - /// - // *** Start programmer edit section *** (Медведь.ВычислимоеПоле CustomAttributes) - - // *** End programmer edit section *** (Медведь.ВычислимоеПоле CustomAttributes) - [ICSSoft.STORMNET.NotStored()] - [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "@ПорядковыйНомер@ + @Вес@")] - public virtual int ВычислимоеПоле - { - get - { - // *** Start programmer edit section *** (Медведь.ВычислимоеПоле Get) - return 0; - // *** End programmer edit section *** (Медведь.ВычислимоеПоле Get) - } - set - { - // *** Start programmer edit section *** (Медведь.ВычислимоеПоле Set) - - // *** End programmer edit section *** (Медведь.ВычислимоеПоле Set) - } - } - - /// - /// ДатаРождения. - /// - // *** Start programmer edit section *** (Медведь.ДатаРождения CustomAttributes) - - // *** End programmer edit section *** (Медведь.ДатаРождения CustomAttributes) - public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаРождения - { - get - { - // *** Start programmer edit section *** (Медведь.ДатаРождения Get start) - - // *** End programmer edit section *** (Медведь.ДатаРождения Get start) - ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fДатаРождения; - // *** Start programmer edit section *** (Медведь.ДатаРождения Get end) - - // *** End programmer edit section *** (Медведь.ДатаРождения Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.ДатаРождения Set start) - - // *** End programmer edit section *** (Медведь.ДатаРождения Set start) - this.fДатаРождения = value; - // *** Start programmer edit section *** (Медведь.ДатаРождения Set end) - - // *** End programmer edit section *** (Медведь.ДатаРождения Set end) - } - } - - /// - /// МедведьСтрокой. - /// - // *** Start programmer edit section *** (Медведь.МедведьСтрокой CustomAttributes) - - // *** End programmer edit section *** (Медведь.МедведьСтрокой CustomAttributes) - [ICSSoft.STORMNET.NotStored()] - [StrLen(255)] - [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "\'ПорядковыйНомер:\' + @ПорядковыйНомер@ + \", Цвет глаз мамы:\" + isnull(@Мама.ЦветГ" + - "лаз@,\'\')")] - [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.PostgresDataService), "\'ПорядковыйНомер:\' || @ПорядковыйНомер@ || \", Цвет глаз мамы:\" || coalesce(@Мама.ЦветГ" + - "лаз@,\'\')")] - public virtual string МедведьСтрокой - { - get - { - // *** Start programmer edit section *** (Медведь.МедведьСтрокой Get) - return null; - // *** End programmer edit section *** (Медведь.МедведьСтрокой Get) - } - set - { - // *** Start programmer edit section *** (Медведь.МедведьСтрокой Set) - - // *** End programmer edit section *** (Медведь.МедведьСтрокой Set) - } - } - - /// - /// Пол. - /// - // *** Start programmer edit section *** (Медведь.Пол CustomAttributes) - - // *** End programmer edit section *** (Медведь.Пол CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.tПол Пол - { - get - { - // *** Start programmer edit section *** (Медведь.Пол Get start) - - // *** End programmer edit section *** (Медведь.Пол Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.tПол result = this.fПол; - // *** Start programmer edit section *** (Медведь.Пол Get end) - - // *** End programmer edit section *** (Медведь.Пол Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Пол Set start) - - // *** End programmer edit section *** (Медведь.Пол Set start) - this.fПол = value; - // *** Start programmer edit section *** (Медведь.Пол Set end) - - // *** End programmer edit section *** (Медведь.Пол Set end) - } - } - - /// - /// ПолеБС. - /// - // *** Start programmer edit section *** (Медведь.ПолеБС CustomAttributes) - - // *** End programmer edit section *** (Медведь.ПолеБС CustomAttributes) - [StrLen(255)] - public virtual string ПолеБС - { - get - { - // *** Start programmer edit section *** (Медведь.ПолеБС Get start) - - // *** End programmer edit section *** (Медведь.ПолеБС Get start) - string result = this.fПолеБС; - // *** Start programmer edit section *** (Медведь.ПолеБС Get end) - - // *** End programmer edit section *** (Медведь.ПолеБС Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.ПолеБС Set start) - - // *** End programmer edit section *** (Медведь.ПолеБС Set start) - this.fПолеБС = value; - // *** Start programmer edit section *** (Медведь.ПолеБС Set end) - - // *** End programmer edit section *** (Медведь.ПолеБС Set end) - } - } - - /// - /// ПорядковыйНомер. - /// - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер CustomAttributes) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер CustomAttributes) - public virtual int ПорядковыйНомер - { - get - { - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Get start) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер Get start) - int result = this.fПорядковыйНомер; - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Get end) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Set start) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер Set start) - this.fПорядковыйНомер = value; - // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Set end) - - // *** End programmer edit section *** (Медведь.ПорядковыйНомер Set end) - } - } - - /// - /// ЦветГлаз. - /// - // *** Start programmer edit section *** (Медведь.ЦветГлаз CustomAttributes) - - // *** End programmer edit section *** (Медведь.ЦветГлаз CustomAttributes) - [StrLen(255)] - public virtual string ЦветГлаз - { - get - { - // *** Start programmer edit section *** (Медведь.ЦветГлаз Get start) - - // *** End programmer edit section *** (Медведь.ЦветГлаз Get start) - string result = this.fЦветГлаз; - // *** Start programmer edit section *** (Медведь.ЦветГлаз Get end) - - // *** End programmer edit section *** (Медведь.ЦветГлаз Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.ЦветГлаз Set start) - - // *** End programmer edit section *** (Медведь.ЦветГлаз Set start) - this.fЦветГлаз = value; - // *** Start programmer edit section *** (Медведь.ЦветГлаз Set end) - - // *** End programmer edit section *** (Медведь.ЦветГлаз Set end) - } - } - - /// - /// Время создания объекта. - /// - // *** Start programmer edit section *** (Медведь.CreateTime CustomAttributes) - - // *** End programmer edit section *** (Медведь.CreateTime CustomAttributes) - public virtual System.Nullable CreateTime - { - get - { - // *** Start programmer edit section *** (Медведь.CreateTime Get start) - - // *** End programmer edit section *** (Медведь.CreateTime Get start) - System.Nullable result = this.fCreateTime; - // *** Start programmer edit section *** (Медведь.CreateTime Get end) - - // *** End programmer edit section *** (Медведь.CreateTime Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.CreateTime Set start) - - // *** End programmer edit section *** (Медведь.CreateTime Set start) - this.fCreateTime = value; - // *** Start programmer edit section *** (Медведь.CreateTime Set end) - - // *** End programmer edit section *** (Медведь.CreateTime Set end) - } - } - - /// - /// Создатель объекта. - /// - // *** Start programmer edit section *** (Медведь.Creator CustomAttributes) - - // *** End programmer edit section *** (Медведь.Creator CustomAttributes) - [StrLen(255)] - public virtual string Creator - { - get - { - // *** Start programmer edit section *** (Медведь.Creator Get start) - - // *** End programmer edit section *** (Медведь.Creator Get start) - string result = this.fCreator; - // *** Start programmer edit section *** (Медведь.Creator Get end) - - // *** End programmer edit section *** (Медведь.Creator Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Creator Set start) - - // *** End programmer edit section *** (Медведь.Creator Set start) - this.fCreator = value; - // *** Start programmer edit section *** (Медведь.Creator Set end) - - // *** End programmer edit section *** (Медведь.Creator Set end) - } - } - - /// - /// Последний редактор объекта. - /// - // *** Start programmer edit section *** (Медведь.Editor CustomAttributes) - - // *** End programmer edit section *** (Медведь.Editor CustomAttributes) - [StrLen(255)] - public virtual string Editor - { - get - { - // *** Start programmer edit section *** (Медведь.Editor Get start) - - // *** End programmer edit section *** (Медведь.Editor Get start) - string result = this.fEditor; - // *** Start programmer edit section *** (Медведь.Editor Get end) - - // *** End programmer edit section *** (Медведь.Editor Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Editor Set start) - - // *** End programmer edit section *** (Медведь.Editor Set start) - this.fEditor = value; - // *** Start programmer edit section *** (Медведь.Editor Set end) - - // *** End programmer edit section *** (Медведь.Editor Set end) - } - } - - /// - /// Время последнего редактирования объекта. - /// - // *** Start programmer edit section *** (Медведь.EditTime CustomAttributes) - - // *** End programmer edit section *** (Медведь.EditTime CustomAttributes) - public virtual System.Nullable EditTime - { - get - { - // *** Start programmer edit section *** (Медведь.EditTime Get start) - - // *** End programmer edit section *** (Медведь.EditTime Get start) - System.Nullable result = this.fEditTime; - // *** Start programmer edit section *** (Медведь.EditTime Get end) - - // *** End programmer edit section *** (Медведь.EditTime Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.EditTime Set start) - - // *** End programmer edit section *** (Медведь.EditTime Set start) - this.fEditTime = value; - // *** Start programmer edit section *** (Медведь.EditTime Set end) - - // *** End programmer edit section *** (Медведь.EditTime Set end) - } - } - - /// - /// Медведь - ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. - /// - // *** Start programmer edit section *** (Медведь.ЛесОбитания CustomAttributes) - - // *** End programmer edit section *** (Медведь.ЛесОбитания CustomAttributes) - [PropertyStorage(new string[] { - "ЛесОбитания"})] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Лес ЛесОбитания - { - get - { - // *** Start programmer edit section *** (Медведь.ЛесОбитания Get start) - - // *** End programmer edit section *** (Медведь.ЛесОбитания Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Лес result = this.fЛесОбитания; - // *** Start programmer edit section *** (Медведь.ЛесОбитания Get end) - - // *** End programmer edit section *** (Медведь.ЛесОбитания Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.ЛесОбитания Set start) - - // *** End programmer edit section *** (Медведь.ЛесОбитания Set start) - this.fЛесОбитания = value; - // *** Start programmer edit section *** (Медведь.ЛесОбитания Set end) - - // *** End programmer edit section *** (Медведь.ЛесОбитания Set end) - } - } - - /// - /// Медведь - ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. - /// - // *** Start programmer edit section *** (Медведь.Мама CustomAttributes) - - // *** End programmer edit section *** (Медведь.Мама CustomAttributes) - [PropertyStorage(new string[] { - "Мама"})] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь Мама - { - get - { - // *** Start programmer edit section *** (Медведь.Мама Get start) - - // *** End programmer edit section *** (Медведь.Мама Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь result = this.fМама; - // *** Start programmer edit section *** (Медведь.Мама Get end) - - // *** End programmer edit section *** (Медведь.Мама Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Мама Set start) - - // *** End programmer edit section *** (Медведь.Мама Set start) - this.fМама = value; - // *** Start programmer edit section *** (Медведь.Мама Set end) - - // *** End programmer edit section *** (Медведь.Мама Set end) - } - } - - /// - /// Медведь - ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. - /// - // *** Start programmer edit section *** (Медведь.Папа CustomAttributes) - - // *** End programmer edit section *** (Медведь.Папа CustomAttributes) - [PropertyStorage(new string[] { - "Папа"})] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь Папа - { - get - { - // *** Start programmer edit section *** (Медведь.Папа Get start) - - // *** End programmer edit section *** (Медведь.Папа Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь result = this.fПапа; - // *** Start programmer edit section *** (Медведь.Папа Get end) - - // *** End programmer edit section *** (Медведь.Папа Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Папа Set start) - - // *** End programmer edit section *** (Медведь.Папа Set start) - this.fПапа = value; - // *** Start programmer edit section *** (Медведь.Папа Set end) - - // *** End programmer edit section *** (Медведь.Папа Set end) - } - } - - /// - /// Медведь - ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. - /// - // *** Start programmer edit section *** (Медведь.СтранаРождения CustomAttributes) - - // *** End programmer edit section *** (Медведь.СтранаРождения CustomAttributes) - [PropertyStorage(new string[] { - "Страна"})] - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Страна СтранаРождения - { - get - { - // *** Start programmer edit section *** (Медведь.СтранаРождения Get start) - - // *** End programmer edit section *** (Медведь.СтранаРождения Get start) - NewPlatform.Flexberry.ORM.ODataService.Tests.Страна result = this.fСтранаРождения; - // *** Start programmer edit section *** (Медведь.СтранаРождения Get end) - - // *** End programmer edit section *** (Медведь.СтранаРождения Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.СтранаРождения Set start) - - // *** End programmer edit section *** (Медведь.СтранаРождения Set start) - this.fСтранаРождения = value; - // *** Start programmer edit section *** (Медведь.СтранаРождения Set end) - - // *** End programmer edit section *** (Медведь.СтранаРождения Set end) - } - } - - /// - /// Медведь - ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. - /// - // *** Start programmer edit section *** (Медведь.Берлога CustomAttributes) - - // *** End programmer edit section *** (Медведь.Берлога CustomAttributes) - public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога Берлога - { - get - { - // *** Start programmer edit section *** (Медведь.Берлога Get start) - - // *** End programmer edit section *** (Медведь.Берлога Get start) - if ((this.fБерлога == null)) - { - this.fБерлога = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога(this); - } - NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога result = this.fБерлога; - // *** Start programmer edit section *** (Медведь.Берлога Get end) - - // *** End programmer edit section *** (Медведь.Берлога Get end) - return result; - } - set - { - // *** Start programmer edit section *** (Медведь.Берлога Set start) - - // *** End programmer edit section *** (Медведь.Берлога Set start) - this.fБерлога = value; - // *** Start programmer edit section *** (Медведь.Берлога Set end) - - // *** End programmer edit section *** (Медведь.Берлога Set end) - } - } - - /// - /// Class views container. - /// - public class Views - { - - /// - /// Представление для работы тестов на загрузку объектов. - /// - public static ICSSoft.STORMNET.View LoadTestView - { - get - { - return ICSSoft.STORMNET.Information.GetView("LoadTestView", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - - /// - /// Представление для работы теста по использованию порядкового номера. - /// - public static ICSSoft.STORMNET.View OrderNumberTest - { - get - { - return ICSSoft.STORMNET.Information.GetView("OrderNumberTest", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - - /// - /// "МедведьE" view. - /// - public static ICSSoft.STORMNET.View МедведьE - { - get - { - return ICSSoft.STORMNET.Information.GetView("МедведьE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - - /// - /// "МедведьL" view. - /// - public static ICSSoft.STORMNET.View МедведьL - { - get - { - return ICSSoft.STORMNET.Information.GetView("МедведьL", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - - /// - /// "МедведьShort" view. - /// - public static ICSSoft.STORMNET.View МедведьShort - { - get - { - return ICSSoft.STORMNET.Information.GetView("МедведьShort", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - - /// - /// Представление для тестов UpdateView (без мастеров и детейлов). - /// - public static ICSSoft.STORMNET.View МедведьUpdateView - { - get - { - return ICSSoft.STORMNET.Information.GetView("МедведьUpdateView", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - - /// - /// "МедведьСДелейломИВычислимымСвойством" view. - /// - public static ICSSoft.STORMNET.View МедведьСДелейломИВычислимымСвойством - { - get - { - return ICSSoft.STORMNET.Information.GetView("МедведьСДелейломИВычислимымСвойством", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); - } - } - } - - /// - /// Audit class settings. - /// - public class AuditSettings - { - - /// - /// Включён ли аудит для класса. - /// - public static bool AuditEnabled = true; - - /// - /// Использовать имя представления для аудита по умолчанию. - /// - public static bool UseDefaultView = true; - - /// - /// Включён ли аудит операции чтения. - /// - public static bool SelectAudit = true; - - /// - /// Имя представления для аудирования операции чтения. - /// - public static string SelectAuditViewName = "AuditView"; - - /// - /// Включён ли аудит операции создания. - /// - public static bool InsertAudit = true; - - /// - /// Имя представления для аудирования операции создания. - /// - public static string InsertAuditViewName = "AuditView"; - - /// - /// Включён ли аудит операции изменения. - /// - public static bool UpdateAudit = true; - - /// - /// Имя представления для аудирования операции изменения. - /// - public static string UpdateAuditViewName = "AuditView"; - - /// - /// Включён ли аудит операции удаления. - /// - public static bool DeleteAudit = true; - - /// - /// Имя представления для аудирования операции удаления. - /// - public static string DeleteAuditViewName = "AuditView"; - - /// - /// Путь к форме просмотра результатов аудита. - /// - public static string FormUrl = ""; - - /// - /// Режим записи данных аудита (синхронный или асинхронный). - /// - public static ICSSoft.STORMNET.Business.Audit.Objects.tWriteMode WriteMode = ICSSoft.STORMNET.Business.Audit.Objects.tWriteMode.Synchronous; - - /// - /// Максимальная длина сохраняемого значения поля (если 0, то строка обрезаться не будет). - /// - public static int PrunningLength = 0; - - /// - /// Показывать ли пользователям в изменениях первичные ключи. - /// - public static bool ShowPrimaryKey = false; - - /// - /// Сохранять ли старое значение. - /// - public static bool KeepOldValue = true; - - /// - /// Сжимать ли сохраняемые значения. - /// - public static bool Compress = false; - - /// - /// Сохранять ли все значения атрибутов, а не только изменяемые. - /// - public static bool KeepAllValues = false; - } - } -} - +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NewPlatform.Flexberry.ORM.ODataService.Tests +{ + using ICSSoft.STORMNET.Business; + using ICSSoft.STORMNET; + using ICSSoft.STORMNET.Business.Audit; + using ICSSoft.STORMNET.Business.Audit.Objects; + + + // *** Start programmer edit section *** (Using statements) + + // *** End programmer edit section *** (Using statements) + + + /// + /// Медведь + ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. + /// + // *** Start programmer edit section *** (Медведь CustomAttributes) + + // *** End programmer edit section *** (Медведь CustomAttributes) + [BusinessServer("NewPlatform.Flexberry.ORM.ODataService.Tests.BearBS, NewPlatform.Flexberry.ORM.OD" + + "ataService.Tests.BusinessServers", ICSSoft.STORMNET.Business.DataServiceObjectEvents.OnAllEvents)] + [AutoAltered()] + [AccessType(ICSSoft.STORMNET.AccessType.none)] + [View("LoadTestView", new string[] { + "ЛесОбитания", + "ЛесОбитания.Заповедник", + "Мама", + "Мама.ЦветГлаз", + "Вес"})] + [AssociatedDetailViewAttribute("LoadTestView", "Берлога", "LoadTestView", true, "", "", true, new string[] { + ""})] + [View("OrderNumberTest", new string[] { + "ПорядковыйНомер", + "ЛесОбитания"})] + [View("МедведьE", new string[] { + "ПорядковыйНомер as \'Порядковый номер\'", + "Вес as \'Вес\'", + "ЦветГлаз as \'Цвет глаз\'", + "Пол as \'Пол\'", + "ДатаРождения as \'Дата рождения\'", + "Мама as \'Мама\'", + "Мама.ЦветГлаз as \'Цвет глаз\'", + "Мама.Вес", + "Папа as \'Папа\'", + "Папа.ЦветГлаз as \'Цвет глаз\'", + "Папа.Вес", + "ЛесОбитания as \'Лес обитания\'", + "ЛесОбитания.Название as \'Название\'", + "ПолеБС", + "СтранаРождения", + "СтранаРождения.Название"})] + [AssociatedDetailViewAttribute("МедведьE", "Берлога", "БерлогаE", true, "", "Берлога", true, new string[] { + ""})] + [View("МедведьL", new string[] { + "ПорядковыйНомер as \'Порядковый номер\'", + "Вес as \'Вес\'", + "ЦветГлаз as \'Цвет глаз\'", + "Пол as \'Пол\'", + "ДатаРождения as \'Дата рождения\'", + "Мама.ЦветГлаз as \'Цвет глаз\'", + "Папа.ЦветГлаз as \'Цвет глаз\'", + "ЛесОбитания.Название as \'Название\'"})] + [View("МедведьShort", new string[] { + "ПорядковыйНомер as \'Порядковый номер\'"})] + [View("МедведьUpdateView", new string[] { + "ПорядковыйНомер as \'Порядковый номер\'", + "Вес as \'Вес\'", + "ЦветГлаз as \'Цвет глаз\'", + "Пол as \'Пол\'", + "ДатаРождения as \'Дата рождения\'", + "ПолеБС"})] + [View("МедведьСДелейломИВычислимымСвойством", new string[] { + "ПорядковыйНомер as \'Порядковый номер\'", + "Вес as \'Вес\'", + "ЦветГлаз as \'Цвет глаз\'", + "Пол as \'Пол\'", + "ДатаРождения as \'Дата рождения\'", + "Мама as \'Мама\'", + "Мама.ЦветГлаз as \'Цвет глаз\'", + "Папа as \'Папа\'", + "Папа.ЦветГлаз as \'Цвет глаз\'", + "ЛесОбитания as \'Лес обитания\'", + "ЛесОбитания.Название as \'Название\'", + "МедведьСтрокой"})] + [AssociatedDetailViewAttribute("МедведьСДелейломИВычислимымСвойством", "Берлога", "БерлогаE", true, "", "Берлога", true, new string[] { + ""})] + public class Медведь : ICSSoft.STORMNET.DataObject, IDataObjectWithAuditFields + { + + private int fВес; + + private ICSSoft.STORMNET.UserDataTypes.NullableDateTime fДатаРождения; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.tПол fПол; + + private string fПолеБС; + + private int fПорядковыйНомер; + + private string fЦветГлаз; + + private System.Nullable fCreateTime; + + private string fCreator; + + private string fEditor; + + private System.Nullable fEditTime; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Лес fЛесОбитания; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fМама; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь fПапа; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.Страна fСтранаРождения; + + private NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога fБерлога; + + // *** Start programmer edit section *** (Медведь CustomMembers) + + // *** End programmer edit section *** (Медведь CustomMembers) + + + /// + /// Вес. + /// + // *** Start programmer edit section *** (Медведь.Вес CustomAttributes) + + // *** End programmer edit section *** (Медведь.Вес CustomAttributes) + public virtual int Вес + { + get + { + // *** Start programmer edit section *** (Медведь.Вес Get start) + + // *** End programmer edit section *** (Медведь.Вес Get start) + int result = this.fВес; + // *** Start programmer edit section *** (Медведь.Вес Get end) + + // *** End programmer edit section *** (Медведь.Вес Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Вес Set start) + + // *** End programmer edit section *** (Медведь.Вес Set start) + this.fВес = value; + // *** Start programmer edit section *** (Медведь.Вес Set end) + + // *** End programmer edit section *** (Медведь.Вес Set end) + } + } + + /// + /// ВычислимоеПоле. + /// + // *** Start programmer edit section *** (Медведь.ВычислимоеПоле CustomAttributes) + + // *** End programmer edit section *** (Медведь.ВычислимоеПоле CustomAttributes) + [ICSSoft.STORMNET.NotStored()] + [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "@ПорядковыйНомер@ + @Вес@")] + public virtual int ВычислимоеПоле + { + get + { + // *** Start programmer edit section *** (Медведь.ВычислимоеПоле Get) + return 0; + // *** End programmer edit section *** (Медведь.ВычислимоеПоле Get) + } + set + { + // *** Start programmer edit section *** (Медведь.ВычислимоеПоле Set) + + // *** End programmer edit section *** (Медведь.ВычислимоеПоле Set) + } + } + + /// + /// ДатаРождения. + /// + // *** Start programmer edit section *** (Медведь.ДатаРождения CustomAttributes) + + // *** End programmer edit section *** (Медведь.ДатаРождения CustomAttributes) + public virtual ICSSoft.STORMNET.UserDataTypes.NullableDateTime ДатаРождения + { + get + { + // *** Start programmer edit section *** (Медведь.ДатаРождения Get start) + + // *** End programmer edit section *** (Медведь.ДатаРождения Get start) + ICSSoft.STORMNET.UserDataTypes.NullableDateTime result = this.fДатаРождения; + // *** Start programmer edit section *** (Медведь.ДатаРождения Get end) + + // *** End programmer edit section *** (Медведь.ДатаРождения Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.ДатаРождения Set start) + + // *** End programmer edit section *** (Медведь.ДатаРождения Set start) + this.fДатаРождения = value; + // *** Start programmer edit section *** (Медведь.ДатаРождения Set end) + + // *** End programmer edit section *** (Медведь.ДатаРождения Set end) + } + } + + /// + /// МедведьСтрокой. + /// + // *** Start programmer edit section *** (Медведь.МедведьСтрокой CustomAttributes) + + // *** End programmer edit section *** (Медведь.МедведьСтрокой CustomAttributes) + [ICSSoft.STORMNET.NotStored()] + [StrLen(255)] + [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.MSSQLDataService), "\'ПорядковыйНомер:\' + @ПорядковыйНомер@ + \", Цвет глаз мамы:\" + isnull(@Мама.ЦветГ" + + "лаз@,\'\')")] + [DataServiceExpression(typeof(ICSSoft.STORMNET.Business.PostgresDataService), "\'ПорядковыйНомер:\' || @ПорядковыйНомер@ || \", Цвет глаз мамы:\" || coalesce(@Мама.ЦветГ" + + "лаз@,\'\')")] + public virtual string МедведьСтрокой + { + get + { + // *** Start programmer edit section *** (Медведь.МедведьСтрокой Get) + return null; + // *** End programmer edit section *** (Медведь.МедведьСтрокой Get) + } + set + { + // *** Start programmer edit section *** (Медведь.МедведьСтрокой Set) + + // *** End programmer edit section *** (Медведь.МедведьСтрокой Set) + } + } + + /// + /// Пол. + /// + // *** Start programmer edit section *** (Медведь.Пол CustomAttributes) + + // *** End programmer edit section *** (Медведь.Пол CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.tПол Пол + { + get + { + // *** Start programmer edit section *** (Медведь.Пол Get start) + + // *** End programmer edit section *** (Медведь.Пол Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.tПол result = this.fПол; + // *** Start programmer edit section *** (Медведь.Пол Get end) + + // *** End programmer edit section *** (Медведь.Пол Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Пол Set start) + + // *** End programmer edit section *** (Медведь.Пол Set start) + this.fПол = value; + // *** Start programmer edit section *** (Медведь.Пол Set end) + + // *** End programmer edit section *** (Медведь.Пол Set end) + } + } + + /// + /// ПолеБС. + /// + // *** Start programmer edit section *** (Медведь.ПолеБС CustomAttributes) + + // *** End programmer edit section *** (Медведь.ПолеБС CustomAttributes) + [StrLen(255)] + public virtual string ПолеБС + { + get + { + // *** Start programmer edit section *** (Медведь.ПолеБС Get start) + + // *** End programmer edit section *** (Медведь.ПолеБС Get start) + string result = this.fПолеБС; + // *** Start programmer edit section *** (Медведь.ПолеБС Get end) + + // *** End programmer edit section *** (Медведь.ПолеБС Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.ПолеБС Set start) + + // *** End programmer edit section *** (Медведь.ПолеБС Set start) + this.fПолеБС = value; + // *** Start programmer edit section *** (Медведь.ПолеБС Set end) + + // *** End programmer edit section *** (Медведь.ПолеБС Set end) + } + } + + /// + /// ПорядковыйНомер. + /// + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер CustomAttributes) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер CustomAttributes) + public virtual int ПорядковыйНомер + { + get + { + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Get start) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер Get start) + int result = this.fПорядковыйНомер; + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Get end) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Set start) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер Set start) + this.fПорядковыйНомер = value; + // *** Start programmer edit section *** (Медведь.ПорядковыйНомер Set end) + + // *** End programmer edit section *** (Медведь.ПорядковыйНомер Set end) + } + } + + /// + /// ЦветГлаз. + /// + // *** Start programmer edit section *** (Медведь.ЦветГлаз CustomAttributes) + + // *** End programmer edit section *** (Медведь.ЦветГлаз CustomAttributes) + [StrLen(255)] + public virtual string ЦветГлаз + { + get + { + // *** Start programmer edit section *** (Медведь.ЦветГлаз Get start) + + // *** End programmer edit section *** (Медведь.ЦветГлаз Get start) + string result = this.fЦветГлаз; + // *** Start programmer edit section *** (Медведь.ЦветГлаз Get end) + + // *** End programmer edit section *** (Медведь.ЦветГлаз Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.ЦветГлаз Set start) + + // *** End programmer edit section *** (Медведь.ЦветГлаз Set start) + this.fЦветГлаз = value; + // *** Start programmer edit section *** (Медведь.ЦветГлаз Set end) + + // *** End programmer edit section *** (Медведь.ЦветГлаз Set end) + } + } + + /// + /// Время создания объекта. + /// + // *** Start programmer edit section *** (Медведь.CreateTime CustomAttributes) + + // *** End programmer edit section *** (Медведь.CreateTime CustomAttributes) + public virtual System.Nullable CreateTime + { + get + { + // *** Start programmer edit section *** (Медведь.CreateTime Get start) + + // *** End programmer edit section *** (Медведь.CreateTime Get start) + System.Nullable result = this.fCreateTime; + // *** Start programmer edit section *** (Медведь.CreateTime Get end) + + // *** End programmer edit section *** (Медведь.CreateTime Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.CreateTime Set start) + + // *** End programmer edit section *** (Медведь.CreateTime Set start) + this.fCreateTime = value; + // *** Start programmer edit section *** (Медведь.CreateTime Set end) + + // *** End programmer edit section *** (Медведь.CreateTime Set end) + } + } + + /// + /// Создатель объекта. + /// + // *** Start programmer edit section *** (Медведь.Creator CustomAttributes) + + // *** End programmer edit section *** (Медведь.Creator CustomAttributes) + [StrLen(255)] + public virtual string Creator + { + get + { + // *** Start programmer edit section *** (Медведь.Creator Get start) + + // *** End programmer edit section *** (Медведь.Creator Get start) + string result = this.fCreator; + // *** Start programmer edit section *** (Медведь.Creator Get end) + + // *** End programmer edit section *** (Медведь.Creator Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Creator Set start) + + // *** End programmer edit section *** (Медведь.Creator Set start) + this.fCreator = value; + // *** Start programmer edit section *** (Медведь.Creator Set end) + + // *** End programmer edit section *** (Медведь.Creator Set end) + } + } + + /// + /// Последний редактор объекта. + /// + // *** Start programmer edit section *** (Медведь.Editor CustomAttributes) + + // *** End programmer edit section *** (Медведь.Editor CustomAttributes) + [StrLen(255)] + public virtual string Editor + { + get + { + // *** Start programmer edit section *** (Медведь.Editor Get start) + + // *** End programmer edit section *** (Медведь.Editor Get start) + string result = this.fEditor; + // *** Start programmer edit section *** (Медведь.Editor Get end) + + // *** End programmer edit section *** (Медведь.Editor Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Editor Set start) + + // *** End programmer edit section *** (Медведь.Editor Set start) + this.fEditor = value; + // *** Start programmer edit section *** (Медведь.Editor Set end) + + // *** End programmer edit section *** (Медведь.Editor Set end) + } + } + + /// + /// Время последнего редактирования объекта. + /// + // *** Start programmer edit section *** (Медведь.EditTime CustomAttributes) + + // *** End programmer edit section *** (Медведь.EditTime CustomAttributes) + public virtual System.Nullable EditTime + { + get + { + // *** Start programmer edit section *** (Медведь.EditTime Get start) + + // *** End programmer edit section *** (Медведь.EditTime Get start) + System.Nullable result = this.fEditTime; + // *** Start programmer edit section *** (Медведь.EditTime Get end) + + // *** End programmer edit section *** (Медведь.EditTime Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.EditTime Set start) + + // *** End programmer edit section *** (Медведь.EditTime Set start) + this.fEditTime = value; + // *** Start programmer edit section *** (Медведь.EditTime Set end) + + // *** End programmer edit section *** (Медведь.EditTime Set end) + } + } + + /// + /// Медведь + ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. + /// + // *** Start programmer edit section *** (Медведь.ЛесОбитания CustomAttributes) + + // *** End programmer edit section *** (Медведь.ЛесОбитания CustomAttributes) + [PropertyStorage(new string[] { + "ЛесОбитания"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Лес ЛесОбитания + { + get + { + // *** Start programmer edit section *** (Медведь.ЛесОбитания Get start) + + // *** End programmer edit section *** (Медведь.ЛесОбитания Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Лес result = this.fЛесОбитания; + // *** Start programmer edit section *** (Медведь.ЛесОбитания Get end) + + // *** End programmer edit section *** (Медведь.ЛесОбитания Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.ЛесОбитания Set start) + + // *** End programmer edit section *** (Медведь.ЛесОбитания Set start) + this.fЛесОбитания = value; + // *** Start programmer edit section *** (Медведь.ЛесОбитания Set end) + + // *** End programmer edit section *** (Медведь.ЛесОбитания Set end) + } + } + + /// + /// Медведь + ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. + /// + // *** Start programmer edit section *** (Медведь.Мама CustomAttributes) + + // *** End programmer edit section *** (Медведь.Мама CustomAttributes) + [PropertyStorage(new string[] { + "Мама"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь Мама + { + get + { + // *** Start programmer edit section *** (Медведь.Мама Get start) + + // *** End programmer edit section *** (Медведь.Мама Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь result = this.fМама; + // *** Start programmer edit section *** (Медведь.Мама Get end) + + // *** End programmer edit section *** (Медведь.Мама Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Мама Set start) + + // *** End programmer edit section *** (Медведь.Мама Set start) + this.fМама = value; + // *** Start programmer edit section *** (Медведь.Мама Set end) + + // *** End programmer edit section *** (Медведь.Мама Set end) + } + } + + /// + /// Медведь + ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. + /// + // *** Start programmer edit section *** (Медведь.Папа CustomAttributes) + + // *** End programmer edit section *** (Медведь.Папа CustomAttributes) + [PropertyStorage(new string[] { + "Папа"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь Папа + { + get + { + // *** Start programmer edit section *** (Медведь.Папа Get start) + + // *** End programmer edit section *** (Медведь.Папа Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь result = this.fПапа; + // *** Start programmer edit section *** (Медведь.Папа Get end) + + // *** End programmer edit section *** (Медведь.Папа Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Папа Set start) + + // *** End programmer edit section *** (Медведь.Папа Set start) + this.fПапа = value; + // *** Start programmer edit section *** (Медведь.Папа Set end) + + // *** End programmer edit section *** (Медведь.Папа Set end) + } + } + + /// + /// Медведь + ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. + /// + // *** Start programmer edit section *** (Медведь.СтранаРождения CustomAttributes) + + // *** End programmer edit section *** (Медведь.СтранаРождения CustomAttributes) + [PropertyStorage(new string[] { + "Страна"})] + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.Страна СтранаРождения + { + get + { + // *** Start programmer edit section *** (Медведь.СтранаРождения Get start) + + // *** End programmer edit section *** (Медведь.СтранаРождения Get start) + NewPlatform.Flexberry.ORM.ODataService.Tests.Страна result = this.fСтранаРождения; + // *** Start programmer edit section *** (Медведь.СтранаРождения Get end) + + // *** End programmer edit section *** (Медведь.СтранаРождения Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.СтранаРождения Set start) + + // *** End programmer edit section *** (Медведь.СтранаРождения Set start) + this.fСтранаРождения = value; + // *** Start programmer edit section *** (Медведь.СтранаРождения Set end) + + // *** End programmer edit section *** (Медведь.СтранаРождения Set end) + } + } + + /// + /// Медведь + ///Аудит включен для тестирования оффлайн-сервиса аудита в OData. + /// + // *** Start programmer edit section *** (Медведь.Берлога CustomAttributes) + + // *** End programmer edit section *** (Медведь.Берлога CustomAttributes) + public virtual NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога Берлога + { + get + { + // *** Start programmer edit section *** (Медведь.Берлога Get start) + + // *** End programmer edit section *** (Медведь.Берлога Get start) + if ((this.fБерлога == null)) + { + this.fБерлога = new NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога(this); + } + NewPlatform.Flexberry.ORM.ODataService.Tests.DetailArrayOfБерлога result = this.fБерлога; + // *** Start programmer edit section *** (Медведь.Берлога Get end) + + // *** End programmer edit section *** (Медведь.Берлога Get end) + return result; + } + set + { + // *** Start programmer edit section *** (Медведь.Берлога Set start) + + // *** End programmer edit section *** (Медведь.Берлога Set start) + this.fБерлога = value; + // *** Start programmer edit section *** (Медведь.Берлога Set end) + + // *** End programmer edit section *** (Медведь.Берлога Set end) + } + } + + /// + /// Class views container. + /// + public class Views + { + + /// + /// Представление для работы тестов на загрузку объектов. + /// + public static ICSSoft.STORMNET.View LoadTestView + { + get + { + return ICSSoft.STORMNET.Information.GetView("LoadTestView", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + + /// + /// Представление для работы теста по использованию порядкового номера. + /// + public static ICSSoft.STORMNET.View OrderNumberTest + { + get + { + return ICSSoft.STORMNET.Information.GetView("OrderNumberTest", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + + /// + /// "МедведьE" view. + /// + public static ICSSoft.STORMNET.View МедведьE + { + get + { + return ICSSoft.STORMNET.Information.GetView("МедведьE", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + + /// + /// "МедведьL" view. + /// + public static ICSSoft.STORMNET.View МедведьL + { + get + { + return ICSSoft.STORMNET.Information.GetView("МедведьL", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + + /// + /// "МедведьShort" view. + /// + public static ICSSoft.STORMNET.View МедведьShort + { + get + { + return ICSSoft.STORMNET.Information.GetView("МедведьShort", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + + /// + /// Представление для тестов UpdateView (без мастеров и детейлов). + /// + public static ICSSoft.STORMNET.View МедведьUpdateView + { + get + { + return ICSSoft.STORMNET.Information.GetView("МедведьUpdateView", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + + /// + /// "МедведьСДелейломИВычислимымСвойством" view. + /// + public static ICSSoft.STORMNET.View МедведьСДелейломИВычислимымСвойством + { + get + { + return ICSSoft.STORMNET.Information.GetView("МедведьСДелейломИВычислимымСвойством", typeof(NewPlatform.Flexberry.ORM.ODataService.Tests.Медведь)); + } + } + } + + /// + /// Audit class settings. + /// + public class AuditSettings + { + + /// + /// Включён ли аудит для класса. + /// + public static bool AuditEnabled = true; + + /// + /// Использовать имя представления для аудита по умолчанию. + /// + public static bool UseDefaultView = true; + + /// + /// Включён ли аудит операции чтения. + /// + public static bool SelectAudit = true; + + /// + /// Имя представления для аудирования операции чтения. + /// + public static string SelectAuditViewName = "AuditView"; + + /// + /// Включён ли аудит операции создания. + /// + public static bool InsertAudit = true; + + /// + /// Имя представления для аудирования операции создания. + /// + public static string InsertAuditViewName = "AuditView"; + + /// + /// Включён ли аудит операции изменения. + /// + public static bool UpdateAudit = true; + + /// + /// Имя представления для аудирования операции изменения. + /// + public static string UpdateAuditViewName = "AuditView"; + + /// + /// Включён ли аудит операции удаления. + /// + public static bool DeleteAudit = true; + + /// + /// Имя представления для аудирования операции удаления. + /// + public static string DeleteAuditViewName = "AuditView"; + + /// + /// Путь к форме просмотра результатов аудита. + /// + public static string FormUrl = ""; + + /// + /// Режим записи данных аудита (синхронный или асинхронный). + /// + public static ICSSoft.STORMNET.Business.Audit.Objects.tWriteMode WriteMode = ICSSoft.STORMNET.Business.Audit.Objects.tWriteMode.Synchronous; + + /// + /// Максимальная длина сохраняемого значения поля (если 0, то строка обрезаться не будет). + /// + public static int PrunningLength = 0; + + /// + /// Показывать ли пользователям в изменениях первичные ключи. + /// + public static bool ShowPrimaryKey = false; + + /// + /// Сохранять ли старое значение. + /// + public static bool KeepOldValue = true; + + /// + /// Сжимать ли сохраняемые значения. + /// + public static bool Compress = false; + + /// + /// Сохранять ли все значения атрибутов, а не только изменяемые. + /// + public static bool KeepAllValues = false; + } + } +} + From d9e430d065ebcce5632834da155c223f21672936 Mon Sep 17 00:00:00 2001 From: Ilya Naidanov Date: Mon, 11 Mar 2024 12:21:49 +0500 Subject: [PATCH 74/77] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D1=91=D0=BD=20crp=20(UpdateViews)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tform.Flexberry.ORM.ODataService.Tests.crp | 1196 +++++++++-------- 1 file changed, 599 insertions(+), 597 deletions(-) diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp index 3bbb0984..b149d758 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/CodeGen/NewPlatform.Flexberry.ORM.ODataService.Tests.crp @@ -1,1316 +1,1318 @@ - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + + + + + + + + - + - + - + - - + + - + - + - + - - + + - + - + - + - + - - - + + + - + - + - + - + - - + + + - + - + + - + + + + + + + + + + + + + + + - + - + - + - - - - - + - + - - - + + - + - - + - + + - + - + + - - - - + - + - + - + - + - + + + + - + - + - - - + - + - - - - + - + + + - + - + + - - - - - - - - - - + + + + - + + + + - + - + + + + + + - + + + - + + - - + + - + + - + + + + + + + + + + + - - + - + - - + - + - + + - + - + + + - + - - - + - + - - - + - + - - + + + - + - - + - + - + - + - + - + + + + - + - + + + + + + + + + + + + - + - - + - + - + - + - + - + - + - - - - - - - - + + + + - + - + + + + - + - + - - + - + - + - + + + + + + + + - + + - + - + - + - + - + + + - + - - - + - + - - + - + - + - - + - + - - - + - - - + - + - - + - + - + + - - - + - + - + - + + - + - + - + - + - + + + + - + - + + + - + + + - + - - - - + - + - + - + - - - - - + - + - + + + + - + - - + - + - + + + - - - + - + - + - - - - - - - - - - - - - + + - - - - - - - - + - + - - - - - - - + - - + - + - - - - - - + - - - + - + - - - + - + - - - - - - - - - - - - + - - - + - + - - - - - - - - - + - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + + + + + + + + - + + + - + + - + + + + + + + + + + + + + + + + + - + + - + + + + + + + + + + + + - + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + @@ -1330,4 +1332,4 @@ - + \ No newline at end of file From 8d9198d76b0cd452ad553514b409c373b580796f Mon Sep 17 00:00:00 2001 From: tosotova Date: Mon, 11 Mar 2024 16:15:22 +0500 Subject: [PATCH 75/77] Try to fix sonar build --- .github/workflows/sonar.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index b1d7cc37..69fa58e6 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -10,10 +10,10 @@ jobs: name: Build and analyze runs-on: windows-latest steps: - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v1 with: - java-version: 1.11 + java-version: '17' - uses: actions/checkout@v2 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis From 8fcf322b92dcfbd56b30fb5910d3be4328599289 Mon Sep 17 00:00:00 2001 From: tosotova Date: Thu, 21 Mar 2024 13:46:06 +0500 Subject: [PATCH 76/77] Updated Flexberry ORM up to 7.2.0 --- ...wPlatform.Flexberry.ORM.ODataService.Files.csproj | 2 +- ...Platform.Flexberry.ORM.ODataService.WebApi.csproj | 2 +- NewPlatform.Flexberry.ORM.ODataService.nuspec | 12 ++++++------ .../NewPlatform.Flexberry.ORM.ODataService.csproj | 2 +- ...rry.ORM.ODataService.Tests.BusinessServers.csproj | 8 ++++---- ...wPlatform.Flexberry.ORM.ODataService.Tests.csproj | 6 +++--- ...m.Flexberry.ORM.ODataService.Tests.Objects.csproj | 8 ++++---- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj index 10fbaa27..d021e67b 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.Files/NewPlatform.Flexberry.ORM.ODataService.Files.csproj @@ -21,7 +21,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj b/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj index a2f3ab89..a368b93b 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService.WebApi/NewPlatform.Flexberry.ORM.ODataService.WebApi.csproj @@ -22,7 +22,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index 3fcf28b3..c040bd89 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -16,13 +16,13 @@ 1. `updateViews` parameter of `DefaultDataObjectEdmModelBuilder` class. It allows to change update views for data objects (update view is used for loading a data object during OData update requests). Changed - 1. Updated Flexberry ORM up to 7.2.0-beta01. + 1. Updated Flexberry ORM up to 7.2.0. Fixed 1. Fixed loading of object with crushing of already loaded masters. 2. Fixed loading of details. - Copyright New Platform Ltd 2023 + Copyright New Platform Ltd 2024 Flexberry ORM OData ODataService @@ -33,25 +33,25 @@ - + - + - + - + diff --git a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj index dfdf4602..afdca984 100644 --- a/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj +++ b/NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService.csproj @@ -26,7 +26,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj b/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj index d2f0fb4f..865cf740 100644 --- a/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj +++ b/Tests/BusinessServers/NewPlatform.Flexberry.ORM.ODataService.Tests.BusinessServers.csproj @@ -14,10 +14,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj index 610d78f4..3a4ed92a 100644 --- a/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj +++ b/Tests/NewPlatform.Flexberry.ORM.ODataService.Tests/NewPlatform.Flexberry.ORM.ODataService.Tests.csproj @@ -40,9 +40,9 @@ - - - + + + diff --git a/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj b/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj index 8934ab9c..4000fdc1 100644 --- a/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj +++ b/Tests/Objects/NewPlatform.Flexberry.ORM.ODataService.Tests.Objects.csproj @@ -14,10 +14,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive From cc828aa1a5a6bfe34db0fb4221c032805a148c85 Mon Sep 17 00:00:00 2001 From: tosotova Date: Wed, 27 Mar 2024 13:53:24 +0500 Subject: [PATCH 77/77] Updated to version 7.2.0 --- CHANGELOG.md | 11 +++++++++-- NewPlatform.Flexberry.ORM.ODataService.nuspec | 8 ++++---- ...tform.Flexberry.ORM.ODataServiceCore.Common.csproj | 2 +- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a62c646e..4f8b6aa9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,21 @@ # Flexberry ORM ODataService Changelog All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). - ## [Unreleased] +### Added + +### Changed + +### Fixed + +## [7.2.0] - 2024.03.27 + ### Added 1. `updateViews` parameter of `DefaultDataObjectEdmModelBuilder` class. It allows to change update views for data objects (update view is used for loading a data object during OData update requests). ### Changed -1. Updated Flexberry ORM up to 7.2.0-beta01. +1. Updated Flexberry ORM up to 7.2.0. ### Fixed 1. Fixed loading of object with crushing of already loaded masters. diff --git a/NewPlatform.Flexberry.ORM.ODataService.nuspec b/NewPlatform.Flexberry.ORM.ODataService.nuspec index c040bd89..5073fcf5 100644 --- a/NewPlatform.Flexberry.ORM.ODataService.nuspec +++ b/NewPlatform.Flexberry.ORM.ODataService.nuspec @@ -2,7 +2,7 @@ NewPlatform.Flexberry.ORM.ODataService - 7.2.0-beta02 + 7.2.0 Flexberry ORM ODataService New Platform Ltd. New Platform Ltd. @@ -13,9 +13,9 @@ Flexberry ORM OData Service Package. Added - 1. `updateViews` parameter of `DefaultDataObjectEdmModelBuilder` class. It allows to change update views for data objects (update view is used for loading a data object during OData update requests). + 1. `updateViews` parameter of `DefaultDataObjectEdmModelBuilder` class. It allows to change update views for data objects (update view is used for loading a data object during OData update requests). - Changed + Changed 1. Updated Flexberry ORM up to 7.2.0. Fixed @@ -57,7 +57,7 @@ - + diff --git a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj index 39ffb566..4597e80f 100644 --- a/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj +++ b/NewPlatform.Flexberry.ORM.ODataServiceCore.Common/NewPlatform.Flexberry.ORM.ODataServiceCore.Common.csproj @@ -26,7 +26,7 @@ - +