Open Closed

The entity type 'TenantConnectionString' requires a primary key to be defined. If you intended to use a keyless entity type, call 'HasNoKey' in 'OnModelCreating'. For more information on keyless entity types #996


User avatar
0
cleverplatform created

Check the docs before asking a question: https://docs.abp.io/en/commercial/latest/ Check the samples, to see the basic tasks: https://docs.abp.io/en/commercial/latest/samples/index The exact solution to your question may have been answered before, please use the search on the homepage.

  • ABP Framework version: v4.2.1

  • UI type: MVC

  • DB provider: EF Core

  • Tiered (MVC) or Identity Server Separated (Angular): no

  • Exception message and stack trace:

  • System.InvalidOperationException: 'The entity type 'TenantConnectionString' requires a primary key to be defined. If you intended to use a keyless entity type, call 'HasNoKey' in 'OnModelCreating'. For more information on keyless entity types, see https://go.microsoft.com/fwlink/?linkid=2141943.'

  • This exception was originally thrown at this call stack: [External Code] XXX.XXXSeed.SeedAsync(Volo.Abp.Data.DataSeedContext) in XXXSeed.cs [External Code] XXX.Data.ShopSplitterDbMigrationService.SeedDataAsync(Volo.Saas.Tenants.Tenant) in XXXDbMigrationService.cs [External Code] XXXData.XXXDbMigrationService.MigrateAsync() in XXXDbMigrationService.cs [External Code] XXX.DbMigrator.DbMigratorHostedService.StartAsync(System.Threading.CancellationToken) in DbMigratorHostedService.cs [External Code] ShopSplitter.DbMigrator.Program.Main(string[]) in Program.cs ... [Call Stack Truncated]

  • Steps to reproduce the issue:

  • create project with "abp new XXX"

  • build solution in VS and execute XXX.DBMigration - initial migration were created

  • run solution / login / logout /close app

  • in solution create a new entity "Book" and create add-migration and update-database - new entity was added into Migration and into database

  • create seed for a new entity "Book" in Domain project and have only this code public async Task SeedAsync(DataSeedContext context) { using (_currentTenant.Change(context?.TenantId)) { if (await _bookRepository.GetCountAsync() > 0) { return; } } }

  • run XXX.DBMigration and on method _bookRepository.GetCountAsync is logged error: System.InvalidOperationException: 'The entity type 'TenantConnectionString' requires a primary key to be defined. If you intended to use a keyless entity type, call 'HasNoKey' in 'OnModelCreating'. For more information on keyless entity types, see https://go.microsoft.com/fwlink/?linkid=2141943.'

Could you investigate that - I simulated that 3 times in separated project from scratch thanks Erik


7 Answer(s)
  • User Avatar
    0
    Moyaoxiang created

    Hi cleverplatform, Can you provide the code for the entity Book?

  • User Avatar
    0
    cleverplatform created

    Hi, here are details - also i simulated it again today with a new version CLI 4.2.2, putting again detailed steps:

    1. CMD: abp new BookStore

    2. open solution BookStore.sln in VS -> rebuild -> run BookStore.DbMigrator - all ok - initial migration has been created + database created in SQL server (SQL Server 2014)

    3. created Book entity in domain + add into db.context + add additional information into BookStoreDbContextModelCreatingExtensions about book entity + created BookSeed (all changes in code i put below) :

      • Book Class: public class Book : FullAuditedAggregateRoot<Guid>, IMultiTenant { public Guid? TenantId { get; set; } [CanBeNull] public Tenant Tenant { get; set; } public string StoreName { get; set; } [Column(TypeName = "nvarchar(4000)")] public string Description { get; set; } [Column(TypeName = "nvarchar(MAX)")] public string Html { get; set; } protected Book() { } public Book(string storeName, Guid? tenantId) { StoreName = storeName; TenantId = tenantId; } }

      • added in BookStoreDbContext.cs: public DbSet<Book> Books { get; set; }

      • BookStoreConsts: public static class BookStoreConsts { public const string DbTablePrefix = "App"; public const string DbSchema = "bookstore"; }

      • added in BookStoreDbContextModelCreatingExtensions.cs builder.Entity<Book>(b => { b.ToTable(BookStoreConsts.DbTablePrefix + "Books", BookStoreConsts.DbSchema); b.ConfigureByConvention(); });

      • BooksSeed in Domain: public class BooksSeed : IDataSeedContributor,ITransientDependency { private readonly IRepository<Book, Guid> _bookRepository; public BooksSeed(IRepository<Book, Guid> bookRepository) { _bookRepository = bookRepository; } public async Task SeedAsync(DataSeedContext context) { if (await _bookRepository.GetCountAsync() <= 0) { //await _bookRepository.InsertAsync(new Book("book_name", null), autoSave: true); } } } )

    4. add migration using -> Add-Migration "books" + Update-Database - migration applied succesfully in migration folder and also into database

    5. run BookStore.DbMigrator - for applying a new BookSeed -> error occured:

    System.InvalidOperationException: 'The entity type 'TenantConnectionString' requires a primary key to be defined. If you intended to use a keyless entity type, call 'HasNoKey' in 'OnModelCreating'. For more information on keyless entity types, see https://go.microsoft.com/fwlink/?linkid=2141943.'

  • User Avatar
    1
    cleverplatform created

    Hi not sure if you have any progress with this issue but i found possible solution by using this fragment in "XXXDbContextModelCreatingExtensions.cs"

        builder.Entity<TenantConnectionString>().HasKey(lc => new { lc.TenantId, lc.Name});
        
    

    could you pls. confirm if that is posible solution? or it is an issue on framework side, or should I set something differently.

    thanks, let me know Erik

  • User Avatar
    0
    alper created
    Support Team Director

    are you using tenant per database model?

  • User Avatar
    0
    cleverplatform created

    Hi - no - im not using one shared database for all tenants erik

  • User Avatar
    0
    berkansasmaz created
    Support Team .NET Developer

    Thanks a lot for your great explanations. I created an issue: https://github.com/abpframework/abp/issues/8019

  • User Avatar
    0
    berkansasmaz created
    Support Team .NET Developer

    You can find why the problem occurs and the solution here.

    So I am closing this ticket. You can re-open and add comment if you want.

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 v10.1.0-preview. Updated on October 02, 2025, 08:00