Open Closed

abp suite build error #9266


User avatar
0
829098@qq.com created
  • abp suite : v9.1.0 I Can't Build Code,BaseCountryInfo Is Entity, Not is FullAuditedAggregateRoot My EfCore DbContext builder.Entity<BaseCountryInfo>(b => { b.ToTable(MicroShopBaseDbProperties.DbTablePrefix + "BaseCountryInfos", MicroShopBaseDbProperties.DbSchema); b.ConfigureByConvention(); b.Property(x => x.TenantId).HasColumnName(nameof(BaseCountryInfo.TenantId)); b.Property(x => x.CountryName).HasColumnName(nameof(BaseCountryInfo.CountryName)).IsRequired(); b.Property(x => x.CountryCode).HasColumnName(nameof(BaseCountryInfo.CountryCode)).IsRequired(); });

{ "Id": "3ddda7fa-e708-4dc5-888a-193a515549bb", "Name": "BaseCountryInfo", "OriginalName": "BaseCountryInfo", "NamePlural": "BaseCountryInfos", "DatabaseTableName": "BaseCountryInfos", "Namespace": "BaseCountryInfos", "Type": 1, "MasterEntityName": null, "MasterEntity": null, "BaseClass": "Entity", "PageTitle": "BaseCountryInfos", "MenuIcon": "file-alt", "PrimaryKeyType": "Guid", "PreserveCustomCode": false, "IsMultiTenant": true, "CheckConcurrency": false, "BulkDeleteEnabled": false, "ShouldCreateUserInterface": false, "ShouldCreateBackend": true, "ShouldExportExcel": false, "ShouldAddMigration": true, "ShouldUpdateDatabase": true, "CreateTests": false, "Properties": [ { "Id": "ff2290d3-7d72-4f7a-beb0-ea4996541ab7", "Name": "CountryName", "Type": "string", "EnumType": "", "EnumNamespace": "", "EnumAngularImport": "shared/enums", "EnumFilePath": null, "DefaultValue": null, "IsNullable": false, "IsRequired": true, "IsFilterable": true, "AllowEmptyStrings": false, "IsTextArea": false, "MinLength": null, "MaxLength": null, "SortOrder": 0, "SortType": 0, "Regex": "", "EmailValidation": false, "ShowOnList": false, "ShowOnCreateModal": true, "ShowOnEditModal": false, "ReadonlyOnEditModal": false, "EnumValues": null, "IsSelected": true, "MaxFileSize": null, "OrdinalIndex": 0 }, { "Id": "d67d54f0-1856-4c7f-b58c-7303be6fd2b7", "Name": "CountryCode", "Type": "string", "EnumType": "", "EnumNamespace": "", "EnumAngularImport": "shared/enums", "EnumFilePath": null, "DefaultValue": null, "IsNullable": false, "IsRequired": true, "IsFilterable": true, "AllowEmptyStrings": false, "IsTextArea": false, "MinLength": null, "MaxLength": null, "SortOrder": 0, "SortType": 0, "Regex": "", "EmailValidation": false, "ShowOnList": false, "ShowOnCreateModal": true, "ShowOnEditModal": false, "ReadonlyOnEditModal": false, "EnumValues": null, "IsSelected": true, "MaxFileSize": null, "OrdinalIndex": 0 } ], "NavigationProperties": [], "NavigationConnections": [], "ChildEntities": [], "PhysicalFileName": "BaseCountryInfo.json" }


7 Answer(s)
  • User Avatar
    0
    EngincanV created
    Support Team .NET Developer

    Hi, I'm unable to reproduce the problem. It successfully generated pages, and I could update my database.

    Can you share the content of BaseCountryInfo.cs?

  • User Avatar
    0
    EngincanV created
    Support Team .NET Developer

    Could this change be the reason for the issue?

    Yes, this is likely the reason for this problem. I'll confirm that but, probably this is the reason.

  • User Avatar
    0
    EngincanV created
    Support Team .NET Developer

    I have created the A.sln solution using ABP Studio (which includes AuthServer, HostApi, and Web). A.sln is my host application. Next, I need to create the B.sln solution, which is my Module. I need to install Module B into Solution A. I would like to use the NuGet method to install the module. How can I publish Module B to the NuGet dropdown list in ABP Studio? By default, the NuGet list does not include my module (please refer to the screenshot attached).

    Hi, in the NuGet tab, we only list ABP's own modules, so it can be directly added to the related layers into your solution. So, if your ModuleB is published in NuGet, then you should add it yourself.

  • User Avatar
    0
    829098@qq.com created

    System.InvalidOperationException:“Cannot use table 'BaseBrands' for entity type 'BaseBrand' since it is being used for entity type 'BaseBrand' and potentially other entity types, but there is no linking relationship. Add a foreign key to 'BaseBrand' on the primary key properties and pointing to the primary key on another entity type mapped to 'BaseBrands'.”

    The root of the problem lies in the migration process.I created theBaseBrandsentity in Module B,but ABP Suite only generates DDD(Domain-Driven Design)code and does not create migrations.Therefore,I need to create theBaseBrandsentity again in the host Solution A using ABP Suite to generate the migration.However,the error occurs in the migration process.In Solution A,in theOnModelCreatingmethod of theXShop.EntityFrameworkCorelayer,thebuilder.ConfigureXShopBase()method is executed.In Module B'sXShopBase.EntityFrameworkCorelayer,theXShopBaseDbContextmethod implements the following:

    public static void ConfigureXShopBase(
        this ModelBuilder builder)
    {
        Check.NotNull(builder, nameof(builder));
        
        builder.Entity<BaseBrand>(b =>
        {
            b.ToTable(XShopBaseDbProperties.DbTablePrefix + "BaseBrands", XShopBaseDbProperties.DbSchema);
            b.ConfigureByConvention();
            b.Property(x => x.TenantId).HasColumnName(nameof(BaseBrand.TenantId));
            b.Property(x => x.BrandName).HasColumnName(nameof(BaseBrand.BrandName)).IsRequired();
            b.Property(x => x.BrandOtherName).HasColumnName(nameof(BaseBrand.BrandOtherName));
            b.Property(x => x.CompanyName).HasColumnName(nameof(BaseBrand.CompanyName));
            b.Property(x => x.BrandStatus).HasColumnName(nameof(BaseBrand.BrandStatus));
            b.Property(x => x.BrandSort).HasColumnName(nameof(BaseBrand.BrandSort));
            b.Property(x => x.BrandLogo).HasColumnName(nameof(BaseBrand.BrandLogo));
            b.Property(x => x.BrandMemo).HasColumnName(nameof(BaseBrand.BrandMemo));
        });
    }
    

    Explanation:

    • Problem Context:The issue arises because theBaseBrandsentity was initially created in Module B using ABP Suite,which only generates DDD code without creating database migrations.To create the necessary migration,the entity needs to be re-created in Solution A using ABP Suite.However,this leads to conflicts in the migration process.

    • Code Explanation:TheConfigureXShopBasemethod is called in theOnModelCreatingmethod of theXShop.EntityFrameworkCorelayer in Solution A.This method is defined in Module B'sXShopBase.EntityFrameworkCorelayer.It configures theBaseBrandentity,specifying the table name,schema,and various properties with their respective column names and constraints.

    public class BaseBrand : FullAuditedAggregateRoot&lt;Guid&gt;, IMultiTenant
    {
        public virtual Guid? TenantId { get; set; }
    
        [NotNull]
        public virtual string BrandName { get; set; }
    
        [CanBeNull]
        public virtual string? BrandOtherName { get; set; }
    
        [CanBeNull]
        public virtual string? CompanyName { get; set; }
    
        public virtual bool BrandStatus { get; set; }
    
        public virtual int BrandSort { get; set; }
    
        [CanBeNull]
        public virtual string? BrandLogo { get; set; }
    
        [CanBeNull]
        public virtual string? BrandMemo { get; set; }
    
        protected BaseBrand()
        {
    
        }
    
        public BaseBrand(Guid id, string brandName, bool brandStatus, int brandSort, string? brandOtherName = null, string? companyName = null, string? brandLogo = null, string? brandMemo = null)
        {
    
            Id = id;
            Check.NotNull(brandName, nameof(brandName));
            BrandName = brandName;
            BrandStatus = brandStatus;
            BrandSort = brandSort;
            BrandOtherName = brandOtherName;
            CompanyName = companyName;
            BrandLogo = brandLogo;
            BrandMemo = brandMemo;
        }
    
    }
    

    }

  • User Avatar
    0
    EngincanV created
    Support Team .NET Developer

    Hi, https://abp.io/qa/questions/9266/3a19c279-d6b1-c6b8-77ca-a427e652e7d1 did you try is this the root cause? I'll try it today but if you already tried, maybe it might be the reason, can you confirm?

  • User Avatar
    0
    829098@qq.com created

    I have resolved the issue.The problem was with theDbTablePrefixin both Solution A and Module B.I had setpublic static string DbTablePrefix { get; set; } = "";which caused the table prefix to be empty.As a result,when generating the code and creating tables in Solution A,it attempted to create tables with the same names twice,leading to duplicate table names and failure in creating migrations.The solution was to set different values forDbTablePrefixin Solution A and Module B.

  • User Avatar
    0
    EngincanV created
    Support Team .NET Developer

    I have resolved the issue.The problem was with theDbTablePrefixin both Solution A and Module B.I had setpublic static string DbTablePrefix { get; set; } = "";which caused the table prefix to be empty.As a result,when generating the code and creating tables in Solution A,it attempted to create tables with the same names twice,leading to duplicate table names and failure in creating migrations.The solution was to set different values forDbTablePrefixin Solution A and Module B.

    Good catch! Regards.

Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v9.3.0-preview. Updated on May 14, 2025, 07:53