Open Closed

Saving null TenantId for entities #7746


User avatar
0
sgarad created
  • ABP Framework version: 8.2.1
  • UI Type: Angular
  • Database System: MySQL
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes
  • Exception message and full stack trace:
  • Steps to reproduce the issue:
  • Hi There we have created below entity inheriting from IMultiTenant and AppService in DDD Module which is then referenced in Microservice.
[Table("venclass")]
public class Venclass : AggregateRoot<int>, IMultiTenant
{
    public Venclass()
    {
        
    }
    public Venclass(string classcode, string description, string user_entered)
    {
        this.class_code = classcode;
        this.description = description;
        this.date_entered = DateTime.Now;
        this.time_entered = DateTime.Now;
        this.user_entered = user_entered;
    }
    [Column("oid")]
    public override int Id { get; protected set; }

    [Column(TypeName = "varchar(4)" + CollationConst.collation)]
    [StringLength(VenclassConsts.Maxclass_codeLength, MinimumLength = VenclassConsts.Minclass_codeLength)]
    public virtual string class_code { get; set; }

    [Column(TypeName = "varchar(30)" + CollationConst.collation)]
    [StringLength(VenclassConsts.MaxdescriptionLength, MinimumLength = VenclassConsts.MindescriptionLength)]
    public virtual string description { get; set; }

    [DataType(DataType.Date)]
    [Column(TypeName = "Date")]
    public virtual DateTime? date_entered { get; set; }


    [Column(TypeName = "datetime")]
    public virtual DateTime? time_entered { get; set; }

    [Column(TypeName = "varchar(32)" + CollationConst.collation)]
    [StringLength(VenclassConsts.Maxuser_enteredLength, MinimumLength = VenclassConsts.Minuser_enteredLength)]
    public virtual string user_entered { get; set; }

    [Column("tenant_id")]
    public virtual Guid? TenantId { get; }

}
[Authorize(VendorManagementPermissions.VendorClass.Default)]
public class VenClassAppService : VendorManagementAppService, IVenClassAppService
{
    private readonly VenClassManager _vendorClassManager;
    private readonly IRepository<Venclass, int> _vendorClassRepository;
    public VenClassAppService(VenClassManager vendorClassManager, IRepository<Venclass, int> vendorClassRepository)
    {
        _vendorClassManager = vendorClassManager;
        _vendorClassRepository = vendorClassRepository;
    }       
    [Authorize(VendorManagementPermissions.VendorClass.Create)]
    public async Task<VenclassDto> CreateAsync(VenclassDto input)
    {
        var venclass = await _vendorClassManager.CreateAsync(
              input.class_code,
              input.description,                 
              input.user_entered
          );

        return ObjectMapper.Map<Venclass, VenclassDto>(venclass,input);
    }

    [Authorize(VendorManagementPermissions.VendorClass.Delete)]
    public async Task DeleteAsync(int id)
    {
        await _vendorClassRepository.DeleteAsync(id);
    }

    [Authorize(VendorManagementPermissions.VendorClass.Default)]
    public async Task<ListResultDto<VenclassDto>> GetAllAsync()
    {
        var venclass = await _vendorClassRepository.GetListAsync();
        return new ListResultDto<VenclassDto>(
            ObjectMapper.Map<List<Venclass>, List<VenclassDto>>(venclass)
        );
    }

    [Authorize(VendorManagementPermissions.VendorClass.Default)]
    public async Task<VenclassDto> GetAsync(int id)
    {
        return ObjectMapper.Map<Venclass, VenclassDto>(await _vendorClassRepository.GetAsync(id));
    }

    [Authorize(VendorManagementPermissions.VendorClass.Update)]
    public async Task<VenclassDto> UpdateAsync(VenclassDto input)
    {
        var venclass = await _vendorClassRepository.GetAsync(input.Id);

        ObjectMapper.Map(input, venclass);

        await _vendorClassRepository.UpdateAsync(venclass);

        return ObjectMapper.Map<Venclass, VenclassDto>(venclass);
    }
}

Module configuration

 public override void ConfigureServices(ServiceConfigurationContext context)
 {
     context.Services.AddAutoMapperObjectMapper<VendorManagementApplicationModule>();
     Configure<AbpAutoMapperOptions>(options =>
     {
         options.AddMaps<VendorManagementApplicationModule>(validate: true);
     });
    
     Configure<AbpMultiTenancyOptions>(options =>
     {
         options.IsEnabled = true;
         
     });   

 }
 public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
    var app = context.GetApplicationBuilder();
    app.UseMultiTenancy();
}

After runnig my app service create function TenantId is stored as null. Am I missing anything?


2 Answer(s)
  • User Avatar
    0
    liangshiwei created
    Support Team Fullstack Developer

    ABP will try set tenant id, you need make sure there is a set modifier

  • User Avatar
    0
    sgarad created

    This is resolved. Thanks.

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 07, 2025, 05:59