Hi, I am a new to ASPNET.Zero and have been working on some samples for understanding the architecture. I created a Contacts application from the RAD Tool with ASP.NET Core and Angular. When I look at the change logs I see the details of which fields were changed from their old value to the new one however I do not see a Reason description as I set in the service module.
I have the entity class defined as:
[Table("Contacts")]
[Audited]
public class Contact : FullAuditedEntity , IMayHaveTenant
{
public int? TenantId { get; set; }
Then in my ApplicationService I have the following:
[AbpAuthorize(AppPermissions.Pages_Contacts_Edit)]
private async Task Update(CreateOrEditContactDto input)
{
var contact = await _contactRepository.FirstOrDefaultAsync((int)input.Id);
var reason = string.Format("User: {0} was updated!", input.UserId.ToString());
using (_reasonProvider.Use(reason))
{
ObjectMapper.Map(input, contact);
}
}
I do not have the UnitOfWork defined per the sample as I am assuming the DTO Mapper is taking care of the actual data layer so I made an assumption on how to set the Reason. What should I do and where would I see the Reason once it is recorded correctly?
Thank you,
Matt
6 Answer(s)
-
0
<a class="postlink" href="https://aspnetboilerplate.com/Pages/Documents/Entity-History#reason-property">https://aspnetboilerplate.com/Pages/Doc ... n-property</a>
You can take a look at the documentation for [Entity-History]
-
0
Yes, I have read through the documentation several times. I have also applied the UseCase attribute, per the documentation, to the function and still no reason description other than the standard shows in the table for logging. I am not receiving any errors in the logs or in the application.
-
0
UseCase Attribute Restrictions You can use the UseCase attribute for:
All public or public virtual methods for classes that are used via its interface, e.g. an application service used via its interface. All public virtual methods for self-injected classes, e.g. MVC Controllers. All protected virtual methods.
-
0
Thanks I see where I missed the declaration of private not being supported. For a quick test I made a change to the location and function with the UseCase declaration to see if I would get a different result. Even after making a change with the following method I am still seeing the URL as the Reason in the database.
[UseCase(Description = "Updating User Contact Information")] public async Task CreateOrEdit(CreateOrEditContactDto input) { if(input.Id == null){ await Create(input); } else{ await Update(input); }
}
I know I am missing something and that it is not the framework, just trying to learn.
Thanks,
Matt
-
0
You need to save changes in that method:
[UseCase(Description = "Updating User Contact Information")] public async Task CreateOrEdit(CreateOrEditContactDto input) { if (input.Id == null) { await Create(input); } else { await Update(input); } // CurrentUnitOfWork.SaveChanges(); _unitOfWorkManager.Current.SaveChanges(); }
-
0
Thank you Aaron! That was the missing piece. I see the entity reason code I set now. An update to the screen now will complete the requirement I have for my customer.
Thanks again,
Matt