diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor index a115d70ca9..92e50fe064 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor @@ -1,9 +1,9 @@ -@attribute [Route(Urls.ProductPage + "/{Id:guid}/{Name}")] -@attribute [Route("{culture?}" + Urls.ProductPage + "/{Id:guid}/{Name}")] +@attribute [Route(Urls.ProductPage + "/{Id:int}/{Name}")] +@attribute [Route("{culture?}" + Urls.ProductPage + "/{Id:int}/{Name}")] @attribute [AppResponseCache(SharedMaxAge = 3600 * 24)] @inherits AppPageBase -@product?.Name +@Name
diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor.cs index 482a7994b3..165ec2ffb4 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor.cs @@ -9,7 +9,10 @@ public partial class ProductPage protected override string? Subtitle => string.Empty; - [Parameter] public Guid Id { get; set; } + /// + /// + /// + [Parameter] public int Id { get; set; } [Parameter] public string? Name { get; set; } @@ -29,14 +32,9 @@ public partial class ProductPage protected override async Task OnInitAsync() { - await base.OnInitAsync(); - - await LoadProduct(); + await Task.WhenAll(LoadProduct(), LoadSimilarProducts(), LoadSiblingProducts()); - if (InPrerenderSession is false) - { - await Task.WhenAll(LoadSimilarProducts(), LoadSiblingProducts()); - } + await base.OnInitAsync(); } private async Task LoadProduct() @@ -54,13 +52,11 @@ private async Task LoadProduct() private async Task LoadSimilarProducts() { - if (product is null) return; - try { similarProducts = await productViewController .WithQuery(new ODataQuery { Top = 10 }) - .GetSimilar(product.Id, CurrentCancellationToken); + .GetSimilar(Id, CurrentCancellationToken); } finally { @@ -71,13 +67,11 @@ private async Task LoadSimilarProducts() private async Task LoadSiblingProducts() { - if (product is null || product.CategoryId.HasValue is false) return; - try { siblingProducts = await productViewController - .WithQuery(new ODataQuery { Top = 10, Filter = $"{nameof(ProductDto.Id)} ne {product.Id}" }) - .GetSiblings(product.CategoryId.Value, CurrentCancellationToken); + .WithQuery(new ODataQuery { Top = 10 }) + .GetSiblings(Id, CurrentCancellationToken); } finally { diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/.config/dotnet-tools.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/.config/dotnet-tools.json index 124f4d1efb..1176e05f80 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/.config/dotnet-tools.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/.config/dotnet-tools.json @@ -4,7 +4,7 @@ "tools": { "dotnet-ef": { //#if (framework == 'net9.0') - "version": "9.0.1", + "version": "9.0.2", //#else "version": "8.0.12", //#endif diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductController.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductController.cs index 80c4110c7a..5e55364b28 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductController.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductController.cs @@ -78,7 +78,7 @@ public async Task Update(ProductDto dto, CancellationToken cancellat await DbContext.SaveChangesAsync(cancellationToken); - await responseCacheService.PurgeCache("/", $"/product/{dto.Id}/{Uri.EscapeDataString(dto.Name!)}", $"/api/ProductView/Get/{dto.Id}" /*You can also use Url.Action to build urls.*/); + await responseCacheService.PurgeCache("/", $"/product/{dto.ShortId}/{Uri.EscapeDataString(dto.Name!)}", $"/api/ProductView/Get/{dto.ShortId}" /*You can also use Url.Action to build urls.*/); //#if (signalR == true) await PublishDashboardDataChanged(cancellationToken); @@ -99,7 +99,7 @@ public async Task Delete(Guid id, string concurrencyStamp, CancellationToken can await DbContext.SaveChangesAsync(cancellationToken); - await responseCacheService.PurgeCache("/", $"/product/{entityToDelete.Id}/{Uri.EscapeDataString(entityToDelete.Name!)}", $"/api/ProductView/Get/{entityToDelete.Id}" /*You can also use Url.Action to build urls.*/); + await responseCacheService.PurgeCache("/", $"/product/{entityToDelete.ShortId}/{Uri.EscapeDataString(entityToDelete.Name!)}", $"/api/ProductView/Get/{entityToDelete.ShortId}" /*You can also use Url.Action to build urls.*/); //#if (signalR == true) await PublishDashboardDataChanged(cancellationToken); diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs index 20ded50d53..aee679c36e 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs @@ -15,9 +15,9 @@ public IQueryable Get() [HttpGet("{id}")] [AppResponseCache(SharedMaxAge = 3600 * 24 * 7, MaxAge = 60 * 5, UserAgnostic = true)] - public async Task Get(Guid id, CancellationToken cancellationToken) + public async Task Get(int id, CancellationToken cancellationToken) { - var product = await Get().FirstOrDefaultAsync(t => t.Id == id, cancellationToken) + var product = await Get().FirstOrDefaultAsync(t => t.ShortId == id, cancellationToken) ?? throw new ResourceNotFoundException(Localizer[nameof(AppStrings.ProductCouldNotBeFound)]); return product; @@ -26,19 +26,24 @@ public async Task Get(Guid id, CancellationToken cancellationToken) // This method needs to be implemented based on the logic required in each business. [EnableQuery, HttpGet("{id}"), AppResponseCache(MaxAge = 60 * 5, SharedMaxAge = 0, UserAgnostic = true)] - public IQueryable GetSimilar(Guid id) + public IQueryable GetSimilar(int id) { var similarProducts = Get() .OrderBy(p => EF.Functions.Random()) - .Where(p => p.Id != id); + .Where(p => p.ShortId != id); return similarProducts; } [EnableQuery, HttpGet("{id}"), AppResponseCache(MaxAge = 60 * 5, SharedMaxAge = 0, UserAgnostic = true)] - public IQueryable GetSiblings(Guid id) + public async Task> GetSiblings(int id, CancellationToken cancellationToken) { - var siblings = Get().Where(t => t.CategoryId == id); + var categoryId = await DbContext.Products + .Where(p => p.ShortId == id) + .Select(p => p.CategoryId) + .FirstOrDefaultAsync(cancellationToken); + + var siblings = Get().Where(t => t.ShortId != id && t.CategoryId == categoryId); return siblings; } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/AppDbContext.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/AppDbContext.cs index b92dcf19e0..6f11dab968 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/AppDbContext.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/AppDbContext.cs @@ -38,6 +38,18 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); + //#if (IsInsideProjectTemplate == true) + /* + //#endif + //#if (database == "PostgreSQL" || database == "SqlServer") + modelBuilder.HasSequence("ProductShortId") + .StartsAt(10_000) + .IncrementsBy(1); + //#endif + //#if (IsInsideProjectTemplate == true) + */ + //#endif + modelBuilder.ApplyConfigurationsFromAssembly(typeof(AppDbContext).Assembly); ConfigureIdentityTableNames(modelBuilder); diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Configurations/Product/ProductConfiguration.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Configurations/Product/ProductConfiguration.cs index b2d6de7c4d..b45b857262 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Configurations/Product/ProductConfiguration.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Configurations/Product/ProductConfiguration.cs @@ -1,4 +1,5 @@ -using Boilerplate.Server.Api.Models.Products; +//+:cnd:noEmit +using Boilerplate.Server.Api.Models.Products; namespace Boilerplate.Server.Api.Data.Configurations.Identity; @@ -7,40 +8,52 @@ public partial class ProductConfiguration : IEntityTypeConfiguration public void Configure(EntityTypeBuilder builder) { builder.HasIndex(p => p.Name).IsUnique(); + builder.HasIndex(p => p.ShortId).IsUnique(); + + //#if (IsInsideProjectTemplate == true) + /* + //#endif + //#if (database == "PostgreSQL" || database == "SqlServer") + builder.Property(p => p.Number).UseSequence("ProductShortId"); + //#if (IsInsideProjectTemplate == true) + */ + //#endif var defaultConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }; DateTimeOffset baseDate = DateTimeOffset.Parse("2022-07-12", styles: DateTimeStyles.AssumeUniversal); + const int productsCountInEachForLoop = 23; + for (int i = 1; i <= 6; i++) { builder.HasData( - new() { Id = Guid.Parse($"9a59dda2-7b12-4cc1-9658-d2586eef91d{i}"), Name = $"Mustang - {i}", Price = 27155, Description = "The Ford Mustang is ranked #1 in Sports Cars", CreatedOn = baseDate.AddDays(-10), CategoryId = Guid.Parse("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"a42914e2-92da-4f0b-aab0-b9572c9671b{i}"), Name = $"GT - {i}", Price = 500000, Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", CreatedOn = baseDate.AddDays(-15), CategoryId = Guid.Parse("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"f75325c8-a213-470b-ab93-4677ca4caee{i}"), Name = $"Ranger - {i}", Price = 25000, Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", CreatedOn = baseDate.AddDays(-25), CategoryId = Guid.Parse("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"43a82ec1-aab6-445f-83af-a85028417cf{i}"), Name = $"Raptor - {i}", Price = 53205, Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", CreatedOn = baseDate.AddDays(-30), CategoryId = Guid.Parse("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"f01b32bb-eccd-43be-aaf3-3c788a7d755{i}"), Name = $"Maverick - {i}", Price = 22470, Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", CreatedOn = baseDate.AddDays(-35), CategoryId = Guid.Parse("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = defaultConcurrencyStamp }, - - new() { Id = Guid.Parse($"d53bb159-f4f9-493a-b4dc-215fd765ca2{i}"), Name = $"Roadster - {i}", Price = 42800, Description = "A powerful convertible sports car", CreatedOn = baseDate.AddDays(-10), CategoryId = Guid.Parse("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"74bb268f-18cf-45ec-9f2f-30b34b18fb3{i}"), Name = $"Altima - {i}", Price = 24550, Description = "A perfectly adequate family sedan with sharp looks", CreatedOn = baseDate.AddDays(-15), CategoryId = Guid.Parse("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"eb787e1a-7ba8-4708-924b-9f7964fa0f6{i}"), Name = $"GT-R - {i}", Price = 113540, Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", CreatedOn = baseDate.AddDays(-25), CategoryId = Guid.Parse("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"362a6638-0031-485d-825f-e8aeae63a33{i}"), Name = $"Juke - {i}", Price = 28100, Description = "A new smart SUV", CreatedOn = baseDate.AddDays(-35), CategoryId = Guid.Parse("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), ConcurrencyStamp = defaultConcurrencyStamp }, - - new() { Id = Guid.Parse($"8629931e-e26e-4885-b561-e447197d4b6{i}"), Name = $"H247 - {i}", Price = 54950, Description = "Subcompact luxury crossover SUV", CreatedOn = baseDate.AddDays(-10), CategoryId = Guid.Parse("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"a1c1987d-ee6c-41ad-9647-18de4504303{i}"), Name = $"V297 - {i}", Price = 103360, Description = "Battery-electric full-size luxury liftback", CreatedOn = baseDate.AddDays(-15), CategoryId = Guid.Parse("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"59eea437-bdf2-4c11-b262-06643b25328{i}"), Name = $"R50 - {i}", Price = 2000000, Description = "Ultra-rare and powerful sports car", CreatedOn = baseDate.AddDays(-35), CategoryId = Guid.Parse("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), ConcurrencyStamp = defaultConcurrencyStamp }, - - new() { Id = Guid.Parse($"01d223a3-182d-406a-9722-19dab083f96{i}"), Name = $"M550i - {i}", Price = 77790, Description = "A powerful, sporty variant of the BMW 5 Series", CreatedOn = baseDate.AddDays(-10), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"64a2616f-3af6-4248-86cf-4a605095a64{i}"), Name = $"540i - {i}", Price = 60945, Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", CreatedOn = baseDate.AddDays(-15), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"ac50dc29-4b7e-4d4d-b23a-4227d91f2bb{i}"), Name = $"530e - {i}", Price = 56545, Description = "Combines class, spaciousness, and a well-built cabin", CreatedOn = baseDate.AddDays(-20), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"fb41cc51-9abd-4b45-b0d9-ea8f565ec50{i}"), Name = $"530i - {i}", Price = 55195, Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", CreatedOn = baseDate.AddDays(-25), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"e159b1ad-12aa-4e02-a39b-d5e4a32eaf9{i}"), Name = $"M850i - {i}", Price = 100045, Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", CreatedOn = baseDate.AddDays(-30), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"4d9cb0f4-1f32-45d5-8c84-d7f15bc569d{i}"), Name = $"X7 - {i}", Price = 77980, Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", CreatedOn = baseDate.AddDays(-35), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"1b22319e-0a58-471e-82b6-75cd8b9d98e{i}"), Name = $"IX - {i}", Price = 87000, Description = "Luxury crossover SUV that combines cutting-edge technology", CreatedOn = baseDate.AddDays(-40), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp }, - - new() { Id = Guid.Parse($"96c73b9c-03df-4f70-ac8d-75c32b89881{i}"), Name = $"Model 3 - {i}", Price = 61990, Description = "Rapid acceleration and dynamic handling", CreatedOn = baseDate.AddDays(-10), CategoryId = Guid.Parse("747f6d66-7524-40ca-8494-f65e85b5ee5d"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"840ba759-bde9-4821-b49b-c981c082bb9{i}"), Name = $"Model S - {i}", Price = 135000, Description = "Finishes near the top of our luxury electric car rankings.", CreatedOn = baseDate.AddDays(-15), CategoryId = Guid.Parse("747f6d66-7524-40ca-8494-f65e85b5ee5d"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"840e113b-5074-4b1c-86bd-e9affb65941{i}"), Name = $"Model X - {i}", Price = 138890, Description = "Heart-pumping acceleration, long drive range", CreatedOn = baseDate.AddDays(-20), CategoryId = Guid.Parse("747f6d66-7524-40ca-8494-f65e85b5ee5d"), ConcurrencyStamp = defaultConcurrencyStamp }, - new() { Id = Guid.Parse($"b2db9074-a0a9-4054-87e2-206b7a55c79{i}"), Name = $"Model Y - {i}", Price = 67790, Description = "Extensive driving range, lots of standard safety features", CreatedOn = baseDate.AddDays(-35), CategoryId = Guid.Parse("747f6d66-7524-40ca-8494-f65e85b5ee5d"), ConcurrencyStamp = defaultConcurrencyStamp } + new() { Id = Guid.Parse($"9a59dda2-7b12-4cc1-9658-d2586eef91d{i}"), Name = $"Mustang - {i}", Price = 27155, Description = "The Ford Mustang is ranked #1 in Sports Cars", CreatedOn = baseDate.AddDays(-10), CategoryId = Guid.Parse("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9001 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"a42914e2-92da-4f0b-aab0-b9572c9671b{i}"), Name = $"GT - {i}", Price = 500000, Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", CreatedOn = baseDate.AddDays(-15), CategoryId = Guid.Parse("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9002 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"f75325c8-a213-470b-ab93-4677ca4caee{i}"), Name = $"Ranger - {i}", Price = 25000, Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", CreatedOn = baseDate.AddDays(-25), CategoryId = Guid.Parse("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9003 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"43a82ec1-aab6-445f-83af-a85028417cf{i}"), Name = $"Raptor - {i}", Price = 53205, Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", CreatedOn = baseDate.AddDays(-30), CategoryId = Guid.Parse("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9004 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"f01b32bb-eccd-43be-aaf3-3c788a7d755{i}"), Name = $"Maverick - {i}", Price = 22470, Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", CreatedOn = baseDate.AddDays(-35), CategoryId = Guid.Parse("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9005 + (productsCountInEachForLoop * i) }, + + new() { Id = Guid.Parse($"d53bb159-f4f9-493a-b4dc-215fd765ca2{i}"), Name = $"Roadster - {i}", Price = 42800, Description = "A powerful convertible sports car", CreatedOn = baseDate.AddDays(-10), CategoryId = Guid.Parse("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9006 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"74bb268f-18cf-45ec-9f2f-30b34b18fb3{i}"), Name = $"Altima - {i}", Price = 24550, Description = "A perfectly adequate family sedan with sharp looks", CreatedOn = baseDate.AddDays(-15), CategoryId = Guid.Parse("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9007 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"eb787e1a-7ba8-4708-924b-9f7964fa0f6{i}"), Name = $"GT-R - {i}", Price = 113540, Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", CreatedOn = baseDate.AddDays(-25), CategoryId = Guid.Parse("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9008 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"362a6638-0031-485d-825f-e8aeae63a33{i}"), Name = $"Juke - {i}", Price = 28100, Description = "A new smart SUV", CreatedOn = baseDate.AddDays(-35), CategoryId = Guid.Parse("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9009 + (productsCountInEachForLoop * i) }, + + new() { Id = Guid.Parse($"8629931e-e26e-4885-b561-e447197d4b6{i}"), Name = $"H247 - {i}", Price = 54950, Description = "Subcompact luxury crossover SUV", CreatedOn = baseDate.AddDays(-10), CategoryId = Guid.Parse("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9010 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"a1c1987d-ee6c-41ad-9647-18de4504303{i}"), Name = $"V297 - {i}", Price = 103360, Description = "Battery-electric full-size luxury liftback", CreatedOn = baseDate.AddDays(-15), CategoryId = Guid.Parse("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9011 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"59eea437-bdf2-4c11-b262-06643b25328{i}"), Name = $"R50 - {i}", Price = 2000000, Description = "Ultra-rare and powerful sports car", CreatedOn = baseDate.AddDays(-35), CategoryId = Guid.Parse("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9012 + (productsCountInEachForLoop * i) }, + + new() { Id = Guid.Parse($"01d223a3-182d-406a-9722-19dab083f96{i}"), Name = $"M550i - {i}", Price = 77790, Description = "A powerful, sporty variant of the BMW 5 Series", CreatedOn = baseDate.AddDays(-10), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9013 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"64a2616f-3af6-4248-86cf-4a605095a64{i}"), Name = $"540i - {i}", Price = 60945, Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", CreatedOn = baseDate.AddDays(-15), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9014 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"ac50dc29-4b7e-4d4d-b23a-4227d91f2bb{i}"), Name = $"530e - {i}", Price = 56545, Description = "Combines class, spaciousness, and a well-built cabin", CreatedOn = baseDate.AddDays(-20), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9015 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"fb41cc51-9abd-4b45-b0d9-ea8f565ec50{i}"), Name = $"530i - {i}", Price = 55195, Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", CreatedOn = baseDate.AddDays(-25), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9016 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"e159b1ad-12aa-4e02-a39b-d5e4a32eaf9{i}"), Name = $"M850i - {i}", Price = 100045, Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", CreatedOn = baseDate.AddDays(-30), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9017 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"4d9cb0f4-1f32-45d5-8c84-d7f15bc569d{i}"), Name = $"X7 - {i}", Price = 77980, Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", CreatedOn = baseDate.AddDays(-35), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9018 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"1b22319e-0a58-471e-82b6-75cd8b9d98e{i}"), Name = $"IX - {i}", Price = 87000, Description = "Luxury crossover SUV that combines cutting-edge technology", CreatedOn = baseDate.AddDays(-40), CategoryId = Guid.Parse("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9019 + (productsCountInEachForLoop * i) }, + + new() { Id = Guid.Parse($"96c73b9c-03df-4f70-ac8d-75c32b89881{i}"), Name = $"Model 3 - {i}", Price = 61990, Description = "Rapid acceleration and dynamic handling", CreatedOn = baseDate.AddDays(-10), CategoryId = Guid.Parse("747f6d66-7524-40ca-8494-f65e85b5ee5d"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9020 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"840ba759-bde9-4821-b49b-c981c082bb9{i}"), Name = $"Model S - {i}", Price = 135000, Description = "Finishes near the top of our luxury electric car rankings.", CreatedOn = baseDate.AddDays(-15), CategoryId = Guid.Parse("747f6d66-7524-40ca-8494-f65e85b5ee5d"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9021 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"840e113b-5074-4b1c-86bd-e9affb65941{i}"), Name = $"Model X - {i}", Price = 138890, Description = "Heart-pumping acceleration, long drive range", CreatedOn = baseDate.AddDays(-20), CategoryId = Guid.Parse("747f6d66-7524-40ca-8494-f65e85b5ee5d"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9022 + (productsCountInEachForLoop * i) }, + new() { Id = Guid.Parse($"b2db9074-a0a9-4054-87e2-206b7a55c79{i}"), Name = $"Model Y - {i}", Price = 67790, Description = "Extensive driving range, lots of standard safety features", CreatedOn = baseDate.AddDays(-35), CategoryId = Guid.Parse("747f6d66-7524-40ca-8494-f65e85b5ee5d"), ConcurrencyStamp = defaultConcurrencyStamp, ShortId = 9023 + (productsCountInEachForLoop * i) } ); } } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/20250109120517_InitialMigration.Designer.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/20250109120517_InitialMigration.Designer.cs deleted file mode 100644 index d9208cecd7..0000000000 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/20250109120517_InitialMigration.Designer.cs +++ /dev/null @@ -1,839 +0,0 @@ -// -using Microsoft.EntityFrameworkCore.Infrastructure; - -#nullable disable - -namespace Boilerplate.Server.Api.Data.Migrations; - -[DbContext(typeof(AppDbContext))] -[Migration("20250109120517_InitialMigration")] -partial class InitialMigration -{ - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "9.0.0"); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.Categories.Category", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Color") - .HasColumnType("TEXT"); - - b.Property("ConcurrencyStamp") - .IsRequired() - .HasColumnType("BLOB"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("Categories"); - - b.HasData( - new - { - Id = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), - Color = "#FFCD56", - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - Name = "Ford" - }, - new - { - Id = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), - Color = "#FF6384", - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - Name = "Nissan" - }, - new - { - Id = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), - Color = "#4BC0C0", - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - Name = "Benz" - }, - new - { - Id = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), - Color = "#FF9124", - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - Name = "BMW" - }, - new - { - Id = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), - Color = "#2B88D8", - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - Name = "Tesla" - }); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.Identity.Role", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("Roles", (string)null); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.Identity.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AccessFailedCount") - .HasColumnType("INTEGER"); - - b.Property("BirthDate") - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("ElevatedAccessTokenRequestedOn") - .HasColumnType("INTEGER"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailConfirmed") - .HasColumnType("INTEGER"); - - b.Property("EmailTokenRequestedOn") - .HasColumnType("INTEGER"); - - b.Property("FullName") - .HasColumnType("TEXT"); - - b.Property("Gender") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnabled") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnd") - .HasColumnType("INTEGER"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("OtpRequestedOn") - .HasColumnType("INTEGER"); - - b.Property("PasswordHash") - .HasColumnType("TEXT"); - - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.Property("PhoneNumberTokenRequestedOn") - .HasColumnType("INTEGER"); - - b.Property("ProfileImageName") - .HasColumnType("TEXT"); - - b.Property("ResetPasswordTokenRequestedOn") - .HasColumnType("INTEGER"); - - b.Property("SecurityStamp") - .HasColumnType("TEXT"); - - b.Property("TwoFactorEnabled") - .HasColumnType("INTEGER"); - - b.Property("TwoFactorTokenRequestedOn") - .HasColumnType("INTEGER"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Email") - .IsUnique() - .HasFilter("[Email] IS NOT NULL"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.HasIndex("PhoneNumber") - .IsUnique() - .HasFilter("[PhoneNumber] IS NOT NULL"); - - b.ToTable("Users", (string)null); - - b.HasData( - new - { - Id = new Guid("8ff71671-a1d6-4f97-abb9-d87d7b47d6e7"), - AccessFailedCount = 0, - BirthDate = 1306790461440000000L, - ConcurrencyStamp = "315e1a26-5b3a-4544-8e91-2760cd28e231", - Email = "test@bitplatform.dev", - EmailConfirmed = true, - EmailTokenRequestedOn = 1306790461440000000L, - FullName = "Boilerplate test account", - Gender = 0, - LockoutEnabled = true, - NormalizedEmail = "TEST@BITPLATFORM.DEV", - NormalizedUserName = "TEST", - PasswordHash = "AQAAAAIAAYagAAAAEP0v3wxkdWtMkHA3Pp5/JfS+42/Qto9G05p2mta6dncSK37hPxEHa3PGE4aqN30Aag==", - PhoneNumber = "+31684207362", - PhoneNumberConfirmed = true, - SecurityStamp = "959ff4a9-4b07-4cc1-8141-c5fc033daf83", - TwoFactorEnabled = false, - UserName = "test" - }); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.Identity.UserSession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Address") - .HasColumnType("TEXT"); - - b.Property("DeviceInfo") - .HasColumnType("TEXT"); - - b.Property("IP") - .HasColumnType("TEXT"); - - b.Property("Privileged") - .HasColumnType("INTEGER"); - - b.Property("RenewedOn") - .HasColumnType("INTEGER"); - - b.Property("SignalRConnectionId") - .HasColumnType("TEXT"); - - b.Property("StartedOn") - .HasColumnType("INTEGER"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserSessions"); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.Products.Product", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CategoryId") - .HasColumnType("TEXT"); - - b.Property("ConcurrencyStamp") - .IsRequired() - .HasColumnType("BLOB"); - - b.Property("CreatedOn") - .HasColumnType("INTEGER"); - - b.Property("Description") - .HasMaxLength(512) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("TEXT"); - - b.Property("Price") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CategoryId"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("Products"); - - b.HasData( - new - { - Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d4"), - CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306466648064000000L, - Description = "The Ford Mustang is ranked #1 in Sports Cars", - Name = "Mustang", - Price = 27155m - }, - new - { - Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b4"), - CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306457800704000000L, - Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", - Name = "GT", - Price = 500000m - }, - new - { - Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caeef"), - CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306440105984000000L, - Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", - Name = "Ranger", - Price = 25000m - }, - new - { - Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf7"), - CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306431258624000000L, - Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", - Name = "Raptor", - Price = 53205m - }, - new - { - Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7558"), - CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306422411264000000L, - Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", - Name = "Maverick", - Price = 22470m - }, - new - { - Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca25"), - CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306466648064000000L, - Description = "A powerful convertible sports car", - Name = "Roadster", - Price = 42800m - }, - new - { - Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb3c"), - CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306457800704000000L, - Description = "A perfectly adequate family sedan with sharp looks", - Name = "Altima", - Price = 24550m - }, - new - { - Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f64"), - CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306440105984000000L, - Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", - Name = "GT-R", - Price = 113540m - }, - new - { - Id = new Guid("362a6638-0031-485d-825f-e8aeae63a334"), - CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306422411264000000L, - Description = "A new smart SUV", - Name = "Juke", - Price = 28100m - }, - new - { - Id = new Guid("8629931e-e26e-4885-b561-e447197d4b69"), - CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306466648064000000L, - Description = "", - Name = "H247", - Price = 54950m - }, - new - { - Id = new Guid("a1c1987d-ee6c-41ad-9647-18de4504303a"), - CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306457800704000000L, - Description = "", - Name = "V297", - Price = 103360m - }, - new - { - Id = new Guid("59eea437-bdf2-4c11-b262-06643b253288"), - CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306422411264000000L, - Description = "", - Name = "R50", - Price = 2000000m - }, - new - { - Id = new Guid("01d223a3-182d-406a-9722-19dab083f96e"), - CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306466648064000000L, - Description = "", - Name = "M550i", - Price = 77790m - }, - new - { - Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a644"), - CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306457800704000000L, - Description = "", - Name = "540i", - Price = 60945m - }, - new - { - Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb0"), - CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306448953344000000L, - Description = "", - Name = "530e", - Price = 56545m - }, - new - { - Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec502"), - CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306440105984000000L, - Description = "", - Name = "530i", - Price = 55195m - }, - new - { - Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf99"), - CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306431258624000000L, - Description = "", - Name = "M850i", - Price = 100045m - }, - new - { - Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d5"), - CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306422411264000000L, - Description = "", - Name = "X7", - Price = 77980m - }, - new - { - Id = new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e1"), - CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306413563904000000L, - Description = "", - Name = "IX", - Price = 87000m - }, - new - { - Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b89881a"), - CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306466648064000000L, - Description = "rapid acceleration and dynamic handling", - Name = "Model 3", - Price = 61990m - }, - new - { - Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb96"), - CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306457800704000000L, - Description = "finishes near the top of our luxury electric car rankings.", - Name = "Model S", - Price = 135000m - }, - new - { - Id = new Guid("840e113b-5074-4b1c-86bd-e9affb659412"), - CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306448953344000000L, - Description = "Heart-pumping acceleration, long drive range", - Name = "Model X", - Price = 138890m - }, - new - { - Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c793"), - CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), - ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - CreatedOn = 1306422411264000000L, - Description = "extensive driving range, lots of standard safety features", - Name = "Model Y", - Price = 67790m - }); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.PushNotification.PushNotificationSubscription", b => - { - b.Property("DeviceId") - .HasColumnType("TEXT"); - - b.Property("Auth") - .HasColumnType("TEXT"); - - b.Property("Endpoint") - .HasColumnType("TEXT"); - - b.Property("ExpirationTime") - .HasColumnType("INTEGER"); - - b.Property("P256dh") - .HasColumnType("TEXT"); - - b.Property("Platform") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("PushChannel") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("RenewedOn") - .HasColumnType("INTEGER"); - - b.PrimitiveCollection("Tags") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("UserSessionId") - .HasColumnType("TEXT"); - - b.HasKey("DeviceId"); - - b.HasIndex("UserSessionId") - .IsUnique() - .HasFilter("[UserSessionId] IS NOT NULL"); - - b.ToTable("PushNotificationSubscriptions"); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.Todo.TodoItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Date") - .HasColumnType("INTEGER"); - - b.Property("IsDone") - .HasColumnType("INTEGER"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("TodoItems"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("FriendlyName") - .HasColumnType("TEXT"); - - b.Property("Xml") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("DataProtectionKeys"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("RoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("ProviderKey") - .HasColumnType("TEXT"); - - b.Property("ProviderDisplayName") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("UserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("UserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("TEXT"); - - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("UserTokens", (string)null); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.Identity.UserSession", b => - { - b.HasOne("Boilerplate.Server.Api.Models.Identity.User", "User") - .WithMany("Sessions") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.Products.Product", b => - { - b.HasOne("Boilerplate.Server.Api.Models.Categories.Category", "Category") - .WithMany("Products") - .HasForeignKey("CategoryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Category"); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.PushNotification.PushNotificationSubscription", b => - { - b.HasOne("Boilerplate.Server.Api.Models.Identity.UserSession", "UserSession") - .WithOne("PushNotificationSubscription") - .HasForeignKey("Boilerplate.Server.Api.Models.PushNotification.PushNotificationSubscription", "UserSessionId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("UserSession"); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.Todo.TodoItem", b => - { - b.HasOne("Boilerplate.Server.Api.Models.Identity.User", "User") - .WithMany("TodoItems") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("Boilerplate.Server.Api.Models.Identity.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("Boilerplate.Server.Api.Models.Identity.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("Boilerplate.Server.Api.Models.Identity.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("Boilerplate.Server.Api.Models.Identity.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Boilerplate.Server.Api.Models.Identity.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("Boilerplate.Server.Api.Models.Identity.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.Categories.Category", b => - { - b.Navigation("Products"); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.Identity.User", b => - { - b.Navigation("Sessions"); - - b.Navigation("TodoItems"); - }); - - modelBuilder.Entity("Boilerplate.Server.Api.Models.Identity.UserSession", b => - { - b.Navigation("PushNotificationSubscription"); - }); -#pragma warning restore 612, 618 - } -} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/20250109120517_InitialMigration.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/20250109120517_InitialMigration.cs deleted file mode 100644 index 3a1c66c6c3..0000000000 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/20250109120517_InitialMigration.cs +++ /dev/null @@ -1,467 +0,0 @@ -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Boilerplate.Server.Api.Data.Migrations; - -/// -public partial class InitialMigration : Migration -{ - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Categories", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", maxLength: 64, nullable: false), - Color = table.Column(type: "TEXT", nullable: true), - ConcurrencyStamp = table.Column(type: "BLOB", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Categories", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "DataProtectionKeys", - columns: table => new - { - Id = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - FriendlyName = table.Column(type: "TEXT", nullable: true), - Xml = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_DataProtectionKeys", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Roles", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", maxLength: 50, nullable: true), - NormalizedName = table.Column(type: "TEXT", maxLength: 256, nullable: true), - ConcurrencyStamp = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Roles", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Users", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - FullName = table.Column(type: "TEXT", nullable: true), - Gender = table.Column(type: "INTEGER", nullable: true), - BirthDate = table.Column(type: "INTEGER", nullable: true), - ProfileImageName = table.Column(type: "TEXT", nullable: true), - EmailTokenRequestedOn = table.Column(type: "INTEGER", nullable: true), - PhoneNumberTokenRequestedOn = table.Column(type: "INTEGER", nullable: true), - ResetPasswordTokenRequestedOn = table.Column(type: "INTEGER", nullable: true), - TwoFactorTokenRequestedOn = table.Column(type: "INTEGER", nullable: true), - OtpRequestedOn = table.Column(type: "INTEGER", nullable: true), - ElevatedAccessTokenRequestedOn = table.Column(type: "INTEGER", nullable: true), - UserName = table.Column(type: "TEXT", maxLength: 256, nullable: true), - NormalizedUserName = table.Column(type: "TEXT", maxLength: 256, nullable: true), - Email = table.Column(type: "TEXT", maxLength: 256, nullable: true), - NormalizedEmail = table.Column(type: "TEXT", maxLength: 256, nullable: true), - EmailConfirmed = table.Column(type: "INTEGER", nullable: false), - PasswordHash = table.Column(type: "TEXT", nullable: true), - SecurityStamp = table.Column(type: "TEXT", nullable: true), - ConcurrencyStamp = table.Column(type: "TEXT", nullable: true), - PhoneNumber = table.Column(type: "TEXT", nullable: true), - PhoneNumberConfirmed = table.Column(type: "INTEGER", nullable: false), - TwoFactorEnabled = table.Column(type: "INTEGER", nullable: false), - LockoutEnd = table.Column(type: "INTEGER", nullable: true), - LockoutEnabled = table.Column(type: "INTEGER", nullable: false), - AccessFailedCount = table.Column(type: "INTEGER", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Users", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Products", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", maxLength: 64, nullable: false), - Price = table.Column(type: "TEXT", nullable: false), - Description = table.Column(type: "TEXT", maxLength: 512, nullable: true), - CreatedOn = table.Column(type: "INTEGER", nullable: false), - CategoryId = table.Column(type: "TEXT", nullable: false), - ConcurrencyStamp = table.Column(type: "BLOB", nullable: false), - ImageFileName = table.Column(type: "TEXT", nullable: true), - }, - constraints: table => - { - table.PrimaryKey("PK_Products", x => x.Id); - table.ForeignKey( - name: "FK_Products_Categories_CategoryId", - column: x => x.CategoryId, - principalTable: "Categories", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "RoleClaims", - columns: table => new - { - Id = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - RoleId = table.Column(type: "TEXT", nullable: false), - ClaimType = table.Column(type: "TEXT", nullable: true), - ClaimValue = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_RoleClaims", x => x.Id); - table.ForeignKey( - name: "FK_RoleClaims_Roles_RoleId", - column: x => x.RoleId, - principalTable: "Roles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "TodoItems", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - Title = table.Column(type: "TEXT", nullable: false), - Date = table.Column(type: "INTEGER", nullable: false), - IsDone = table.Column(type: "INTEGER", nullable: false), - UserId = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_TodoItems", x => x.Id); - table.ForeignKey( - name: "FK_TodoItems_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserClaims", - columns: table => new - { - Id = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - UserId = table.Column(type: "TEXT", nullable: false), - ClaimType = table.Column(type: "TEXT", nullable: true), - ClaimValue = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserClaims", x => x.Id); - table.ForeignKey( - name: "FK_UserClaims_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserLogins", - columns: table => new - { - LoginProvider = table.Column(type: "TEXT", nullable: false), - ProviderKey = table.Column(type: "TEXT", nullable: false), - ProviderDisplayName = table.Column(type: "TEXT", nullable: true), - UserId = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_UserLogins", x => new { x.LoginProvider, x.ProviderKey }); - table.ForeignKey( - name: "FK_UserLogins_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserRoles", - columns: table => new - { - UserId = table.Column(type: "TEXT", nullable: false), - RoleId = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_UserRoles", x => new { x.UserId, x.RoleId }); - table.ForeignKey( - name: "FK_UserRoles_Roles_RoleId", - column: x => x.RoleId, - principalTable: "Roles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_UserRoles_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserSessions", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - IP = table.Column(type: "TEXT", nullable: true), - DeviceInfo = table.Column(type: "TEXT", nullable: true), - Address = table.Column(type: "TEXT", nullable: true), - Privileged = table.Column(type: "INTEGER", nullable: false), - StartedOn = table.Column(type: "INTEGER", nullable: false), - RenewedOn = table.Column(type: "INTEGER", nullable: true), - UserId = table.Column(type: "TEXT", nullable: false), - SignalRConnectionId = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserSessions", x => x.Id); - table.ForeignKey( - name: "FK_UserSessions_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserTokens", - columns: table => new - { - UserId = table.Column(type: "TEXT", nullable: false), - LoginProvider = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", nullable: false), - Value = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); - table.ForeignKey( - name: "FK_UserTokens_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "PushNotificationSubscriptions", - columns: table => new - { - DeviceId = table.Column(type: "TEXT", nullable: false), - Platform = table.Column(type: "TEXT", nullable: false), - PushChannel = table.Column(type: "TEXT", nullable: false), - P256dh = table.Column(type: "TEXT", nullable: true), - Auth = table.Column(type: "TEXT", nullable: true), - Endpoint = table.Column(type: "TEXT", nullable: true), - UserSessionId = table.Column(type: "TEXT", nullable: true), - Tags = table.Column(type: "TEXT", nullable: false), - ExpirationTime = table.Column(type: "INTEGER", nullable: false), - RenewedOn = table.Column(type: "INTEGER", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_PushNotificationSubscriptions", x => x.DeviceId); - table.ForeignKey( - name: "FK_PushNotificationSubscriptions_UserSessions_UserSessionId", - column: x => x.UserSessionId, - principalTable: "UserSessions", - principalColumn: "Id", - onDelete: ReferentialAction.SetNull); - }); - - migrationBuilder.InsertData( - table: "Categories", - columns: new[] { "Id", "Color", "ConcurrencyStamp", "Name" }, - values: new object[,] - { - { new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), "#FFCD56", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, "Ford" }, - { new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), "#FF6384", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, "Nissan" }, - { new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), "#4BC0C0", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, "Benz" }, - { new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), "#2B88D8", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, "Tesla" }, - { new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), "#FF9124", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, "BMW" } - }); - - migrationBuilder.InsertData( - table: "Users", - columns: new[] { "Id", "AccessFailedCount", "BirthDate", "ConcurrencyStamp", "ElevatedAccessTokenRequestedOn", "Email", "EmailConfirmed", "EmailTokenRequestedOn", "FullName", "Gender", "LockoutEnabled", "LockoutEnd", "NormalizedEmail", "NormalizedUserName", "OtpRequestedOn", "PasswordHash", "PhoneNumber", "PhoneNumberConfirmed", "PhoneNumberTokenRequestedOn", "ProfileImageName", "ResetPasswordTokenRequestedOn", "SecurityStamp", "TwoFactorEnabled", "TwoFactorTokenRequestedOn", "UserName" }, - values: new object[] { new Guid("8ff71671-a1d6-4f97-abb9-d87d7b47d6e7"), 0, 1306790461440000000L, "315e1a26-5b3a-4544-8e91-2760cd28e231", null, "test@bitplatform.dev", true, 1306790461440000000L, "Boilerplate test account", 0, true, null, "TEST@BITPLATFORM.DEV", "TEST", null, "AQAAAAIAAYagAAAAEP0v3wxkdWtMkHA3Pp5/JfS+42/Qto9G05p2mta6dncSK37hPxEHa3PGE4aqN30Aag==", "+31684207362", true, null, null, null, "959ff4a9-4b07-4cc1-8141-c5fc033daf83", false, null, "test" }); - - migrationBuilder.InsertData( - table: "Products", - columns: new[] { "Id", "CategoryId", "ConcurrencyStamp", "CreatedOn", "Description", "Name", "Price", "ImageFileName" }, - values: new object[,] - { - { new Guid("01d223a3-182d-406a-9722-19dab083f96e"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful, sporty variant of the BMW 5 Series", "M550i", 77790m, null }, - { new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e1"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306413563904000000L, "Luxury crossover SUV that combines cutting-edge technology", "IX", 87000m, null }, - { new Guid("362a6638-0031-485d-825f-e8aeae63a334"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Funky-looking subcompact crossover SUV", "Juke", 28100m, null }, - { new Guid("43a82ec1-aab6-445f-83af-a85028417cf7"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "Raptor is a SCORE off-road trophy truck living in a asphalt world", "Raptor", 53205m, null }, - { new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d5"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", "X7", 77980m, null }, - { new Guid("59eea437-bdf2-4c11-b262-06643b253288"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Ultra-rare and powerful sports car", "R50", 2000000m, null }, - { new Guid("64a2616f-3af6-4248-86cf-4a605095a644"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Luxurious and powerful sedan that combines elegant design with impressive performance", "540i", 60945m, null }, - { new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb3c"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "A perfectly adequate family sedan with sharp looks", "Altima", 24550m, null }, - { new Guid("840ba759-bde9-4821-b49b-c981c082bb96"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Finishes near the top of our luxury electric car rankings", "Model S", 135000m, null }, - { new Guid("840e113b-5074-4b1c-86bd-e9affb659412"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Heart-pumping acceleration, long drive range", "Model X", 138890m, null }, - { new Guid("8629931e-e26e-4885-b561-e447197d4b69"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Subcompact luxury crossover SUV", "H247", 54950m, null }, - { new Guid("96c73b9c-03df-4f70-ac8d-75c32b89881a"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Rapid acceleration and dynamic handling", "Model 3", 61990m, null }, - { new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d4"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "The Ford Mustang is ranked #1 in Sports Cars", "Mustang", 27155m, null }, - { new Guid("a1c1987d-ee6c-41ad-9647-18de4504303a"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Battery-electric full-size luxury liftback", "V297", 103360m, null }, - { new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b4"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", "GT", 500000m, null }, - { new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb0"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Combines class, spaciousness, and a well-built cabin", "530e", 56545m, null }, - { new Guid("b2db9074-a0a9-4054-87e2-206b7a55c793"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Extensive driving range, lots of standard safety features", "Model Y", 67790m, null }, - { new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca25"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful convertible sports car", "Roadster", 42800m, null }, - { new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf99"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", "M850i", 100045m, null }, - { new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f64"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", "GT-R", 113540m, null }, - { new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7558"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", "Maverick", 22470m, null }, - { new Guid("f75325c8-a213-470b-ab93-4677ca4caeef"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", "Ranger", 25000m, null }, - { new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec502"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Zippy and fuel-efficient powertrain, and sure-footed handling", "530i", 55195m, null } - }); - - migrationBuilder.CreateIndex( - name: "IX_Categories_Name", - table: "Categories", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Products_CategoryId", - table: "Products", - column: "CategoryId"); - - migrationBuilder.CreateIndex( - name: "IX_Products_Name", - table: "Products", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PushNotificationSubscriptions_UserSessionId", - table: "PushNotificationSubscriptions", - column: "UserSessionId", - unique: true, - filter: "[UserSessionId] IS NOT NULL"); - - migrationBuilder.CreateIndex( - name: "IX_RoleClaims_RoleId", - table: "RoleClaims", - column: "RoleId"); - - migrationBuilder.CreateIndex( - name: "RoleNameIndex", - table: "Roles", - column: "NormalizedName", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_TodoItems_UserId", - table: "TodoItems", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_UserClaims_UserId", - table: "UserClaims", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_UserLogins_UserId", - table: "UserLogins", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_UserRoles_RoleId", - table: "UserRoles", - column: "RoleId"); - - migrationBuilder.CreateIndex( - name: "EmailIndex", - table: "Users", - column: "NormalizedEmail"); - - migrationBuilder.CreateIndex( - name: "IX_Users_Email", - table: "Users", - column: "Email", - unique: true, - filter: "[Email] IS NOT NULL"); - - migrationBuilder.CreateIndex( - name: "IX_Users_PhoneNumber", - table: "Users", - column: "PhoneNumber", - unique: true, - filter: "[PhoneNumber] IS NOT NULL"); - - migrationBuilder.CreateIndex( - name: "UserNameIndex", - table: "Users", - column: "NormalizedUserName", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_UserSessions_UserId", - table: "UserSessions", - column: "UserId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "DataProtectionKeys"); - - migrationBuilder.DropTable( - name: "Products"); - - migrationBuilder.DropTable( - name: "PushNotificationSubscriptions"); - - migrationBuilder.DropTable( - name: "RoleClaims"); - - migrationBuilder.DropTable( - name: "TodoItems"); - - migrationBuilder.DropTable( - name: "UserClaims"); - - migrationBuilder.DropTable( - name: "UserLogins"); - - migrationBuilder.DropTable( - name: "UserRoles"); - - migrationBuilder.DropTable( - name: "UserTokens"); - - migrationBuilder.DropTable( - name: "Categories"); - - migrationBuilder.DropTable( - name: "UserSessions"); - - migrationBuilder.DropTable( - name: "Roles"); - - migrationBuilder.DropTable( - name: "Users"); - } -} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/20250217191441_InitialMigration.Designer.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/20250217191441_InitialMigration.Designer.cs new file mode 100644 index 0000000000..02638e86ad --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/20250217191441_InitialMigration.Designer.cs @@ -0,0 +1,2136 @@ +// +using Microsoft.EntityFrameworkCore.Infrastructure; + +#nullable disable + +namespace Boilerplate.Server.Api.Data.Migrations; + +[DbContext(typeof(AppDbContext))] +[Migration("20250217191441_InitialMigration")] +partial class InitialMigration +{ + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.2"); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.Categories.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Color") + .HasColumnType("TEXT"); + + b.Property("ConcurrencyStamp") + .IsRequired() + .HasColumnType("BLOB"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("Categories"); + + b.HasData( + new + { + Id = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + Color = "#FFCD56", + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + Name = "Ford" + }, + new + { + Id = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + Color = "#FF6384", + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + Name = "Nissan" + }, + new + { + Id = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + Color = "#4BC0C0", + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + Name = "Benz" + }, + new + { + Id = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + Color = "#FF9124", + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + Name = "BMW" + }, + new + { + Id = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + Color = "#2B88D8", + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + Name = "Tesla" + }); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.Identity.Role", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("TEXT"); + + b.Property("Name") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex"); + + b.ToTable("Roles", (string)null); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.Identity.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AccessFailedCount") + .HasColumnType("INTEGER"); + + b.Property("BirthDate") + .HasColumnType("INTEGER"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("TEXT"); + + b.Property("ElevatedAccessTokenRequestedOn") + .HasColumnType("INTEGER"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("EmailConfirmed") + .HasColumnType("INTEGER"); + + b.Property("EmailTokenRequestedOn") + .HasColumnType("INTEGER"); + + b.Property("FullName") + .HasColumnType("TEXT"); + + b.Property("Gender") + .HasColumnType("INTEGER"); + + b.Property("LockoutEnabled") + .HasColumnType("INTEGER"); + + b.Property("LockoutEnd") + .HasColumnType("INTEGER"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("OtpRequestedOn") + .HasColumnType("INTEGER"); + + b.Property("PasswordHash") + .HasColumnType("TEXT"); + + b.Property("PhoneNumber") + .HasColumnType("TEXT"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("INTEGER"); + + b.Property("PhoneNumberTokenRequestedOn") + .HasColumnType("INTEGER"); + + b.Property("ProfileImageName") + .HasColumnType("TEXT"); + + b.Property("ResetPasswordTokenRequestedOn") + .HasColumnType("INTEGER"); + + b.Property("SecurityStamp") + .HasColumnType("TEXT"); + + b.Property("TwoFactorEnabled") + .HasColumnType("INTEGER"); + + b.Property("TwoFactorTokenRequestedOn") + .HasColumnType("INTEGER"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Email") + .IsUnique() + .HasFilter("[Email] IS NOT NULL"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex"); + + b.HasIndex("PhoneNumber") + .IsUnique() + .HasFilter("[PhoneNumber] IS NOT NULL"); + + b.ToTable("Users", (string)null); + + b.HasData( + new + { + Id = new Guid("8ff71671-a1d6-4f97-abb9-d87d7b47d6e7"), + AccessFailedCount = 0, + BirthDate = 1306790461440000000L, + ConcurrencyStamp = "315e1a26-5b3a-4544-8e91-2760cd28e231", + Email = "test@bitplatform.dev", + EmailConfirmed = true, + EmailTokenRequestedOn = 1306790461440000000L, + FullName = "Boilerplate test account", + Gender = 0, + LockoutEnabled = true, + NormalizedEmail = "TEST@BITPLATFORM.DEV", + NormalizedUserName = "TEST", + PasswordHash = "AQAAAAIAAYagAAAAEP0v3wxkdWtMkHA3Pp5/JfS+42/Qto9G05p2mta6dncSK37hPxEHa3PGE4aqN30Aag==", + PhoneNumber = "+31684207362", + PhoneNumberConfirmed = true, + SecurityStamp = "959ff4a9-4b07-4cc1-8141-c5fc033daf83", + TwoFactorEnabled = false, + UserName = "test" + }); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.Identity.UserSession", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Address") + .HasColumnType("TEXT"); + + b.Property("DeviceInfo") + .HasColumnType("TEXT"); + + b.Property("IP") + .HasColumnType("TEXT"); + + b.Property("Privileged") + .HasColumnType("INTEGER"); + + b.Property("RenewedOn") + .HasColumnType("INTEGER"); + + b.Property("SignalRConnectionId") + .HasColumnType("TEXT"); + + b.Property("StartedOn") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserSessions"); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.Products.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CategoryId") + .HasColumnType("TEXT"); + + b.Property("ConcurrencyStamp") + .IsRequired() + .HasColumnType("BLOB"); + + b.Property("CreatedOn") + .HasColumnType("INTEGER"); + + b.Property("Description") + .HasMaxLength(512) + .HasColumnType("TEXT"); + + b.Property("ImageFileName") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("TEXT"); + + b.Property("Price") + .HasColumnType("TEXT"); + + b.Property("ShortId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("Name") + .IsUnique(); + + b.HasIndex("ShortId") + .IsUnique(); + + b.ToTable("Products"); + + b.HasData( + new + { + Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d1"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "The Ford Mustang is ranked #1 in Sports Cars", + Name = "Mustang - 1", + Price = 27155m, + ShortId = 9024 + }, + new + { + Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b1"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", + Name = "GT - 1", + Price = 500000m, + ShortId = 9025 + }, + new + { + Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caee1"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", + Name = "Ranger - 1", + Price = 25000m, + ShortId = 9026 + }, + new + { + Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf1"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", + Name = "Raptor - 1", + Price = 53205m, + ShortId = 9027 + }, + new + { + Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7551"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", + Name = "Maverick - 1", + Price = 22470m, + ShortId = 9028 + }, + new + { + Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca21"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful convertible sports car", + Name = "Roadster - 1", + Price = 42800m, + ShortId = 9029 + }, + new + { + Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb31"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "A perfectly adequate family sedan with sharp looks", + Name = "Altima - 1", + Price = 24550m, + ShortId = 9030 + }, + new + { + Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f61"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", + Name = "GT-R - 1", + Price = 113540m, + ShortId = 9031 + }, + new + { + Id = new Guid("362a6638-0031-485d-825f-e8aeae63a331"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A new smart SUV", + Name = "Juke - 1", + Price = 28100m, + ShortId = 9032 + }, + new + { + Id = new Guid("8629931e-e26e-4885-b561-e447197d4b61"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Subcompact luxury crossover SUV", + Name = "H247 - 1", + Price = 54950m, + ShortId = 9033 + }, + new + { + Id = new Guid("a1c1987d-ee6c-41ad-9647-18de45043031"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Battery-electric full-size luxury liftback", + Name = "V297 - 1", + Price = 103360m, + ShortId = 9034 + }, + new + { + Id = new Guid("59eea437-bdf2-4c11-b262-06643b253281"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Ultra-rare and powerful sports car", + Name = "R50 - 1", + Price = 2000000m, + ShortId = 9035 + }, + new + { + Id = new Guid("01d223a3-182d-406a-9722-19dab083f961"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful, sporty variant of the BMW 5 Series", + Name = "M550i - 1", + Price = 77790m, + ShortId = 9036 + }, + new + { + Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a641"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", + Name = "540i - 1", + Price = 60945m, + ShortId = 9037 + }, + new + { + Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb1"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Combines class, spaciousness, and a well-built cabin", + Name = "530e - 1", + Price = 56545m, + ShortId = 9038 + }, + new + { + Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec501"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", + Name = "530i - 1", + Price = 55195m, + ShortId = 9039 + }, + new + { + Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf91"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", + Name = "M850i - 1", + Price = 100045m, + ShortId = 9040 + }, + new + { + Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d1"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", + Name = "X7 - 1", + Price = 77980m, + ShortId = 9041 + }, + new + { + Id = new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e1"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306413563904000000L, + Description = "Luxury crossover SUV that combines cutting-edge technology", + Name = "IX - 1", + Price = 87000m, + ShortId = 9042 + }, + new + { + Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b898811"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Rapid acceleration and dynamic handling", + Name = "Model 3 - 1", + Price = 61990m, + ShortId = 9043 + }, + new + { + Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb91"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Finishes near the top of our luxury electric car rankings.", + Name = "Model S - 1", + Price = 135000m, + ShortId = 9044 + }, + new + { + Id = new Guid("840e113b-5074-4b1c-86bd-e9affb659411"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Heart-pumping acceleration, long drive range", + Name = "Model X - 1", + Price = 138890m, + ShortId = 9045 + }, + new + { + Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c791"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Extensive driving range, lots of standard safety features", + Name = "Model Y - 1", + Price = 67790m, + ShortId = 9046 + }, + new + { + Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d2"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "The Ford Mustang is ranked #1 in Sports Cars", + Name = "Mustang - 2", + Price = 27155m, + ShortId = 9047 + }, + new + { + Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b2"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", + Name = "GT - 2", + Price = 500000m, + ShortId = 9048 + }, + new + { + Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caee2"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", + Name = "Ranger - 2", + Price = 25000m, + ShortId = 9049 + }, + new + { + Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf2"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", + Name = "Raptor - 2", + Price = 53205m, + ShortId = 9050 + }, + new + { + Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7552"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", + Name = "Maverick - 2", + Price = 22470m, + ShortId = 9051 + }, + new + { + Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca22"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful convertible sports car", + Name = "Roadster - 2", + Price = 42800m, + ShortId = 9052 + }, + new + { + Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb32"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "A perfectly adequate family sedan with sharp looks", + Name = "Altima - 2", + Price = 24550m, + ShortId = 9053 + }, + new + { + Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f62"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", + Name = "GT-R - 2", + Price = 113540m, + ShortId = 9054 + }, + new + { + Id = new Guid("362a6638-0031-485d-825f-e8aeae63a332"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A new smart SUV", + Name = "Juke - 2", + Price = 28100m, + ShortId = 9055 + }, + new + { + Id = new Guid("8629931e-e26e-4885-b561-e447197d4b62"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Subcompact luxury crossover SUV", + Name = "H247 - 2", + Price = 54950m, + ShortId = 9056 + }, + new + { + Id = new Guid("a1c1987d-ee6c-41ad-9647-18de45043032"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Battery-electric full-size luxury liftback", + Name = "V297 - 2", + Price = 103360m, + ShortId = 9057 + }, + new + { + Id = new Guid("59eea437-bdf2-4c11-b262-06643b253282"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Ultra-rare and powerful sports car", + Name = "R50 - 2", + Price = 2000000m, + ShortId = 9058 + }, + new + { + Id = new Guid("01d223a3-182d-406a-9722-19dab083f962"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful, sporty variant of the BMW 5 Series", + Name = "M550i - 2", + Price = 77790m, + ShortId = 9059 + }, + new + { + Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a642"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", + Name = "540i - 2", + Price = 60945m, + ShortId = 9060 + }, + new + { + Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb2"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Combines class, spaciousness, and a well-built cabin", + Name = "530e - 2", + Price = 56545m, + ShortId = 9061 + }, + new + { + Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec502"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", + Name = "530i - 2", + Price = 55195m, + ShortId = 9062 + }, + new + { + Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf92"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", + Name = "M850i - 2", + Price = 100045m, + ShortId = 9063 + }, + new + { + Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d2"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", + Name = "X7 - 2", + Price = 77980m, + ShortId = 9064 + }, + new + { + Id = new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e2"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306413563904000000L, + Description = "Luxury crossover SUV that combines cutting-edge technology", + Name = "IX - 2", + Price = 87000m, + ShortId = 9065 + }, + new + { + Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b898812"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Rapid acceleration and dynamic handling", + Name = "Model 3 - 2", + Price = 61990m, + ShortId = 9066 + }, + new + { + Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb92"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Finishes near the top of our luxury electric car rankings.", + Name = "Model S - 2", + Price = 135000m, + ShortId = 9067 + }, + new + { + Id = new Guid("840e113b-5074-4b1c-86bd-e9affb659412"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Heart-pumping acceleration, long drive range", + Name = "Model X - 2", + Price = 138890m, + ShortId = 9068 + }, + new + { + Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c792"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Extensive driving range, lots of standard safety features", + Name = "Model Y - 2", + Price = 67790m, + ShortId = 9069 + }, + new + { + Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d3"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "The Ford Mustang is ranked #1 in Sports Cars", + Name = "Mustang - 3", + Price = 27155m, + ShortId = 9070 + }, + new + { + Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b3"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", + Name = "GT - 3", + Price = 500000m, + ShortId = 9071 + }, + new + { + Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caee3"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", + Name = "Ranger - 3", + Price = 25000m, + ShortId = 9072 + }, + new + { + Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf3"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", + Name = "Raptor - 3", + Price = 53205m, + ShortId = 9073 + }, + new + { + Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7553"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", + Name = "Maverick - 3", + Price = 22470m, + ShortId = 9074 + }, + new + { + Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca23"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful convertible sports car", + Name = "Roadster - 3", + Price = 42800m, + ShortId = 9075 + }, + new + { + Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb33"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "A perfectly adequate family sedan with sharp looks", + Name = "Altima - 3", + Price = 24550m, + ShortId = 9076 + }, + new + { + Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f63"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", + Name = "GT-R - 3", + Price = 113540m, + ShortId = 9077 + }, + new + { + Id = new Guid("362a6638-0031-485d-825f-e8aeae63a333"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A new smart SUV", + Name = "Juke - 3", + Price = 28100m, + ShortId = 9078 + }, + new + { + Id = new Guid("8629931e-e26e-4885-b561-e447197d4b63"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Subcompact luxury crossover SUV", + Name = "H247 - 3", + Price = 54950m, + ShortId = 9079 + }, + new + { + Id = new Guid("a1c1987d-ee6c-41ad-9647-18de45043033"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Battery-electric full-size luxury liftback", + Name = "V297 - 3", + Price = 103360m, + ShortId = 9080 + }, + new + { + Id = new Guid("59eea437-bdf2-4c11-b262-06643b253283"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Ultra-rare and powerful sports car", + Name = "R50 - 3", + Price = 2000000m, + ShortId = 9081 + }, + new + { + Id = new Guid("01d223a3-182d-406a-9722-19dab083f963"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful, sporty variant of the BMW 5 Series", + Name = "M550i - 3", + Price = 77790m, + ShortId = 9082 + }, + new + { + Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a643"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", + Name = "540i - 3", + Price = 60945m, + ShortId = 9083 + }, + new + { + Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb3"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Combines class, spaciousness, and a well-built cabin", + Name = "530e - 3", + Price = 56545m, + ShortId = 9084 + }, + new + { + Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec503"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", + Name = "530i - 3", + Price = 55195m, + ShortId = 9085 + }, + new + { + Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf93"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", + Name = "M850i - 3", + Price = 100045m, + ShortId = 9086 + }, + new + { + Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d3"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", + Name = "X7 - 3", + Price = 77980m, + ShortId = 9087 + }, + new + { + Id = new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e3"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306413563904000000L, + Description = "Luxury crossover SUV that combines cutting-edge technology", + Name = "IX - 3", + Price = 87000m, + ShortId = 9088 + }, + new + { + Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b898813"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Rapid acceleration and dynamic handling", + Name = "Model 3 - 3", + Price = 61990m, + ShortId = 9089 + }, + new + { + Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb93"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Finishes near the top of our luxury electric car rankings.", + Name = "Model S - 3", + Price = 135000m, + ShortId = 9090 + }, + new + { + Id = new Guid("840e113b-5074-4b1c-86bd-e9affb659413"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Heart-pumping acceleration, long drive range", + Name = "Model X - 3", + Price = 138890m, + ShortId = 9091 + }, + new + { + Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c793"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Extensive driving range, lots of standard safety features", + Name = "Model Y - 3", + Price = 67790m, + ShortId = 9092 + }, + new + { + Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d4"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "The Ford Mustang is ranked #1 in Sports Cars", + Name = "Mustang - 4", + Price = 27155m, + ShortId = 9093 + }, + new + { + Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b4"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", + Name = "GT - 4", + Price = 500000m, + ShortId = 9094 + }, + new + { + Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caee4"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", + Name = "Ranger - 4", + Price = 25000m, + ShortId = 9095 + }, + new + { + Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf4"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", + Name = "Raptor - 4", + Price = 53205m, + ShortId = 9096 + }, + new + { + Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7554"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", + Name = "Maverick - 4", + Price = 22470m, + ShortId = 9097 + }, + new + { + Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca24"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful convertible sports car", + Name = "Roadster - 4", + Price = 42800m, + ShortId = 9098 + }, + new + { + Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb34"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "A perfectly adequate family sedan with sharp looks", + Name = "Altima - 4", + Price = 24550m, + ShortId = 9099 + }, + new + { + Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f64"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", + Name = "GT-R - 4", + Price = 113540m, + ShortId = 9100 + }, + new + { + Id = new Guid("362a6638-0031-485d-825f-e8aeae63a334"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A new smart SUV", + Name = "Juke - 4", + Price = 28100m, + ShortId = 9101 + }, + new + { + Id = new Guid("8629931e-e26e-4885-b561-e447197d4b64"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Subcompact luxury crossover SUV", + Name = "H247 - 4", + Price = 54950m, + ShortId = 9102 + }, + new + { + Id = new Guid("a1c1987d-ee6c-41ad-9647-18de45043034"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Battery-electric full-size luxury liftback", + Name = "V297 - 4", + Price = 103360m, + ShortId = 9103 + }, + new + { + Id = new Guid("59eea437-bdf2-4c11-b262-06643b253284"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Ultra-rare and powerful sports car", + Name = "R50 - 4", + Price = 2000000m, + ShortId = 9104 + }, + new + { + Id = new Guid("01d223a3-182d-406a-9722-19dab083f964"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful, sporty variant of the BMW 5 Series", + Name = "M550i - 4", + Price = 77790m, + ShortId = 9105 + }, + new + { + Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a644"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", + Name = "540i - 4", + Price = 60945m, + ShortId = 9106 + }, + new + { + Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb4"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Combines class, spaciousness, and a well-built cabin", + Name = "530e - 4", + Price = 56545m, + ShortId = 9107 + }, + new + { + Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec504"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", + Name = "530i - 4", + Price = 55195m, + ShortId = 9108 + }, + new + { + Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf94"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", + Name = "M850i - 4", + Price = 100045m, + ShortId = 9109 + }, + new + { + Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d4"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", + Name = "X7 - 4", + Price = 77980m, + ShortId = 9110 + }, + new + { + Id = new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e4"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306413563904000000L, + Description = "Luxury crossover SUV that combines cutting-edge technology", + Name = "IX - 4", + Price = 87000m, + ShortId = 9111 + }, + new + { + Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b898814"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Rapid acceleration and dynamic handling", + Name = "Model 3 - 4", + Price = 61990m, + ShortId = 9112 + }, + new + { + Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb94"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Finishes near the top of our luxury electric car rankings.", + Name = "Model S - 4", + Price = 135000m, + ShortId = 9113 + }, + new + { + Id = new Guid("840e113b-5074-4b1c-86bd-e9affb659414"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Heart-pumping acceleration, long drive range", + Name = "Model X - 4", + Price = 138890m, + ShortId = 9114 + }, + new + { + Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c794"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Extensive driving range, lots of standard safety features", + Name = "Model Y - 4", + Price = 67790m, + ShortId = 9115 + }, + new + { + Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d5"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "The Ford Mustang is ranked #1 in Sports Cars", + Name = "Mustang - 5", + Price = 27155m, + ShortId = 9116 + }, + new + { + Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b5"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", + Name = "GT - 5", + Price = 500000m, + ShortId = 9117 + }, + new + { + Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caee5"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", + Name = "Ranger - 5", + Price = 25000m, + ShortId = 9118 + }, + new + { + Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf5"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", + Name = "Raptor - 5", + Price = 53205m, + ShortId = 9119 + }, + new + { + Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7555"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", + Name = "Maverick - 5", + Price = 22470m, + ShortId = 9120 + }, + new + { + Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca25"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful convertible sports car", + Name = "Roadster - 5", + Price = 42800m, + ShortId = 9121 + }, + new + { + Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb35"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "A perfectly adequate family sedan with sharp looks", + Name = "Altima - 5", + Price = 24550m, + ShortId = 9122 + }, + new + { + Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f65"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", + Name = "GT-R - 5", + Price = 113540m, + ShortId = 9123 + }, + new + { + Id = new Guid("362a6638-0031-485d-825f-e8aeae63a335"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A new smart SUV", + Name = "Juke - 5", + Price = 28100m, + ShortId = 9124 + }, + new + { + Id = new Guid("8629931e-e26e-4885-b561-e447197d4b65"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Subcompact luxury crossover SUV", + Name = "H247 - 5", + Price = 54950m, + ShortId = 9125 + }, + new + { + Id = new Guid("a1c1987d-ee6c-41ad-9647-18de45043035"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Battery-electric full-size luxury liftback", + Name = "V297 - 5", + Price = 103360m, + ShortId = 9126 + }, + new + { + Id = new Guid("59eea437-bdf2-4c11-b262-06643b253285"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Ultra-rare and powerful sports car", + Name = "R50 - 5", + Price = 2000000m, + ShortId = 9127 + }, + new + { + Id = new Guid("01d223a3-182d-406a-9722-19dab083f965"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful, sporty variant of the BMW 5 Series", + Name = "M550i - 5", + Price = 77790m, + ShortId = 9128 + }, + new + { + Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a645"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", + Name = "540i - 5", + Price = 60945m, + ShortId = 9129 + }, + new + { + Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb5"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Combines class, spaciousness, and a well-built cabin", + Name = "530e - 5", + Price = 56545m, + ShortId = 9130 + }, + new + { + Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec505"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", + Name = "530i - 5", + Price = 55195m, + ShortId = 9131 + }, + new + { + Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf95"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", + Name = "M850i - 5", + Price = 100045m, + ShortId = 9132 + }, + new + { + Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d5"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", + Name = "X7 - 5", + Price = 77980m, + ShortId = 9133 + }, + new + { + Id = new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e5"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306413563904000000L, + Description = "Luxury crossover SUV that combines cutting-edge technology", + Name = "IX - 5", + Price = 87000m, + ShortId = 9134 + }, + new + { + Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b898815"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Rapid acceleration and dynamic handling", + Name = "Model 3 - 5", + Price = 61990m, + ShortId = 9135 + }, + new + { + Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb95"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Finishes near the top of our luxury electric car rankings.", + Name = "Model S - 5", + Price = 135000m, + ShortId = 9136 + }, + new + { + Id = new Guid("840e113b-5074-4b1c-86bd-e9affb659415"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Heart-pumping acceleration, long drive range", + Name = "Model X - 5", + Price = 138890m, + ShortId = 9137 + }, + new + { + Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c795"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Extensive driving range, lots of standard safety features", + Name = "Model Y - 5", + Price = 67790m, + ShortId = 9138 + }, + new + { + Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d6"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "The Ford Mustang is ranked #1 in Sports Cars", + Name = "Mustang - 6", + Price = 27155m, + ShortId = 9139 + }, + new + { + Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b6"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", + Name = "GT - 6", + Price = 500000m, + ShortId = 9140 + }, + new + { + Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caee6"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", + Name = "Ranger - 6", + Price = 25000m, + ShortId = 9141 + }, + new + { + Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf6"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", + Name = "Raptor - 6", + Price = 53205m, + ShortId = 9142 + }, + new + { + Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7556"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", + Name = "Maverick - 6", + Price = 22470m, + ShortId = 9143 + }, + new + { + Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca26"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful convertible sports car", + Name = "Roadster - 6", + Price = 42800m, + ShortId = 9144 + }, + new + { + Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb36"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "A perfectly adequate family sedan with sharp looks", + Name = "Altima - 6", + Price = 24550m, + ShortId = 9145 + }, + new + { + Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f66"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", + Name = "GT-R - 6", + Price = 113540m, + ShortId = 9146 + }, + new + { + Id = new Guid("362a6638-0031-485d-825f-e8aeae63a336"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A new smart SUV", + Name = "Juke - 6", + Price = 28100m, + ShortId = 9147 + }, + new + { + Id = new Guid("8629931e-e26e-4885-b561-e447197d4b66"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Subcompact luxury crossover SUV", + Name = "H247 - 6", + Price = 54950m, + ShortId = 9148 + }, + new + { + Id = new Guid("a1c1987d-ee6c-41ad-9647-18de45043036"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Battery-electric full-size luxury liftback", + Name = "V297 - 6", + Price = 103360m, + ShortId = 9149 + }, + new + { + Id = new Guid("59eea437-bdf2-4c11-b262-06643b253286"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Ultra-rare and powerful sports car", + Name = "R50 - 6", + Price = 2000000m, + ShortId = 9150 + }, + new + { + Id = new Guid("01d223a3-182d-406a-9722-19dab083f966"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful, sporty variant of the BMW 5 Series", + Name = "M550i - 6", + Price = 77790m, + ShortId = 9151 + }, + new + { + Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a646"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", + Name = "540i - 6", + Price = 60945m, + ShortId = 9152 + }, + new + { + Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb6"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Combines class, spaciousness, and a well-built cabin", + Name = "530e - 6", + Price = 56545m, + ShortId = 9153 + }, + new + { + Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec506"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", + Name = "530i - 6", + Price = 55195m, + ShortId = 9154 + }, + new + { + Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf96"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", + Name = "M850i - 6", + Price = 100045m, + ShortId = 9155 + }, + new + { + Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d6"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", + Name = "X7 - 6", + Price = 77980m, + ShortId = 9156 + }, + new + { + Id = new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e6"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306413563904000000L, + Description = "Luxury crossover SUV that combines cutting-edge technology", + Name = "IX - 6", + Price = 87000m, + ShortId = 9157 + }, + new + { + Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b898816"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Rapid acceleration and dynamic handling", + Name = "Model 3 - 6", + Price = 61990m, + ShortId = 9158 + }, + new + { + Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb96"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Finishes near the top of our luxury electric car rankings.", + Name = "Model S - 6", + Price = 135000m, + ShortId = 9159 + }, + new + { + Id = new Guid("840e113b-5074-4b1c-86bd-e9affb659416"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Heart-pumping acceleration, long drive range", + Name = "Model X - 6", + Price = 138890m, + ShortId = 9160 + }, + new + { + Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c796"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Extensive driving range, lots of standard safety features", + Name = "Model Y - 6", + Price = 67790m, + ShortId = 9161 + }); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.PushNotification.PushNotificationSubscription", b => + { + b.Property("DeviceId") + .HasColumnType("TEXT"); + + b.Property("Auth") + .HasColumnType("TEXT"); + + b.Property("Endpoint") + .HasColumnType("TEXT"); + + b.Property("ExpirationTime") + .HasColumnType("INTEGER"); + + b.Property("P256dh") + .HasColumnType("TEXT"); + + b.Property("Platform") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("PushChannel") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("RenewedOn") + .HasColumnType("INTEGER"); + + b.PrimitiveCollection("Tags") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UserSessionId") + .HasColumnType("TEXT"); + + b.HasKey("DeviceId"); + + b.HasIndex("UserSessionId") + .IsUnique() + .HasFilter("[UserSessionId] IS NOT NULL"); + + b.ToTable("PushNotificationSubscriptions"); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.Todo.TodoItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Date") + .HasColumnType("INTEGER"); + + b.Property("IsDone") + .HasColumnType("INTEGER"); + + b.Property("Title") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("TodoItems"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("FriendlyName") + .HasColumnType("TEXT"); + + b.Property("Xml") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("DataProtectionKeys"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ClaimType") + .HasColumnType("TEXT"); + + b.Property("ClaimValue") + .HasColumnType("TEXT"); + + b.Property("RoleId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ClaimType") + .HasColumnType("TEXT"); + + b.Property("ClaimValue") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("TEXT"); + + b.Property("ProviderKey") + .HasColumnType("TEXT"); + + b.Property("ProviderDisplayName") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("UserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("TEXT"); + + b.Property("RoleId") + .HasColumnType("TEXT"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("UserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("TEXT"); + + b.Property("LoginProvider") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("Value") + .HasColumnType("TEXT"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("UserTokens", (string)null); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.Identity.UserSession", b => + { + b.HasOne("Boilerplate.Server.Api.Models.Identity.User", "User") + .WithMany("Sessions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.Products.Product", b => + { + b.HasOne("Boilerplate.Server.Api.Models.Categories.Category", "Category") + .WithMany("Products") + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.PushNotification.PushNotificationSubscription", b => + { + b.HasOne("Boilerplate.Server.Api.Models.Identity.UserSession", "UserSession") + .WithOne("PushNotificationSubscription") + .HasForeignKey("Boilerplate.Server.Api.Models.PushNotification.PushNotificationSubscription", "UserSessionId") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("UserSession"); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.Todo.TodoItem", b => + { + b.HasOne("Boilerplate.Server.Api.Models.Identity.User", "User") + .WithMany("TodoItems") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Boilerplate.Server.Api.Models.Identity.Role", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Boilerplate.Server.Api.Models.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Boilerplate.Server.Api.Models.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Boilerplate.Server.Api.Models.Identity.Role", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Boilerplate.Server.Api.Models.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Boilerplate.Server.Api.Models.Identity.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.Categories.Category", b => + { + b.Navigation("Products"); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.Identity.User", b => + { + b.Navigation("Sessions"); + + b.Navigation("TodoItems"); + }); + + modelBuilder.Entity("Boilerplate.Server.Api.Models.Identity.UserSession", b => + { + b.Navigation("PushNotificationSubscription"); + }); +#pragma warning restore 612, 618 + } +} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/20250217191441_InitialMigration.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/20250217191441_InitialMigration.cs new file mode 100644 index 0000000000..94f794a3f2 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/20250217191441_InitialMigration.cs @@ -0,0 +1,589 @@ +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace Boilerplate.Server.Api.Data.Migrations; + +/// +public partial class InitialMigration : Migration +{ + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Categories", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", maxLength: 64, nullable: false), + Color = table.Column(type: "TEXT", nullable: true), + ConcurrencyStamp = table.Column(type: "BLOB", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Categories", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "DataProtectionKeys", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + FriendlyName = table.Column(type: "TEXT", nullable: true), + Xml = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_DataProtectionKeys", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Roles", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", maxLength: 50, nullable: true), + NormalizedName = table.Column(type: "TEXT", maxLength: 256, nullable: true), + ConcurrencyStamp = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Roles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Users", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + FullName = table.Column(type: "TEXT", nullable: true), + Gender = table.Column(type: "INTEGER", nullable: true), + BirthDate = table.Column(type: "INTEGER", nullable: true), + ProfileImageName = table.Column(type: "TEXT", nullable: true), + EmailTokenRequestedOn = table.Column(type: "INTEGER", nullable: true), + PhoneNumberTokenRequestedOn = table.Column(type: "INTEGER", nullable: true), + ResetPasswordTokenRequestedOn = table.Column(type: "INTEGER", nullable: true), + TwoFactorTokenRequestedOn = table.Column(type: "INTEGER", nullable: true), + OtpRequestedOn = table.Column(type: "INTEGER", nullable: true), + ElevatedAccessTokenRequestedOn = table.Column(type: "INTEGER", nullable: true), + UserName = table.Column(type: "TEXT", maxLength: 256, nullable: true), + NormalizedUserName = table.Column(type: "TEXT", maxLength: 256, nullable: true), + Email = table.Column(type: "TEXT", maxLength: 256, nullable: true), + NormalizedEmail = table.Column(type: "TEXT", maxLength: 256, nullable: true), + EmailConfirmed = table.Column(type: "INTEGER", nullable: false), + PasswordHash = table.Column(type: "TEXT", nullable: true), + SecurityStamp = table.Column(type: "TEXT", nullable: true), + ConcurrencyStamp = table.Column(type: "TEXT", nullable: true), + PhoneNumber = table.Column(type: "TEXT", nullable: true), + PhoneNumberConfirmed = table.Column(type: "INTEGER", nullable: false), + TwoFactorEnabled = table.Column(type: "INTEGER", nullable: false), + LockoutEnd = table.Column(type: "INTEGER", nullable: true), + LockoutEnabled = table.Column(type: "INTEGER", nullable: false), + AccessFailedCount = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Products", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + ShortId = table.Column(type: "INTEGER", nullable: false), + Name = table.Column(type: "TEXT", maxLength: 64, nullable: false), + Price = table.Column(type: "TEXT", nullable: false), + Description = table.Column(type: "TEXT", maxLength: 512, nullable: true), + CreatedOn = table.Column(type: "INTEGER", nullable: false), + CategoryId = table.Column(type: "TEXT", nullable: false), + ConcurrencyStamp = table.Column(type: "BLOB", nullable: false), + ImageFileName = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Products", x => x.Id); + table.ForeignKey( + name: "FK_Products_Categories_CategoryId", + column: x => x.CategoryId, + principalTable: "Categories", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "RoleClaims", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + RoleId = table.Column(type: "TEXT", nullable: false), + ClaimType = table.Column(type: "TEXT", nullable: true), + ClaimValue = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_RoleClaims", x => x.Id); + table.ForeignKey( + name: "FK_RoleClaims_Roles_RoleId", + column: x => x.RoleId, + principalTable: "Roles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "TodoItems", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Title = table.Column(type: "TEXT", nullable: false), + Date = table.Column(type: "INTEGER", nullable: false), + IsDone = table.Column(type: "INTEGER", nullable: false), + UserId = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_TodoItems", x => x.Id); + table.ForeignKey( + name: "FK_TodoItems_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserClaims", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + UserId = table.Column(type: "TEXT", nullable: false), + ClaimType = table.Column(type: "TEXT", nullable: true), + ClaimValue = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserClaims", x => x.Id); + table.ForeignKey( + name: "FK_UserClaims_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserLogins", + columns: table => new + { + LoginProvider = table.Column(type: "TEXT", nullable: false), + ProviderKey = table.Column(type: "TEXT", nullable: false), + ProviderDisplayName = table.Column(type: "TEXT", nullable: true), + UserId = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_UserLogins", x => new { x.LoginProvider, x.ProviderKey }); + table.ForeignKey( + name: "FK_UserLogins_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserRoles", + columns: table => new + { + UserId = table.Column(type: "TEXT", nullable: false), + RoleId = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_UserRoles", x => new { x.UserId, x.RoleId }); + table.ForeignKey( + name: "FK_UserRoles_Roles_RoleId", + column: x => x.RoleId, + principalTable: "Roles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_UserRoles_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserSessions", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + IP = table.Column(type: "TEXT", nullable: true), + DeviceInfo = table.Column(type: "TEXT", nullable: true), + Address = table.Column(type: "TEXT", nullable: true), + Privileged = table.Column(type: "INTEGER", nullable: false), + StartedOn = table.Column(type: "INTEGER", nullable: false), + RenewedOn = table.Column(type: "INTEGER", nullable: true), + UserId = table.Column(type: "TEXT", nullable: false), + SignalRConnectionId = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserSessions", x => x.Id); + table.ForeignKey( + name: "FK_UserSessions_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserTokens", + columns: table => new + { + UserId = table.Column(type: "TEXT", nullable: false), + LoginProvider = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: false), + Value = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); + table.ForeignKey( + name: "FK_UserTokens_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PushNotificationSubscriptions", + columns: table => new + { + DeviceId = table.Column(type: "TEXT", nullable: false), + Platform = table.Column(type: "TEXT", nullable: false), + PushChannel = table.Column(type: "TEXT", nullable: false), + P256dh = table.Column(type: "TEXT", nullable: true), + Auth = table.Column(type: "TEXT", nullable: true), + Endpoint = table.Column(type: "TEXT", nullable: true), + UserSessionId = table.Column(type: "TEXT", nullable: true), + Tags = table.Column(type: "TEXT", nullable: false), + ExpirationTime = table.Column(type: "INTEGER", nullable: false), + RenewedOn = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_PushNotificationSubscriptions", x => x.DeviceId); + table.ForeignKey( + name: "FK_PushNotificationSubscriptions_UserSessions_UserSessionId", + column: x => x.UserSessionId, + principalTable: "UserSessions", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + }); + + migrationBuilder.InsertData( + table: "Categories", + columns: new[] { "Id", "Color", "ConcurrencyStamp", "Name" }, + values: new object[,] + { + { new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), "#FFCD56", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, "Ford" }, + { new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), "#FF6384", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, "Nissan" }, + { new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), "#4BC0C0", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, "Benz" }, + { new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), "#2B88D8", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, "Tesla" }, + { new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), "#FF9124", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, "BMW" } + }); + + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "AccessFailedCount", "BirthDate", "ConcurrencyStamp", "ElevatedAccessTokenRequestedOn", "Email", "EmailConfirmed", "EmailTokenRequestedOn", "FullName", "Gender", "LockoutEnabled", "LockoutEnd", "NormalizedEmail", "NormalizedUserName", "OtpRequestedOn", "PasswordHash", "PhoneNumber", "PhoneNumberConfirmed", "PhoneNumberTokenRequestedOn", "ProfileImageName", "ResetPasswordTokenRequestedOn", "SecurityStamp", "TwoFactorEnabled", "TwoFactorTokenRequestedOn", "UserName" }, + values: new object[] { new Guid("8ff71671-a1d6-4f97-abb9-d87d7b47d6e7"), 0, 1306790461440000000L, "315e1a26-5b3a-4544-8e91-2760cd28e231", null, "test@bitplatform.dev", true, 1306790461440000000L, "Boilerplate test account", 0, true, null, "TEST@BITPLATFORM.DEV", "TEST", null, "AQAAAAIAAYagAAAAEP0v3wxkdWtMkHA3Pp5/JfS+42/Qto9G05p2mta6dncSK37hPxEHa3PGE4aqN30Aag==", "+31684207362", true, null, null, null, "959ff4a9-4b07-4cc1-8141-c5fc033daf83", false, null, "test" }); + + migrationBuilder.InsertData( + table: "Products", + columns: new[] { "Id", "CategoryId", "ConcurrencyStamp", "CreatedOn", "Description", "ImageFileName", "Name", "Price", "ShortId" }, + values: new object[,] + { + { new Guid("01d223a3-182d-406a-9722-19dab083f961"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful, sporty variant of the BMW 5 Series", null, "M550i - 1", 77790m, 9036 }, + { new Guid("01d223a3-182d-406a-9722-19dab083f962"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful, sporty variant of the BMW 5 Series", null, "M550i - 2", 77790m, 9059 }, + { new Guid("01d223a3-182d-406a-9722-19dab083f963"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful, sporty variant of the BMW 5 Series", null, "M550i - 3", 77790m, 9082 }, + { new Guid("01d223a3-182d-406a-9722-19dab083f964"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful, sporty variant of the BMW 5 Series", null, "M550i - 4", 77790m, 9105 }, + { new Guid("01d223a3-182d-406a-9722-19dab083f965"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful, sporty variant of the BMW 5 Series", null, "M550i - 5", 77790m, 9128 }, + { new Guid("01d223a3-182d-406a-9722-19dab083f966"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful, sporty variant of the BMW 5 Series", null, "M550i - 6", 77790m, 9151 }, + { new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e1"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306413563904000000L, "Luxury crossover SUV that combines cutting-edge technology", null, "IX - 1", 87000m, 9042 }, + { new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e2"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306413563904000000L, "Luxury crossover SUV that combines cutting-edge technology", null, "IX - 2", 87000m, 9065 }, + { new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e3"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306413563904000000L, "Luxury crossover SUV that combines cutting-edge technology", null, "IX - 3", 87000m, 9088 }, + { new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e4"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306413563904000000L, "Luxury crossover SUV that combines cutting-edge technology", null, "IX - 4", 87000m, 9111 }, + { new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e5"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306413563904000000L, "Luxury crossover SUV that combines cutting-edge technology", null, "IX - 5", 87000m, 9134 }, + { new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e6"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306413563904000000L, "Luxury crossover SUV that combines cutting-edge technology", null, "IX - 6", 87000m, 9157 }, + { new Guid("362a6638-0031-485d-825f-e8aeae63a331"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A new smart SUV", null, "Juke - 1", 28100m, 9032 }, + { new Guid("362a6638-0031-485d-825f-e8aeae63a332"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A new smart SUV", null, "Juke - 2", 28100m, 9055 }, + { new Guid("362a6638-0031-485d-825f-e8aeae63a333"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A new smart SUV", null, "Juke - 3", 28100m, 9078 }, + { new Guid("362a6638-0031-485d-825f-e8aeae63a334"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A new smart SUV", null, "Juke - 4", 28100m, 9101 }, + { new Guid("362a6638-0031-485d-825f-e8aeae63a335"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A new smart SUV", null, "Juke - 5", 28100m, 9124 }, + { new Guid("362a6638-0031-485d-825f-e8aeae63a336"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A new smart SUV", null, "Juke - 6", 28100m, 9147 }, + { new Guid("43a82ec1-aab6-445f-83af-a85028417cf1"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "Raptor is a SCORE off-road trophy truck living in a asphalt world", null, "Raptor - 1", 53205m, 9027 }, + { new Guid("43a82ec1-aab6-445f-83af-a85028417cf2"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "Raptor is a SCORE off-road trophy truck living in a asphalt world", null, "Raptor - 2", 53205m, 9050 }, + { new Guid("43a82ec1-aab6-445f-83af-a85028417cf3"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "Raptor is a SCORE off-road trophy truck living in a asphalt world", null, "Raptor - 3", 53205m, 9073 }, + { new Guid("43a82ec1-aab6-445f-83af-a85028417cf4"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "Raptor is a SCORE off-road trophy truck living in a asphalt world", null, "Raptor - 4", 53205m, 9096 }, + { new Guid("43a82ec1-aab6-445f-83af-a85028417cf5"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "Raptor is a SCORE off-road trophy truck living in a asphalt world", null, "Raptor - 5", 53205m, 9119 }, + { new Guid("43a82ec1-aab6-445f-83af-a85028417cf6"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "Raptor is a SCORE off-road trophy truck living in a asphalt world", null, "Raptor - 6", 53205m, 9142 }, + { new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d1"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", null, "X7 - 1", 77980m, 9041 }, + { new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d2"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", null, "X7 - 2", 77980m, 9064 }, + { new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d3"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", null, "X7 - 3", 77980m, 9087 }, + { new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d4"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", null, "X7 - 4", 77980m, 9110 }, + { new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d5"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", null, "X7 - 5", 77980m, 9133 }, + { new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d6"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", null, "X7 - 6", 77980m, 9156 }, + { new Guid("59eea437-bdf2-4c11-b262-06643b253281"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Ultra-rare and powerful sports car", null, "R50 - 1", 2000000m, 9035 }, + { new Guid("59eea437-bdf2-4c11-b262-06643b253282"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Ultra-rare and powerful sports car", null, "R50 - 2", 2000000m, 9058 }, + { new Guid("59eea437-bdf2-4c11-b262-06643b253283"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Ultra-rare and powerful sports car", null, "R50 - 3", 2000000m, 9081 }, + { new Guid("59eea437-bdf2-4c11-b262-06643b253284"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Ultra-rare and powerful sports car", null, "R50 - 4", 2000000m, 9104 }, + { new Guid("59eea437-bdf2-4c11-b262-06643b253285"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Ultra-rare and powerful sports car", null, "R50 - 5", 2000000m, 9127 }, + { new Guid("59eea437-bdf2-4c11-b262-06643b253286"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Ultra-rare and powerful sports car", null, "R50 - 6", 2000000m, 9150 }, + { new Guid("64a2616f-3af6-4248-86cf-4a605095a641"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Luxurious and powerful sedan that combines elegant design with impressive performance", null, "540i - 1", 60945m, 9037 }, + { new Guid("64a2616f-3af6-4248-86cf-4a605095a642"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Luxurious and powerful sedan that combines elegant design with impressive performance", null, "540i - 2", 60945m, 9060 }, + { new Guid("64a2616f-3af6-4248-86cf-4a605095a643"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Luxurious and powerful sedan that combines elegant design with impressive performance", null, "540i - 3", 60945m, 9083 }, + { new Guid("64a2616f-3af6-4248-86cf-4a605095a644"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Luxurious and powerful sedan that combines elegant design with impressive performance", null, "540i - 4", 60945m, 9106 }, + { new Guid("64a2616f-3af6-4248-86cf-4a605095a645"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Luxurious and powerful sedan that combines elegant design with impressive performance", null, "540i - 5", 60945m, 9129 }, + { new Guid("64a2616f-3af6-4248-86cf-4a605095a646"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Luxurious and powerful sedan that combines elegant design with impressive performance", null, "540i - 6", 60945m, 9152 }, + { new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb31"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "A perfectly adequate family sedan with sharp looks", null, "Altima - 1", 24550m, 9030 }, + { new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb32"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "A perfectly adequate family sedan with sharp looks", null, "Altima - 2", 24550m, 9053 }, + { new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb33"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "A perfectly adequate family sedan with sharp looks", null, "Altima - 3", 24550m, 9076 }, + { new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb34"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "A perfectly adequate family sedan with sharp looks", null, "Altima - 4", 24550m, 9099 }, + { new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb35"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "A perfectly adequate family sedan with sharp looks", null, "Altima - 5", 24550m, 9122 }, + { new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb36"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "A perfectly adequate family sedan with sharp looks", null, "Altima - 6", 24550m, 9145 }, + { new Guid("840ba759-bde9-4821-b49b-c981c082bb91"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Finishes near the top of our luxury electric car rankings.", null, "Model S - 1", 135000m, 9044 }, + { new Guid("840ba759-bde9-4821-b49b-c981c082bb92"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Finishes near the top of our luxury electric car rankings.", null, "Model S - 2", 135000m, 9067 }, + { new Guid("840ba759-bde9-4821-b49b-c981c082bb93"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Finishes near the top of our luxury electric car rankings.", null, "Model S - 3", 135000m, 9090 }, + { new Guid("840ba759-bde9-4821-b49b-c981c082bb94"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Finishes near the top of our luxury electric car rankings.", null, "Model S - 4", 135000m, 9113 }, + { new Guid("840ba759-bde9-4821-b49b-c981c082bb95"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Finishes near the top of our luxury electric car rankings.", null, "Model S - 5", 135000m, 9136 }, + { new Guid("840ba759-bde9-4821-b49b-c981c082bb96"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Finishes near the top of our luxury electric car rankings.", null, "Model S - 6", 135000m, 9159 }, + { new Guid("840e113b-5074-4b1c-86bd-e9affb659411"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Heart-pumping acceleration, long drive range", null, "Model X - 1", 138890m, 9045 }, + { new Guid("840e113b-5074-4b1c-86bd-e9affb659412"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Heart-pumping acceleration, long drive range", null, "Model X - 2", 138890m, 9068 }, + { new Guid("840e113b-5074-4b1c-86bd-e9affb659413"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Heart-pumping acceleration, long drive range", null, "Model X - 3", 138890m, 9091 }, + { new Guid("840e113b-5074-4b1c-86bd-e9affb659414"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Heart-pumping acceleration, long drive range", null, "Model X - 4", 138890m, 9114 }, + { new Guid("840e113b-5074-4b1c-86bd-e9affb659415"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Heart-pumping acceleration, long drive range", null, "Model X - 5", 138890m, 9137 }, + { new Guid("840e113b-5074-4b1c-86bd-e9affb659416"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Heart-pumping acceleration, long drive range", null, "Model X - 6", 138890m, 9160 }, + { new Guid("8629931e-e26e-4885-b561-e447197d4b61"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Subcompact luxury crossover SUV", null, "H247 - 1", 54950m, 9033 }, + { new Guid("8629931e-e26e-4885-b561-e447197d4b62"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Subcompact luxury crossover SUV", null, "H247 - 2", 54950m, 9056 }, + { new Guid("8629931e-e26e-4885-b561-e447197d4b63"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Subcompact luxury crossover SUV", null, "H247 - 3", 54950m, 9079 }, + { new Guid("8629931e-e26e-4885-b561-e447197d4b64"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Subcompact luxury crossover SUV", null, "H247 - 4", 54950m, 9102 }, + { new Guid("8629931e-e26e-4885-b561-e447197d4b65"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Subcompact luxury crossover SUV", null, "H247 - 5", 54950m, 9125 }, + { new Guid("8629931e-e26e-4885-b561-e447197d4b66"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Subcompact luxury crossover SUV", null, "H247 - 6", 54950m, 9148 }, + { new Guid("96c73b9c-03df-4f70-ac8d-75c32b898811"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Rapid acceleration and dynamic handling", null, "Model 3 - 1", 61990m, 9043 }, + { new Guid("96c73b9c-03df-4f70-ac8d-75c32b898812"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Rapid acceleration and dynamic handling", null, "Model 3 - 2", 61990m, 9066 }, + { new Guid("96c73b9c-03df-4f70-ac8d-75c32b898813"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Rapid acceleration and dynamic handling", null, "Model 3 - 3", 61990m, 9089 }, + { new Guid("96c73b9c-03df-4f70-ac8d-75c32b898814"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Rapid acceleration and dynamic handling", null, "Model 3 - 4", 61990m, 9112 }, + { new Guid("96c73b9c-03df-4f70-ac8d-75c32b898815"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Rapid acceleration and dynamic handling", null, "Model 3 - 5", 61990m, 9135 }, + { new Guid("96c73b9c-03df-4f70-ac8d-75c32b898816"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "Rapid acceleration and dynamic handling", null, "Model 3 - 6", 61990m, 9158 }, + { new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d1"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "The Ford Mustang is ranked #1 in Sports Cars", null, "Mustang - 1", 27155m, 9024 }, + { new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d2"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "The Ford Mustang is ranked #1 in Sports Cars", null, "Mustang - 2", 27155m, 9047 }, + { new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d3"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "The Ford Mustang is ranked #1 in Sports Cars", null, "Mustang - 3", 27155m, 9070 }, + { new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d4"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "The Ford Mustang is ranked #1 in Sports Cars", null, "Mustang - 4", 27155m, 9093 }, + { new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d5"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "The Ford Mustang is ranked #1 in Sports Cars", null, "Mustang - 5", 27155m, 9116 }, + { new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d6"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "The Ford Mustang is ranked #1 in Sports Cars", null, "Mustang - 6", 27155m, 9139 }, + { new Guid("a1c1987d-ee6c-41ad-9647-18de45043031"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Battery-electric full-size luxury liftback", null, "V297 - 1", 103360m, 9034 }, + { new Guid("a1c1987d-ee6c-41ad-9647-18de45043032"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Battery-electric full-size luxury liftback", null, "V297 - 2", 103360m, 9057 }, + { new Guid("a1c1987d-ee6c-41ad-9647-18de45043033"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Battery-electric full-size luxury liftback", null, "V297 - 3", 103360m, 9080 }, + { new Guid("a1c1987d-ee6c-41ad-9647-18de45043034"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Battery-electric full-size luxury liftback", null, "V297 - 4", 103360m, 9103 }, + { new Guid("a1c1987d-ee6c-41ad-9647-18de45043035"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Battery-electric full-size luxury liftback", null, "V297 - 5", 103360m, 9126 }, + { new Guid("a1c1987d-ee6c-41ad-9647-18de45043036"), new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "Battery-electric full-size luxury liftback", null, "V297 - 6", 103360m, 9149 }, + { new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b1"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", null, "GT - 1", 500000m, 9025 }, + { new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b2"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", null, "GT - 2", 500000m, 9048 }, + { new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b3"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", null, "GT - 3", 500000m, 9071 }, + { new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b4"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", null, "GT - 4", 500000m, 9094 }, + { new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b5"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", null, "GT - 5", 500000m, 9117 }, + { new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b6"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306457800704000000L, "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", null, "GT - 6", 500000m, 9140 }, + { new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb1"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Combines class, spaciousness, and a well-built cabin", null, "530e - 1", 56545m, 9038 }, + { new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb2"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Combines class, spaciousness, and a well-built cabin", null, "530e - 2", 56545m, 9061 }, + { new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb3"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Combines class, spaciousness, and a well-built cabin", null, "530e - 3", 56545m, 9084 }, + { new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb4"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Combines class, spaciousness, and a well-built cabin", null, "530e - 4", 56545m, 9107 }, + { new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb5"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Combines class, spaciousness, and a well-built cabin", null, "530e - 5", 56545m, 9130 }, + { new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb6"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306448953344000000L, "Combines class, spaciousness, and a well-built cabin", null, "530e - 6", 56545m, 9153 }, + { new Guid("b2db9074-a0a9-4054-87e2-206b7a55c791"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Extensive driving range, lots of standard safety features", null, "Model Y - 1", 67790m, 9046 }, + { new Guid("b2db9074-a0a9-4054-87e2-206b7a55c792"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Extensive driving range, lots of standard safety features", null, "Model Y - 2", 67790m, 9069 }, + { new Guid("b2db9074-a0a9-4054-87e2-206b7a55c793"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Extensive driving range, lots of standard safety features", null, "Model Y - 3", 67790m, 9092 }, + { new Guid("b2db9074-a0a9-4054-87e2-206b7a55c794"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Extensive driving range, lots of standard safety features", null, "Model Y - 4", 67790m, 9115 }, + { new Guid("b2db9074-a0a9-4054-87e2-206b7a55c795"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Extensive driving range, lots of standard safety features", null, "Model Y - 5", 67790m, 9138 }, + { new Guid("b2db9074-a0a9-4054-87e2-206b7a55c796"), new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "Extensive driving range, lots of standard safety features", null, "Model Y - 6", 67790m, 9161 }, + { new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca21"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful convertible sports car", null, "Roadster - 1", 42800m, 9029 }, + { new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca22"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful convertible sports car", null, "Roadster - 2", 42800m, 9052 }, + { new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca23"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful convertible sports car", null, "Roadster - 3", 42800m, 9075 }, + { new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca24"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful convertible sports car", null, "Roadster - 4", 42800m, 9098 }, + { new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca25"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful convertible sports car", null, "Roadster - 5", 42800m, 9121 }, + { new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca26"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306466648064000000L, "A powerful convertible sports car", null, "Roadster - 6", 42800m, 9144 }, + { new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf91"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", null, "M850i - 1", 100045m, 9040 }, + { new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf92"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", null, "M850i - 2", 100045m, 9063 }, + { new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf93"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", null, "M850i - 3", 100045m, 9086 }, + { new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf94"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", null, "M850i - 4", 100045m, 9109 }, + { new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf95"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", null, "M850i - 5", 100045m, 9132 }, + { new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf96"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306431258624000000L, "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", null, "M850i - 6", 100045m, 9155 }, + { new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f61"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", null, "GT-R - 1", 113540m, 9031 }, + { new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f62"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", null, "GT-R - 2", 113540m, 9054 }, + { new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f63"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", null, "GT-R - 3", 113540m, 9077 }, + { new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f64"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", null, "GT-R - 4", 113540m, 9100 }, + { new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f65"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", null, "GT-R - 5", 113540m, 9123 }, + { new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f66"), new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", null, "GT-R - 6", 113540m, 9146 }, + { new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7551"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", null, "Maverick - 1", 22470m, 9028 }, + { new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7552"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", null, "Maverick - 2", 22470m, 9051 }, + { new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7553"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", null, "Maverick - 3", 22470m, 9074 }, + { new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7554"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", null, "Maverick - 4", 22470m, 9097 }, + { new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7555"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", null, "Maverick - 5", 22470m, 9120 }, + { new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7556"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306422411264000000L, "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", null, "Maverick - 6", 22470m, 9143 }, + { new Guid("f75325c8-a213-470b-ab93-4677ca4caee1"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", null, "Ranger - 1", 25000m, 9026 }, + { new Guid("f75325c8-a213-470b-ab93-4677ca4caee2"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", null, "Ranger - 2", 25000m, 9049 }, + { new Guid("f75325c8-a213-470b-ab93-4677ca4caee3"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", null, "Ranger - 3", 25000m, 9072 }, + { new Guid("f75325c8-a213-470b-ab93-4677ca4caee4"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", null, "Ranger - 4", 25000m, 9095 }, + { new Guid("f75325c8-a213-470b-ab93-4677ca4caee5"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", null, "Ranger - 5", 25000m, 9118 }, + { new Guid("f75325c8-a213-470b-ab93-4677ca4caee6"), new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", null, "Ranger - 6", 25000m, 9141 }, + { new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec501"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Zippy and fuel-efficient powertrain, and sure-footed handling", null, "530i - 1", 55195m, 9039 }, + { new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec502"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Zippy and fuel-efficient powertrain, and sure-footed handling", null, "530i - 2", 55195m, 9062 }, + { new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec503"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Zippy and fuel-efficient powertrain, and sure-footed handling", null, "530i - 3", 55195m, 9085 }, + { new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec504"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Zippy and fuel-efficient powertrain, and sure-footed handling", null, "530i - 4", 55195m, 9108 }, + { new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec505"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Zippy and fuel-efficient powertrain, and sure-footed handling", null, "530i - 5", 55195m, 9131 }, + { new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec506"), new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, 1306440105984000000L, "Zippy and fuel-efficient powertrain, and sure-footed handling", null, "530i - 6", 55195m, 9154 } + }); + + migrationBuilder.CreateIndex( + name: "IX_Categories_Name", + table: "Categories", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Products_CategoryId", + table: "Products", + column: "CategoryId"); + + migrationBuilder.CreateIndex( + name: "IX_Products_Name", + table: "Products", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Products_ShortId", + table: "Products", + column: "ShortId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_PushNotificationSubscriptions_UserSessionId", + table: "PushNotificationSubscriptions", + column: "UserSessionId", + unique: true, + filter: "[UserSessionId] IS NOT NULL"); + + migrationBuilder.CreateIndex( + name: "IX_RoleClaims_RoleId", + table: "RoleClaims", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "RoleNameIndex", + table: "Roles", + column: "NormalizedName", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_TodoItems_UserId", + table: "TodoItems", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_UserClaims_UserId", + table: "UserClaims", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_UserLogins_UserId", + table: "UserLogins", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_UserRoles_RoleId", + table: "UserRoles", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "EmailIndex", + table: "Users", + column: "NormalizedEmail"); + + migrationBuilder.CreateIndex( + name: "IX_Users_Email", + table: "Users", + column: "Email", + unique: true, + filter: "[Email] IS NOT NULL"); + + migrationBuilder.CreateIndex( + name: "IX_Users_PhoneNumber", + table: "Users", + column: "PhoneNumber", + unique: true, + filter: "[PhoneNumber] IS NOT NULL"); + + migrationBuilder.CreateIndex( + name: "UserNameIndex", + table: "Users", + column: "NormalizedUserName", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_UserSessions_UserId", + table: "UserSessions", + column: "UserId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "DataProtectionKeys"); + + migrationBuilder.DropTable( + name: "Products"); + + migrationBuilder.DropTable( + name: "PushNotificationSubscriptions"); + + migrationBuilder.DropTable( + name: "RoleClaims"); + + migrationBuilder.DropTable( + name: "TodoItems"); + + migrationBuilder.DropTable( + name: "UserClaims"); + + migrationBuilder.DropTable( + name: "UserLogins"); + + migrationBuilder.DropTable( + name: "UserRoles"); + + migrationBuilder.DropTable( + name: "UserTokens"); + + migrationBuilder.DropTable( + name: "Categories"); + + migrationBuilder.DropTable( + name: "UserSessions"); + + migrationBuilder.DropTable( + name: "Roles"); + + migrationBuilder.DropTable( + name: "Users"); + } +} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/AppDbContextModelSnapshot.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/AppDbContextModelSnapshot.cs index cfaf9df780..4fb2fba615 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/AppDbContextModelSnapshot.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/Migrations/AppDbContextModelSnapshot.cs @@ -11,7 +11,7 @@ partial class AppDbContextModelSnapshot : ModelSnapshot protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "9.0.0"); + modelBuilder.HasAnnotation("ProductVersion", "9.0.2"); modelBuilder.Entity("Boilerplate.Server.Api.Models.Categories.Category", b => { @@ -286,6 +286,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasMaxLength(512) .HasColumnType("TEXT"); + b.Property("ImageFileName") + .HasColumnType("TEXT"); + b.Property("Name") .IsRequired() .HasMaxLength(64) @@ -294,8 +297,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Price") .HasColumnType("TEXT"); - b.Property("ImageFileName") - .HasColumnType("TEXT"); + b.Property("ShortId") + .HasColumnType("INTEGER"); b.HasKey("Id"); @@ -304,188 +307,209 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("Name") .IsUnique(); + b.HasIndex("ShortId") + .IsUnique(); + b.ToTable("Products"); b.HasData( new { - Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d4"), + Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d1"), CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306466648064000000L, Description = "The Ford Mustang is ranked #1 in Sports Cars", - Name = "Mustang", - Price = 27155m + Name = "Mustang - 1", + Price = 27155m, + ShortId = 9024 }, new { - Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b4"), + Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b1"), CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306457800704000000L, Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", - Name = "GT", - Price = 500000m + Name = "GT - 1", + Price = 500000m, + ShortId = 9025 }, new { - Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caeef"), + Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caee1"), CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306440105984000000L, Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", - Name = "Ranger", - Price = 25000m + Name = "Ranger - 1", + Price = 25000m, + ShortId = 9026 }, new { - Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf7"), + Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf1"), CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306431258624000000L, Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", - Name = "Raptor", - Price = 53205m + Name = "Raptor - 1", + Price = 53205m, + ShortId = 9027 }, new { - Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7558"), + Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7551"), CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306422411264000000L, Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", - Name = "Maverick", - Price = 22470m + Name = "Maverick - 1", + Price = 22470m, + ShortId = 9028 }, new { - Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca25"), + Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca21"), CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306466648064000000L, Description = "A powerful convertible sports car", - Name = "Roadster", - Price = 42800m + Name = "Roadster - 1", + Price = 42800m, + ShortId = 9029 }, new { - Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb3c"), + Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb31"), CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306457800704000000L, Description = "A perfectly adequate family sedan with sharp looks", - Name = "Altima", - Price = 24550m + Name = "Altima - 1", + Price = 24550m, + ShortId = 9030 }, new { - Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f64"), + Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f61"), CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306440105984000000L, Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", - Name = "GT-R", - Price = 113540m + Name = "GT-R - 1", + Price = 113540m, + ShortId = 9031 }, new { - Id = new Guid("362a6638-0031-485d-825f-e8aeae63a334"), + Id = new Guid("362a6638-0031-485d-825f-e8aeae63a331"), CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306422411264000000L, Description = "A new smart SUV", - Name = "Juke", - Price = 28100m + Name = "Juke - 1", + Price = 28100m, + ShortId = 9032 }, new { - Id = new Guid("8629931e-e26e-4885-b561-e447197d4b69"), + Id = new Guid("8629931e-e26e-4885-b561-e447197d4b61"), CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306466648064000000L, Description = "Subcompact luxury crossover SUV", - Name = "H247", - Price = 54950m + Name = "H247 - 1", + Price = 54950m, + ShortId = 9033 }, new { - Id = new Guid("a1c1987d-ee6c-41ad-9647-18de4504303a"), + Id = new Guid("a1c1987d-ee6c-41ad-9647-18de45043031"), CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306457800704000000L, Description = "Battery-electric full-size luxury liftback", - Name = "V297", - Price = 103360m + Name = "V297 - 1", + Price = 103360m, + ShortId = 9034 }, new { - Id = new Guid("59eea437-bdf2-4c11-b262-06643b253288"), + Id = new Guid("59eea437-bdf2-4c11-b262-06643b253281"), CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306422411264000000L, Description = "Ultra-rare and powerful sports car", - Name = "R50", - Price = 2000000m + Name = "R50 - 1", + Price = 2000000m, + ShortId = 9035 }, new { - Id = new Guid("01d223a3-182d-406a-9722-19dab083f96e"), + Id = new Guid("01d223a3-182d-406a-9722-19dab083f961"), CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306466648064000000L, Description = "A powerful, sporty variant of the BMW 5 Series", - Name = "M550i", - Price = 77790m + Name = "M550i - 1", + Price = 77790m, + ShortId = 9036 }, new { - Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a644"), + Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a641"), CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306457800704000000L, Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", - Name = "540i", - Price = 60945m + Name = "540i - 1", + Price = 60945m, + ShortId = 9037 }, new { - Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb0"), + Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb1"), CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306448953344000000L, Description = "Combines class, spaciousness, and a well-built cabin", - Name = "530e", - Price = 56545m + Name = "530e - 1", + Price = 56545m, + ShortId = 9038 }, new { - Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec502"), + Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec501"), CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306440105984000000L, Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", - Name = "530i", - Price = 55195m + Name = "530i - 1", + Price = 55195m, + ShortId = 9039 }, new { - Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf99"), + Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf91"), CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306431258624000000L, Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", - Name = "M850i", - Price = 100045m + Name = "M850i - 1", + Price = 100045m, + ShortId = 9040 }, new { - Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d5"), + Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d1"), CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306422411264000000L, Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", - Name = "X7", - Price = 77980m + Name = "X7 - 1", + Price = 77980m, + ShortId = 9041 }, new { @@ -494,28 +518,284 @@ protected override void BuildModel(ModelBuilder modelBuilder) ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306413563904000000L, Description = "Luxury crossover SUV that combines cutting-edge technology", - Name = "IX", - Price = 87000m + Name = "IX - 1", + Price = 87000m, + ShortId = 9042 }, new { - Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b89881a"), + Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b898811"), CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306466648064000000L, Description = "Rapid acceleration and dynamic handling", - Name = "Model 3", - Price = 61990m + Name = "Model 3 - 1", + Price = 61990m, + ShortId = 9043 }, new { - Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb96"), + Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb91"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Finishes near the top of our luxury electric car rankings.", + Name = "Model S - 1", + Price = 135000m, + ShortId = 9044 + }, + new + { + Id = new Guid("840e113b-5074-4b1c-86bd-e9affb659411"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Heart-pumping acceleration, long drive range", + Name = "Model X - 1", + Price = 138890m, + ShortId = 9045 + }, + new + { + Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c791"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Extensive driving range, lots of standard safety features", + Name = "Model Y - 1", + Price = 67790m, + ShortId = 9046 + }, + new + { + Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d2"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "The Ford Mustang is ranked #1 in Sports Cars", + Name = "Mustang - 2", + Price = 27155m, + ShortId = 9047 + }, + new + { + Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b2"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", + Name = "GT - 2", + Price = 500000m, + ShortId = 9048 + }, + new + { + Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caee2"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", + Name = "Ranger - 2", + Price = 25000m, + ShortId = 9049 + }, + new + { + Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf2"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", + Name = "Raptor - 2", + Price = 53205m, + ShortId = 9050 + }, + new + { + Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7552"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", + Name = "Maverick - 2", + Price = 22470m, + ShortId = 9051 + }, + new + { + Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca22"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful convertible sports car", + Name = "Roadster - 2", + Price = 42800m, + ShortId = 9052 + }, + new + { + Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb32"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "A perfectly adequate family sedan with sharp looks", + Name = "Altima - 2", + Price = 24550m, + ShortId = 9053 + }, + new + { + Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f62"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", + Name = "GT-R - 2", + Price = 113540m, + ShortId = 9054 + }, + new + { + Id = new Guid("362a6638-0031-485d-825f-e8aeae63a332"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A new smart SUV", + Name = "Juke - 2", + Price = 28100m, + ShortId = 9055 + }, + new + { + Id = new Guid("8629931e-e26e-4885-b561-e447197d4b62"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Subcompact luxury crossover SUV", + Name = "H247 - 2", + Price = 54950m, + ShortId = 9056 + }, + new + { + Id = new Guid("a1c1987d-ee6c-41ad-9647-18de45043032"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Battery-electric full-size luxury liftback", + Name = "V297 - 2", + Price = 103360m, + ShortId = 9057 + }, + new + { + Id = new Guid("59eea437-bdf2-4c11-b262-06643b253282"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Ultra-rare and powerful sports car", + Name = "R50 - 2", + Price = 2000000m, + ShortId = 9058 + }, + new + { + Id = new Guid("01d223a3-182d-406a-9722-19dab083f962"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful, sporty variant of the BMW 5 Series", + Name = "M550i - 2", + Price = 77790m, + ShortId = 9059 + }, + new + { + Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a642"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", + Name = "540i - 2", + Price = 60945m, + ShortId = 9060 + }, + new + { + Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb2"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Combines class, spaciousness, and a well-built cabin", + Name = "530e - 2", + Price = 56545m, + ShortId = 9061 + }, + new + { + Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec502"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", + Name = "530i - 2", + Price = 55195m, + ShortId = 9062 + }, + new + { + Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf92"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", + Name = "M850i - 2", + Price = 100045m, + ShortId = 9063 + }, + new + { + Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d2"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", + Name = "X7 - 2", + Price = 77980m, + ShortId = 9064 + }, + new + { + Id = new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e2"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306413563904000000L, + Description = "Luxury crossover SUV that combines cutting-edge technology", + Name = "IX - 2", + Price = 87000m, + ShortId = 9065 + }, + new + { + Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b898812"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Rapid acceleration and dynamic handling", + Name = "Model 3 - 2", + Price = 61990m, + ShortId = 9066 + }, + new + { + Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb92"), CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306457800704000000L, Description = "Finishes near the top of our luxury electric car rankings.", - Name = "Model S", - Price = 135000m + Name = "Model S - 2", + Price = 135000m, + ShortId = 9067 }, new { @@ -524,18 +804,1032 @@ protected override void BuildModel(ModelBuilder modelBuilder) ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306448953344000000L, Description = "Heart-pumping acceleration, long drive range", - Name = "Model X", - Price = 138890m + Name = "Model X - 2", + Price = 138890m, + ShortId = 9068 }, new { - Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c793"), + Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c792"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Extensive driving range, lots of standard safety features", + Name = "Model Y - 2", + Price = 67790m, + ShortId = 9069 + }, + new + { + Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d3"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "The Ford Mustang is ranked #1 in Sports Cars", + Name = "Mustang - 3", + Price = 27155m, + ShortId = 9070 + }, + new + { + Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b3"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", + Name = "GT - 3", + Price = 500000m, + ShortId = 9071 + }, + new + { + Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caee3"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", + Name = "Ranger - 3", + Price = 25000m, + ShortId = 9072 + }, + new + { + Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf3"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", + Name = "Raptor - 3", + Price = 53205m, + ShortId = 9073 + }, + new + { + Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7553"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", + Name = "Maverick - 3", + Price = 22470m, + ShortId = 9074 + }, + new + { + Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca23"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful convertible sports car", + Name = "Roadster - 3", + Price = 42800m, + ShortId = 9075 + }, + new + { + Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb33"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "A perfectly adequate family sedan with sharp looks", + Name = "Altima - 3", + Price = 24550m, + ShortId = 9076 + }, + new + { + Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f63"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", + Name = "GT-R - 3", + Price = 113540m, + ShortId = 9077 + }, + new + { + Id = new Guid("362a6638-0031-485d-825f-e8aeae63a333"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A new smart SUV", + Name = "Juke - 3", + Price = 28100m, + ShortId = 9078 + }, + new + { + Id = new Guid("8629931e-e26e-4885-b561-e447197d4b63"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Subcompact luxury crossover SUV", + Name = "H247 - 3", + Price = 54950m, + ShortId = 9079 + }, + new + { + Id = new Guid("a1c1987d-ee6c-41ad-9647-18de45043033"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Battery-electric full-size luxury liftback", + Name = "V297 - 3", + Price = 103360m, + ShortId = 9080 + }, + new + { + Id = new Guid("59eea437-bdf2-4c11-b262-06643b253283"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Ultra-rare and powerful sports car", + Name = "R50 - 3", + Price = 2000000m, + ShortId = 9081 + }, + new + { + Id = new Guid("01d223a3-182d-406a-9722-19dab083f963"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful, sporty variant of the BMW 5 Series", + Name = "M550i - 3", + Price = 77790m, + ShortId = 9082 + }, + new + { + Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a643"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", + Name = "540i - 3", + Price = 60945m, + ShortId = 9083 + }, + new + { + Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb3"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Combines class, spaciousness, and a well-built cabin", + Name = "530e - 3", + Price = 56545m, + ShortId = 9084 + }, + new + { + Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec503"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", + Name = "530i - 3", + Price = 55195m, + ShortId = 9085 + }, + new + { + Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf93"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", + Name = "M850i - 3", + Price = 100045m, + ShortId = 9086 + }, + new + { + Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d3"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", + Name = "X7 - 3", + Price = 77980m, + ShortId = 9087 + }, + new + { + Id = new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e3"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306413563904000000L, + Description = "Luxury crossover SUV that combines cutting-edge technology", + Name = "IX - 3", + Price = 87000m, + ShortId = 9088 + }, + new + { + Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b898813"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Rapid acceleration and dynamic handling", + Name = "Model 3 - 3", + Price = 61990m, + ShortId = 9089 + }, + new + { + Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb93"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Finishes near the top of our luxury electric car rankings.", + Name = "Model S - 3", + Price = 135000m, + ShortId = 9090 + }, + new + { + Id = new Guid("840e113b-5074-4b1c-86bd-e9affb659413"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Heart-pumping acceleration, long drive range", + Name = "Model X - 3", + Price = 138890m, + ShortId = 9091 + }, + new + { + Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c793"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Extensive driving range, lots of standard safety features", + Name = "Model Y - 3", + Price = 67790m, + ShortId = 9092 + }, + new + { + Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d4"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "The Ford Mustang is ranked #1 in Sports Cars", + Name = "Mustang - 4", + Price = 27155m, + ShortId = 9093 + }, + new + { + Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b4"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", + Name = "GT - 4", + Price = 500000m, + ShortId = 9094 + }, + new + { + Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caee4"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", + Name = "Ranger - 4", + Price = 25000m, + ShortId = 9095 + }, + new + { + Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf4"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", + Name = "Raptor - 4", + Price = 53205m, + ShortId = 9096 + }, + new + { + Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7554"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", + Name = "Maverick - 4", + Price = 22470m, + ShortId = 9097 + }, + new + { + Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca24"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful convertible sports car", + Name = "Roadster - 4", + Price = 42800m, + ShortId = 9098 + }, + new + { + Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb34"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "A perfectly adequate family sedan with sharp looks", + Name = "Altima - 4", + Price = 24550m, + ShortId = 9099 + }, + new + { + Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f64"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", + Name = "GT-R - 4", + Price = 113540m, + ShortId = 9100 + }, + new + { + Id = new Guid("362a6638-0031-485d-825f-e8aeae63a334"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A new smart SUV", + Name = "Juke - 4", + Price = 28100m, + ShortId = 9101 + }, + new + { + Id = new Guid("8629931e-e26e-4885-b561-e447197d4b64"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Subcompact luxury crossover SUV", + Name = "H247 - 4", + Price = 54950m, + ShortId = 9102 + }, + new + { + Id = new Guid("a1c1987d-ee6c-41ad-9647-18de45043034"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Battery-electric full-size luxury liftback", + Name = "V297 - 4", + Price = 103360m, + ShortId = 9103 + }, + new + { + Id = new Guid("59eea437-bdf2-4c11-b262-06643b253284"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Ultra-rare and powerful sports car", + Name = "R50 - 4", + Price = 2000000m, + ShortId = 9104 + }, + new + { + Id = new Guid("01d223a3-182d-406a-9722-19dab083f964"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful, sporty variant of the BMW 5 Series", + Name = "M550i - 4", + Price = 77790m, + ShortId = 9105 + }, + new + { + Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a644"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", + Name = "540i - 4", + Price = 60945m, + ShortId = 9106 + }, + new + { + Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb4"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Combines class, spaciousness, and a well-built cabin", + Name = "530e - 4", + Price = 56545m, + ShortId = 9107 + }, + new + { + Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec504"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", + Name = "530i - 4", + Price = 55195m, + ShortId = 9108 + }, + new + { + Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf94"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", + Name = "M850i - 4", + Price = 100045m, + ShortId = 9109 + }, + new + { + Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d4"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", + Name = "X7 - 4", + Price = 77980m, + ShortId = 9110 + }, + new + { + Id = new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e4"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306413563904000000L, + Description = "Luxury crossover SUV that combines cutting-edge technology", + Name = "IX - 4", + Price = 87000m, + ShortId = 9111 + }, + new + { + Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b898814"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Rapid acceleration and dynamic handling", + Name = "Model 3 - 4", + Price = 61990m, + ShortId = 9112 + }, + new + { + Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb94"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Finishes near the top of our luxury electric car rankings.", + Name = "Model S - 4", + Price = 135000m, + ShortId = 9113 + }, + new + { + Id = new Guid("840e113b-5074-4b1c-86bd-e9affb659414"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Heart-pumping acceleration, long drive range", + Name = "Model X - 4", + Price = 138890m, + ShortId = 9114 + }, + new + { + Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c794"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Extensive driving range, lots of standard safety features", + Name = "Model Y - 4", + Price = 67790m, + ShortId = 9115 + }, + new + { + Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d5"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "The Ford Mustang is ranked #1 in Sports Cars", + Name = "Mustang - 5", + Price = 27155m, + ShortId = 9116 + }, + new + { + Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b5"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", + Name = "GT - 5", + Price = 500000m, + ShortId = 9117 + }, + new + { + Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caee5"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", + Name = "Ranger - 5", + Price = 25000m, + ShortId = 9118 + }, + new + { + Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf5"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", + Name = "Raptor - 5", + Price = 53205m, + ShortId = 9119 + }, + new + { + Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7555"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", + Name = "Maverick - 5", + Price = 22470m, + ShortId = 9120 + }, + new + { + Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca25"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful convertible sports car", + Name = "Roadster - 5", + Price = 42800m, + ShortId = 9121 + }, + new + { + Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb35"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "A perfectly adequate family sedan with sharp looks", + Name = "Altima - 5", + Price = 24550m, + ShortId = 9122 + }, + new + { + Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f65"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", + Name = "GT-R - 5", + Price = 113540m, + ShortId = 9123 + }, + new + { + Id = new Guid("362a6638-0031-485d-825f-e8aeae63a335"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A new smart SUV", + Name = "Juke - 5", + Price = 28100m, + ShortId = 9124 + }, + new + { + Id = new Guid("8629931e-e26e-4885-b561-e447197d4b65"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Subcompact luxury crossover SUV", + Name = "H247 - 5", + Price = 54950m, + ShortId = 9125 + }, + new + { + Id = new Guid("a1c1987d-ee6c-41ad-9647-18de45043035"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Battery-electric full-size luxury liftback", + Name = "V297 - 5", + Price = 103360m, + ShortId = 9126 + }, + new + { + Id = new Guid("59eea437-bdf2-4c11-b262-06643b253285"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Ultra-rare and powerful sports car", + Name = "R50 - 5", + Price = 2000000m, + ShortId = 9127 + }, + new + { + Id = new Guid("01d223a3-182d-406a-9722-19dab083f965"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful, sporty variant of the BMW 5 Series", + Name = "M550i - 5", + Price = 77790m, + ShortId = 9128 + }, + new + { + Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a645"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", + Name = "540i - 5", + Price = 60945m, + ShortId = 9129 + }, + new + { + Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb5"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Combines class, spaciousness, and a well-built cabin", + Name = "530e - 5", + Price = 56545m, + ShortId = 9130 + }, + new + { + Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec505"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", + Name = "530i - 5", + Price = 55195m, + ShortId = 9131 + }, + new + { + Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf95"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", + Name = "M850i - 5", + Price = 100045m, + ShortId = 9132 + }, + new + { + Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d5"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", + Name = "X7 - 5", + Price = 77980m, + ShortId = 9133 + }, + new + { + Id = new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e5"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306413563904000000L, + Description = "Luxury crossover SUV that combines cutting-edge technology", + Name = "IX - 5", + Price = 87000m, + ShortId = 9134 + }, + new + { + Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b898815"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Rapid acceleration and dynamic handling", + Name = "Model 3 - 5", + Price = 61990m, + ShortId = 9135 + }, + new + { + Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb95"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Finishes near the top of our luxury electric car rankings.", + Name = "Model S - 5", + Price = 135000m, + ShortId = 9136 + }, + new + { + Id = new Guid("840e113b-5074-4b1c-86bd-e9affb659415"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Heart-pumping acceleration, long drive range", + Name = "Model X - 5", + Price = 138890m, + ShortId = 9137 + }, + new + { + Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c795"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Extensive driving range, lots of standard safety features", + Name = "Model Y - 5", + Price = 67790m, + ShortId = 9138 + }, + new + { + Id = new Guid("9a59dda2-7b12-4cc1-9658-d2586eef91d6"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "The Ford Mustang is ranked #1 in Sports Cars", + Name = "Mustang - 6", + Price = 27155m, + ShortId = 9139 + }, + new + { + Id = new Guid("a42914e2-92da-4f0b-aab0-b9572c9671b6"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "The Ford GT is a mid-engine two-seater sports car manufactured and marketed by American automobile manufacturer", + Name = "GT - 6", + Price = 500000m, + ShortId = 9140 + }, + new + { + Id = new Guid("f75325c8-a213-470b-ab93-4677ca4caee6"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Ford Ranger is a nameplate that has been used on multiple model lines of pickup trucks sold by Ford worldwide.", + Name = "Ranger - 6", + Price = 25000m, + ShortId = 9141 + }, + new + { + Id = new Guid("43a82ec1-aab6-445f-83af-a85028417cf6"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "Raptor is a SCORE off-road trophy truck living in a asphalt world", + Name = "Raptor - 6", + Price = 53205m, + ShortId = 9142 + }, + new + { + Id = new Guid("f01b32bb-eccd-43be-aaf3-3c788a7d7556"), + CategoryId = new Guid("31d78bd0-0b4f-4e87-b02f-8f66d4ab2845"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "The Ford Maverick is a compact pickup truck produced by Ford Motor Company.", + Name = "Maverick - 6", + Price = 22470m, + ShortId = 9143 + }, + new + { + Id = new Guid("d53bb159-f4f9-493a-b4dc-215fd765ca26"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful convertible sports car", + Name = "Roadster - 6", + Price = 42800m, + ShortId = 9144 + }, + new + { + Id = new Guid("74bb268f-18cf-45ec-9f2f-30b34b18fb36"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "A perfectly adequate family sedan with sharp looks", + Name = "Altima - 6", + Price = 24550m, + ShortId = 9145 + }, + new + { + Id = new Guid("eb787e1a-7ba8-4708-924b-9f7964fa0f66"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Legendary supercar with AWD, 4 seats, a powerful V6 engine and the latest tech", + Name = "GT-R - 6", + Price = 113540m, + ShortId = 9146 + }, + new + { + Id = new Guid("362a6638-0031-485d-825f-e8aeae63a336"), + CategoryId = new Guid("582b8c19-0709-4dae-b7a6-fa0e704dad3c"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A new smart SUV", + Name = "Juke - 6", + Price = 28100m, + ShortId = 9147 + }, + new + { + Id = new Guid("8629931e-e26e-4885-b561-e447197d4b66"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Subcompact luxury crossover SUV", + Name = "H247 - 6", + Price = 54950m, + ShortId = 9148 + }, + new + { + Id = new Guid("a1c1987d-ee6c-41ad-9647-18de45043036"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Battery-electric full-size luxury liftback", + Name = "V297 - 6", + Price = 103360m, + ShortId = 9149 + }, + new + { + Id = new Guid("59eea437-bdf2-4c11-b262-06643b253286"), + CategoryId = new Guid("6fae78f3-b067-40fb-a2d5-9c8dd5eb2e08"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "Ultra-rare and powerful sports car", + Name = "R50 - 6", + Price = 2000000m, + ShortId = 9150 + }, + new + { + Id = new Guid("01d223a3-182d-406a-9722-19dab083f966"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "A powerful, sporty variant of the BMW 5 Series", + Name = "M550i - 6", + Price = 77790m, + ShortId = 9151 + }, + new + { + Id = new Guid("64a2616f-3af6-4248-86cf-4a605095a646"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Luxurious and powerful sedan that combines elegant design with impressive performance", + Name = "540i - 6", + Price = 60945m, + ShortId = 9152 + }, + new + { + Id = new Guid("ac50dc29-4b7e-4d4d-b23a-4227d91f2bb6"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Combines class, spaciousness, and a well-built cabin", + Name = "530e - 6", + Price = 56545m, + ShortId = 9153 + }, + new + { + Id = new Guid("fb41cc51-9abd-4b45-b0d9-ea8f565ec506"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306440105984000000L, + Description = "Zippy and fuel-efficient powertrain, and sure-footed handling", + Name = "530i - 6", + Price = 55195m, + ShortId = 9154 + }, + new + { + Id = new Guid("e159b1ad-12aa-4e02-a39b-d5e4a32eaf96"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306431258624000000L, + Description = "A Beastly coupe, powered by a fine-tuned 523-horsepower V8 engine", + Name = "M850i - 6", + Price = 100045m, + ShortId = 9155 + }, + new + { + Id = new Guid("4d9cb0f4-1f32-45d5-8c84-d7f15bc569d6"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306422411264000000L, + Description = "A full-size luxury crossover SUV that combines innovative design, an expansive presence, and a range of powerful engines", + Name = "X7 - 6", + Price = 77980m, + ShortId = 9156 + }, + new + { + Id = new Guid("1b22319e-0a58-471e-82b6-75cd8b9d98e6"), + CategoryId = new Guid("ecf0496f-f1e3-4d92-8fe4-0d7fa2b4ffa4"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306413563904000000L, + Description = "Luxury crossover SUV that combines cutting-edge technology", + Name = "IX - 6", + Price = 87000m, + ShortId = 9157 + }, + new + { + Id = new Guid("96c73b9c-03df-4f70-ac8d-75c32b898816"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306466648064000000L, + Description = "Rapid acceleration and dynamic handling", + Name = "Model 3 - 6", + Price = 61990m, + ShortId = 9158 + }, + new + { + Id = new Guid("840ba759-bde9-4821-b49b-c981c082bb96"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306457800704000000L, + Description = "Finishes near the top of our luxury electric car rankings.", + Name = "Model S - 6", + Price = 135000m, + ShortId = 9159 + }, + new + { + Id = new Guid("840e113b-5074-4b1c-86bd-e9affb659416"), + CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), + ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, + CreatedOn = 1306448953344000000L, + Description = "Heart-pumping acceleration, long drive range", + Name = "Model X - 6", + Price = 138890m, + ShortId = 9160 + }, + new + { + Id = new Guid("b2db9074-a0a9-4054-87e2-206b7a55c796"), CategoryId = new Guid("747f6d66-7524-40ca-8494-f65e85b5ee5d"), ConcurrencyStamp = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, CreatedOn = 1306422411264000000L, Description = "Extensive driving range, lots of standard safety features", - Name = "Model Y", - Price = 67790m + Name = "Model Y - 6", + Price = 67790m, + ShortId = 9161 }); }); diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Mappers/ProductsMapper.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Mappers/ProductsMapper.cs index 948779c624..662dd0274e 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Mappers/ProductsMapper.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Mappers/ProductsMapper.cs @@ -20,8 +20,12 @@ public static partial class ProductsMapper // Nevertheless, we employ MapProperty in this instance to illustrate its usage [MapProperty(nameof(@Product.Category.Name), nameof(@ProductDto.CategoryName))] public static partial ProductDto Map(this Product source); + //#if(module == "Admin") + [MapperIgnoreSource(nameof(Product.ShortId))] public static partial Product Map(this ProductDto source); + + [MapperIgnoreSource(nameof(Product.ShortId))] public static partial void Patch(this ProductDto source, Product dest); //#endif } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Models/Products/Product.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Models/Products/Product.cs index 2a21e1eee9..96b10dad7e 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Models/Products/Product.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Models/Products/Product.cs @@ -1,4 +1,5 @@ -using Boilerplate.Server.Api.Models.Categories; +//+:cnd:noEmit +using Boilerplate.Server.Api.Models.Categories; namespace Boilerplate.Server.Api.Models.Products; @@ -6,6 +7,15 @@ public partial class Product { public Guid Id { get; set; } + /// + /// The product's ShortId is used to create a more human-friendly URL. + /// + [Range(0, int.MaxValue)] + public int ShortId { get; set; } + //#if (database != "PostgreSQL" && database != "SqlServer") + = Environment.TickCount; // Using a database sequence for this is recommended. + //#endif + [Required, MaxLength(64)] public string? Name { get; set; } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/.config/dotnet-tools.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/.config/dotnet-tools.json index 124f4d1efb..1176e05f80 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/.config/dotnet-tools.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/.config/dotnet-tools.json @@ -4,7 +4,7 @@ "tools": { "dotnet-ef": { //#if (framework == 'net9.0') - "version": "9.0.1", + "version": "9.0.2", //#else "version": "8.0.12", //#endif diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs index 0419677c8e..2f6d0d219a 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs @@ -236,7 +236,7 @@ private static void UseSiteMap(this WebApplication app) app.MapGet("/products.xml", [AppResponseCache(SharedMaxAge = 60 * 5)] async (IProductViewController controller, HttpContext context) => { var baseUrl = context.Request.GetBaseUrl(); - var products = await controller.WithQuery(new ODataQuery() { Select = $"{nameof(ProductDto.Id)},{nameof(ProductDto.Name)}" }).Get(context.RequestAborted); + var products = await controller.WithQuery(new ODataQuery() { Select = $"{nameof(ProductDto.ShortId)},{nameof(ProductDto.Name)}" }).Get(context.RequestAborted); var productsUrls = products.Select(p => p.PageUrl).ToArray(); productsUrls = CultureInfoManager.MultilingualEnabled diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Controllers/IAppController.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Controllers/IAppController.cs index ffb3751051..214f4198d8 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Controllers/IAppController.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Controllers/IAppController.cs @@ -13,7 +13,7 @@ namespace Boilerplate.Shared { public static class IAppControllerExtensions { - public static TAppController WithQuery(this TAppController controller, string existingQueryString) + public static TAppController WithQuery(this TAppController controller, string? existingQueryString) where TAppController : IAppController { return controller.WithQuery(queryString: AppQueryStringCollection.Parse(existingQueryString)); diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Controllers/Products/IProductViewController.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Controllers/Products/IProductViewController.cs index 7931eddf99..6c46c8c181 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Controllers/Products/IProductViewController.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Controllers/Products/IProductViewController.cs @@ -9,11 +9,11 @@ public interface IProductViewController : IAppController Task> Get(CancellationToken cancellationToken) => default!; [HttpGet("{id}")] - Task Get(Guid id, CancellationToken cancellationToken); + Task Get(int id, CancellationToken cancellationToken); [HttpGet("{id}")] - Task> GetSimilar(Guid id, CancellationToken cancellationToken) => default!; + Task> GetSimilar(int id, CancellationToken cancellationToken) => default!; [HttpGet("{id}")] - Task> GetSiblings(Guid id, CancellationToken cancellationToken) => default!; + Task> GetSiblings(int id, CancellationToken cancellationToken) => default!; } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Dtos/Products/ProductDto.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Dtos/Products/ProductDto.cs index 2965c0a671..c8c7181811 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Dtos/Products/ProductDto.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Dtos/Products/ProductDto.cs @@ -6,6 +6,12 @@ public partial class ProductDto { public Guid Id { get; set; } + /// + /// The product's ShortId is used to create a more human-friendly URL. + /// + [Range(0, int.MaxValue)] + public int ShortId { get; set; } + [Required(ErrorMessage = nameof(AppStrings.RequiredAttribute_ValidationError))] [MaxLength(64, ErrorMessage = nameof(AppStrings.MaxLengthAttribute_InvalidMaxLength))] [Display(Name = nameof(AppStrings.Name))] @@ -54,6 +60,6 @@ private string FormatPrice() } //#if (module == "Sales") - public string PageUrl => $"{Urls.ProductPage}/{Id}/{Uri.EscapeDataString(Name!)}"; + public string PageUrl => $"{Urls.ProductPage}/{ShortId}/{Uri.EscapeDataString(Name!)}"; //#endif } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Services/AppQueryStringCollection.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Services/AppQueryStringCollection.cs index 4b354aeacd..49ae692fc2 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Services/AppQueryStringCollection.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Services/AppQueryStringCollection.cs @@ -15,7 +15,7 @@ public class AppQueryStringCollection() : Dictionary(StringComp return string.Join("&", this.Select(kv => $"{Uri.EscapeDataString(Uri.UnescapeDataString(kv.Key))}={Uri.EscapeDataString(Uri.UnescapeDataString(kv.Value?.ToString() ?? ""))}")); } - public static AppQueryStringCollection Parse(string query) + public static AppQueryStringCollection Parse(string? query) { var qsCollection = new AppQueryStringCollection();