diff --git a/src/VirtoCommerce.CatalogModule.Data/Migrations/20200528061450_ChangeAssociationDeleteBehavior.Designer.cs b/src/VirtoCommerce.CatalogModule.Data/Migrations/20200528061450_ChangeAssociationDeleteBehavior.Designer.cs
new file mode 100644
index 000000000..765d1a652
--- /dev/null
+++ b/src/VirtoCommerce.CatalogModule.Data/Migrations/20200528061450_ChangeAssociationDeleteBehavior.Designer.cs
@@ -0,0 +1,1214 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using VirtoCommerce.CatalogModule.Data.Repositories;
+
+namespace VirtoCommerce.CatalogModule.Data.Migrations
+{
+ [DbContext(typeof(CatalogDbContext))]
+ [Migration("20200528061450_ChangeAssociationDeleteBehavior")]
+ partial class ChangeAssociationDeleteBehavior
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "3.1.2")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.AssetEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("ItemId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("LanguageCode")
+ .HasColumnType("nvarchar(5)")
+ .HasMaxLength(5);
+
+ b.Property("MimeType")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(1024)")
+ .HasMaxLength(1024);
+
+ b.Property("OuterId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Size")
+ .HasColumnType("bigint");
+
+ b.Property("Url")
+ .IsRequired()
+ .HasColumnType("nvarchar(2083)")
+ .HasMaxLength(2083);
+
+ b.HasKey("Id");
+
+ b.HasIndex("ItemId");
+
+ b.ToTable("CatalogAsset");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.AssociationEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("AssociatedCategoryId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("AssociatedItemId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("AssociationType")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("ItemId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("OuterId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Priority")
+ .HasColumnType("int");
+
+ b.Property("Quantity")
+ .HasColumnType("int");
+
+ b.Property("Tags")
+ .HasColumnType("nvarchar(1024)")
+ .HasMaxLength(1024);
+
+ b.HasKey("Id");
+
+ b.HasIndex("AssociatedCategoryId");
+
+ b.HasIndex("AssociatedItemId");
+
+ b.HasIndex("ItemId");
+
+ b.ToTable("Association");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("DefaultLanguage")
+ .IsRequired()
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("OuterId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("OwnerId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Virtual")
+ .HasColumnType("bit");
+
+ b.HasKey("Id");
+
+ b.ToTable("Catalog");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CatalogLanguageEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("CatalogId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("Language")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.HasKey("Id");
+
+ b.HasIndex("CatalogId");
+
+ b.ToTable("CatalogLanguage");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("CatalogId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Code")
+ .IsRequired()
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("EndDate")
+ .HasColumnType("datetime2");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("OuterId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("ParentCategoryId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Priority")
+ .HasColumnType("int");
+
+ b.Property("StartDate")
+ .HasColumnType("datetime2");
+
+ b.Property("TaxType")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.HasKey("Id");
+
+ b.HasIndex("CatalogId");
+
+ b.HasIndex("ParentCategoryId");
+
+ b.ToTable("Category");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CategoryItemRelationEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("CatalogId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("CategoryId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("ItemId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("Priority")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CatalogId");
+
+ b.HasIndex("CategoryId");
+
+ b.HasIndex("ItemId");
+
+ b.ToTable("CategoryItemRelation");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CategoryRelationEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("SourceCategoryId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("TargetCatalogId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("TargetCategoryId")
+ .HasColumnType("nvarchar(128)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("SourceCategoryId");
+
+ b.HasIndex("TargetCatalogId");
+
+ b.HasIndex("TargetCategoryId");
+
+ b.ToTable("CategoryRelation");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.EditorialReviewEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Comments")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Content")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("ItemId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("Locale")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Priority")
+ .HasColumnType("int");
+
+ b.Property("ReviewState")
+ .HasColumnType("int");
+
+ b.Property("Source")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.HasKey("Id");
+
+ b.HasIndex("ItemId");
+
+ b.ToTable("EditorialReview");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.ImageEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("CategoryId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Group")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ItemId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("LanguageCode")
+ .HasColumnType("nvarchar(5)")
+ .HasMaxLength(5);
+
+ b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(1024)")
+ .HasMaxLength(1024);
+
+ b.Property("OuterId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("SortOrder")
+ .HasColumnType("int");
+
+ b.Property("Url")
+ .IsRequired()
+ .HasColumnType("nvarchar(2083)")
+ .HasMaxLength(2083);
+
+ b.HasKey("Id");
+
+ b.HasIndex("CategoryId");
+
+ b.HasIndex("ItemId");
+
+ b.ToTable("CatalogImage");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("AvailabilityRule")
+ .HasColumnType("int");
+
+ b.Property("CatalogId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("CategoryId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("Code")
+ .IsRequired()
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("DownloadExpiration")
+ .HasColumnType("datetime2");
+
+ b.Property("DownloadType")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("EnableReview")
+ .HasColumnType("bit");
+
+ b.Property("EndDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Gtin")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("HasUserAgreement")
+ .HasColumnType("bit");
+
+ b.Property("Height")
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("IsBuyable")
+ .HasColumnType("bit");
+
+ b.Property("Length")
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("ManufacturerPartNumber")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("MaxNumberOfDownload")
+ .HasColumnType("int");
+
+ b.Property("MaxQuantity")
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("MeasureUnit")
+ .HasColumnType("nvarchar(32)")
+ .HasMaxLength(32);
+
+ b.Property("MinQuantity")
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(1024)")
+ .HasMaxLength(1024);
+
+ b.Property("OuterId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("PackageType")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("ParentId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("Priority")
+ .HasColumnType("int");
+
+ b.Property("ProductType")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ShippingType")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("StartDate")
+ .HasColumnType("datetime2");
+
+ b.Property("TaxType")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("TrackInventory")
+ .HasColumnType("bit");
+
+ b.Property("Vendor")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Weight")
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("WeightUnit")
+ .HasColumnType("nvarchar(32)")
+ .HasMaxLength(32);
+
+ b.Property("Width")
+ .HasColumnType("decimal(18,2)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CategoryId");
+
+ b.HasIndex("Code")
+ .IsUnique();
+
+ b.HasIndex("ParentId");
+
+ b.HasIndex("CatalogId", "ParentId")
+ .HasName("IX_CatalogId_ParentId");
+
+ b.ToTable("Item");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyAttributeEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Priority")
+ .HasColumnType("int");
+
+ b.Property("PropertyAttributeName")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("PropertyAttributeValue")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("PropertyId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PropertyId");
+
+ b.ToTable("PropertyAttribute");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyDictionaryItemEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Alias")
+ .IsRequired()
+ .HasColumnType("nvarchar(512)")
+ .HasMaxLength(512);
+
+ b.Property("PropertyId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("SortOrder")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PropertyId");
+
+ b.HasIndex("Alias", "PropertyId")
+ .IsUnique()
+ .HasName("IX_AliasAndPropertyId");
+
+ b.ToTable("PropertyDictionaryItem");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyDictionaryValueEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("DictionaryItemId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("Locale")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("Value")
+ .HasColumnType("nvarchar(512)")
+ .HasMaxLength(512);
+
+ b.HasKey("Id");
+
+ b.HasIndex("DictionaryItemId");
+
+ b.ToTable("PropertyDictionaryValue");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyDisplayNameEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Locale")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(512)")
+ .HasMaxLength(512);
+
+ b.Property("PropertyId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PropertyId");
+
+ b.ToTable("PropertyDisplayName");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("AllowAlias")
+ .HasColumnType("bit");
+
+ b.Property("CatalogId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("CategoryId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("IsEnum")
+ .HasColumnType("bit");
+
+ b.Property("IsHidden")
+ .HasColumnType("bit");
+
+ b.Property("IsInput")
+ .HasColumnType("bit");
+
+ b.Property("IsKey")
+ .HasColumnType("bit");
+
+ b.Property("IsLocaleDependant")
+ .HasColumnType("bit");
+
+ b.Property("IsMultiValue")
+ .HasColumnType("bit");
+
+ b.Property("IsRequired")
+ .HasColumnType("bit");
+
+ b.Property("IsSale")
+ .HasColumnType("bit");
+
+ b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("OuterId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("PropertyValueType")
+ .HasColumnType("int");
+
+ b.Property("TargetType")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.HasKey("Id");
+
+ b.HasIndex("CatalogId");
+
+ b.HasIndex("CategoryId");
+
+ b.ToTable("Property");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyValidationRuleEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("CharCountMax")
+ .HasColumnType("int");
+
+ b.Property("CharCountMin")
+ .HasColumnType("int");
+
+ b.Property("IsUnique")
+ .HasColumnType("bit");
+
+ b.Property("PropertyId")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("RegExp")
+ .HasColumnType("nvarchar(2048)")
+ .HasMaxLength(2048);
+
+ b.HasKey("Id");
+
+ b.HasIndex("PropertyId");
+
+ b.ToTable("PropertyValidationRule");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyValueEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("BooleanValue")
+ .HasColumnType("bit");
+
+ b.Property("CatalogId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("CategoryId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("DateTimeValue")
+ .HasColumnType("datetime2");
+
+ b.Property("DecimalValue")
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("DictionaryItemId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("IntegerValue")
+ .HasColumnType("int");
+
+ b.Property("ItemId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("Locale")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("LongTextValue")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("OuterId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("ShortTextValue")
+ .HasColumnType("nvarchar(512)")
+ .HasMaxLength(512);
+
+ b.Property("ValueType")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CatalogId");
+
+ b.HasIndex("CategoryId");
+
+ b.HasIndex("DictionaryItemId");
+
+ b.HasIndex("ItemId");
+
+ b.ToTable("PropertyValue");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.SeoInfoEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("CategoryId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("ImageAltDescription")
+ .HasColumnType("nvarchar(255)")
+ .HasMaxLength(255);
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("ItemId")
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("Keyword")
+ .IsRequired()
+ .HasColumnType("nvarchar(255)")
+ .HasMaxLength(255);
+
+ b.Property("Language")
+ .HasColumnType("nvarchar(5)")
+ .HasMaxLength(5);
+
+ b.Property("MetaDescription")
+ .HasColumnType("nvarchar(1024)")
+ .HasMaxLength(1024);
+
+ b.Property("MetaKeywords")
+ .HasColumnType("nvarchar(255)")
+ .HasMaxLength(255);
+
+ b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
+
+ b.Property("StoreId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Title")
+ .HasColumnType("nvarchar(255)")
+ .HasMaxLength(255);
+
+ b.HasKey("Id");
+
+ b.HasIndex("CategoryId");
+
+ b.HasIndex("ItemId");
+
+ b.ToTable("CatalogSeoInfo");
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.AssetEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "CatalogItem")
+ .WithMany("Assets")
+ .HasForeignKey("ItemId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.AssociationEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "AssociatedCategory")
+ .WithMany()
+ .HasForeignKey("AssociatedCategoryId")
+ .OnDelete(DeleteBehavior.Restrict);
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "AssociatedItem")
+ .WithMany("ReferencedAssociations")
+ .HasForeignKey("AssociatedItemId")
+ .OnDelete(DeleteBehavior.Restrict);
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "Item")
+ .WithMany("Associations")
+ .HasForeignKey("ItemId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CatalogLanguageEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "Catalog")
+ .WithMany("CatalogLanguages")
+ .HasForeignKey("CatalogId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "Catalog")
+ .WithMany()
+ .HasForeignKey("CatalogId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "ParentCategory")
+ .WithMany()
+ .HasForeignKey("ParentCategoryId")
+ .OnDelete(DeleteBehavior.Restrict);
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CategoryItemRelationEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "Catalog")
+ .WithMany()
+ .HasForeignKey("CatalogId")
+ .OnDelete(DeleteBehavior.Restrict)
+ .IsRequired();
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "Category")
+ .WithMany()
+ .HasForeignKey("CategoryId")
+ .OnDelete(DeleteBehavior.Restrict);
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "CatalogItem")
+ .WithMany("CategoryLinks")
+ .HasForeignKey("ItemId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CategoryRelationEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "SourceCategory")
+ .WithMany("OutgoingLinks")
+ .HasForeignKey("SourceCategoryId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "TargetCatalog")
+ .WithMany("IncomingLinks")
+ .HasForeignKey("TargetCatalogId")
+ .OnDelete(DeleteBehavior.Restrict);
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "TargetCategory")
+ .WithMany("IncomingLinks")
+ .HasForeignKey("TargetCategoryId")
+ .OnDelete(DeleteBehavior.Restrict);
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.EditorialReviewEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "CatalogItem")
+ .WithMany("EditorialReviews")
+ .HasForeignKey("ItemId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.ImageEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "Category")
+ .WithMany("Images")
+ .HasForeignKey("CategoryId")
+ .OnDelete(DeleteBehavior.Restrict);
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "CatalogItem")
+ .WithMany("Images")
+ .HasForeignKey("ItemId")
+ .OnDelete(DeleteBehavior.Restrict);
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "Catalog")
+ .WithMany()
+ .HasForeignKey("CatalogId")
+ .OnDelete(DeleteBehavior.Restrict)
+ .IsRequired();
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "Category")
+ .WithMany()
+ .HasForeignKey("CategoryId")
+ .OnDelete(DeleteBehavior.Restrict);
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "Parent")
+ .WithMany("Childrens")
+ .HasForeignKey("ParentId")
+ .OnDelete(DeleteBehavior.Restrict);
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyAttributeEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.PropertyEntity", "Property")
+ .WithMany("PropertyAttributes")
+ .HasForeignKey("PropertyId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyDictionaryItemEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.PropertyEntity", "Property")
+ .WithMany("DictionaryItems")
+ .HasForeignKey("PropertyId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyDictionaryValueEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.PropertyDictionaryItemEntity", "DictionaryItem")
+ .WithMany("DictionaryItemValues")
+ .HasForeignKey("DictionaryItemId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyDisplayNameEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.PropertyEntity", "Property")
+ .WithMany("DisplayNames")
+ .HasForeignKey("PropertyId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "Catalog")
+ .WithMany("Properties")
+ .HasForeignKey("CatalogId")
+ .OnDelete(DeleteBehavior.Restrict);
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "Category")
+ .WithMany("Properties")
+ .HasForeignKey("CategoryId")
+ .OnDelete(DeleteBehavior.Restrict);
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyValidationRuleEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.PropertyEntity", "Property")
+ .WithMany("ValidationRules")
+ .HasForeignKey("PropertyId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyValueEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "Catalog")
+ .WithMany("CatalogPropertyValues")
+ .HasForeignKey("CatalogId")
+ .OnDelete(DeleteBehavior.Restrict);
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "Category")
+ .WithMany("CategoryPropertyValues")
+ .HasForeignKey("CategoryId")
+ .OnDelete(DeleteBehavior.Restrict);
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.PropertyDictionaryItemEntity", "DictionaryItem")
+ .WithMany()
+ .HasForeignKey("DictionaryItemId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "CatalogItem")
+ .WithMany("ItemPropertyValues")
+ .HasForeignKey("ItemId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+
+ modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.SeoInfoEntity", b =>
+ {
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "Category")
+ .WithMany("SeoInfos")
+ .HasForeignKey("CategoryId")
+ .OnDelete(DeleteBehavior.Restrict);
+
+ b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "Item")
+ .WithMany("SeoInfos")
+ .HasForeignKey("ItemId")
+ .OnDelete(DeleteBehavior.Restrict);
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/VirtoCommerce.CatalogModule.Data/Migrations/20200528061450_ChangeAssociationDeleteBehavior.cs b/src/VirtoCommerce.CatalogModule.Data/Migrations/20200528061450_ChangeAssociationDeleteBehavior.cs
new file mode 100644
index 000000000..3f6195830
--- /dev/null
+++ b/src/VirtoCommerce.CatalogModule.Data/Migrations/20200528061450_ChangeAssociationDeleteBehavior.cs
@@ -0,0 +1,37 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace VirtoCommerce.CatalogModule.Data.Migrations
+{
+ public partial class ChangeAssociationDeleteBehavior : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropForeignKey(
+ name: "FK_Association_Item_ItemId",
+ table: "Association");
+
+ migrationBuilder.AddForeignKey(
+ name: "FK_Association_Item_ItemId",
+ table: "Association",
+ column: "ItemId",
+ principalTable: "Item",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropForeignKey(
+ name: "FK_Association_Item_ItemId",
+ table: "Association");
+
+ migrationBuilder.AddForeignKey(
+ name: "FK_Association_Item_ItemId",
+ table: "Association",
+ column: "ItemId",
+ principalTable: "Item",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Restrict);
+ }
+ }
+}
diff --git a/src/VirtoCommerce.CatalogModule.Data/Migrations/CatalogDbContextModelSnapshot.cs b/src/VirtoCommerce.CatalogModule.Data/Migrations/CatalogDbContextModelSnapshot.cs
index f8c6a6a2e..0ff4a0ce0 100644
--- a/src/VirtoCommerce.CatalogModule.Data/Migrations/CatalogDbContextModelSnapshot.cs
+++ b/src/VirtoCommerce.CatalogModule.Data/Migrations/CatalogDbContextModelSnapshot.cs
@@ -1,8 +1,9 @@
-//
+//
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using VirtoCommerce.CatalogModule.Data.Repositories;
namespace VirtoCommerce.CatalogModule.Data.Migrations
@@ -14,7 +15,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
- .HasAnnotation("ProductVersion", "2.2.3-servicing-35854")
+ .HasAnnotation("ProductVersion", "3.1.2")
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
@@ -22,37 +23,49 @@ protected override void BuildModel(ModelBuilder modelBuilder)
{
b.Property("Id")
.ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
.HasMaxLength(128);
b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
.HasMaxLength(64);
- b.Property("CreatedDate");
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
b.Property("ItemId")
- .IsRequired();
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
b.Property("LanguageCode")
+ .HasColumnType("nvarchar(5)")
.HasMaxLength(5);
b.Property("MimeType")
+ .HasColumnType("nvarchar(128)")
.HasMaxLength(128);
b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
.HasMaxLength(64);
- b.Property("ModifiedDate");
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
b.Property("Name")
+ .HasColumnType("nvarchar(1024)")
.HasMaxLength(1024);
b.Property("OuterId")
+ .HasColumnType("nvarchar(128)")
.HasMaxLength(128);
- b.Property("Size");
+ b.Property("Size")
+ .HasColumnType("bigint");
b.Property("Url")
.IsRequired()
+ .HasColumnType("nvarchar(2083)")
.HasMaxLength(2083);
b.HasKey("Id");
@@ -66,37 +79,50 @@ protected override void BuildModel(ModelBuilder modelBuilder)
{
b.Property("Id")
.ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
.HasMaxLength(128);
- b.Property("AssociatedCategoryId");
+ b.Property("AssociatedCategoryId")
+ .HasColumnType("nvarchar(128)");
- b.Property("AssociatedItemId");
+ b.Property("AssociatedItemId")
+ .HasColumnType("nvarchar(128)");
b.Property("AssociationType")
.IsRequired()
+ .HasColumnType("nvarchar(128)")
.HasMaxLength(128);
b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
.HasMaxLength(64);
- b.Property("CreatedDate");
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
b.Property("ItemId")
- .IsRequired();
+ .IsRequired()
+ .HasColumnType("nvarchar(128)");
b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
.HasMaxLength(64);
- b.Property("ModifiedDate");
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
b.Property("OuterId")
+ .HasColumnType("nvarchar(128)")
.HasMaxLength(128);
- b.Property("Priority");
+ b.Property("Priority")
+ .HasColumnType("int");
- b.Property("Quantity");
+ b.Property("Quantity")
+ .HasColumnType("int");
b.Property("Tags")
+ .HasColumnType("nvarchar(1024)")
.HasMaxLength(1024);
b.HasKey("Id");
@@ -114,33 +140,43 @@ protected override void BuildModel(ModelBuilder modelBuilder)
{
b.Property("Id")
.ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
.HasMaxLength(128);
b.Property("CreatedBy")
+ .HasColumnType("nvarchar(64)")
.HasMaxLength(64);
- b.Property("CreatedDate");
+ b.Property("CreatedDate")
+ .HasColumnType("datetime2");
b.Property("DefaultLanguage")
.IsRequired()
+ .HasColumnType("nvarchar(64)")
.HasMaxLength(64);
b.Property("ModifiedBy")
+ .HasColumnType("nvarchar(64)")
.HasMaxLength(64);
- b.Property("ModifiedDate");
+ b.Property("ModifiedDate")
+ .HasColumnType("datetime2");
b.Property("Name")
.IsRequired()
+ .HasColumnType("nvarchar(128)")
.HasMaxLength(128);
b.Property("OuterId")
+ .HasColumnType("nvarchar(128)")
.HasMaxLength(128);
b.Property("OwnerId")
+ .HasColumnType("nvarchar(128)")
.HasMaxLength(128);
- b.Property("Virtual");
+ b.Property("Virtual")
+ .HasColumnType("bit");
b.HasKey("Id");
@@ -151,12 +187,15 @@ protected override void BuildModel(ModelBuilder modelBuilder)
{
b.Property("Id")
.ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(128)")
.HasMaxLength(128);
b.Property