"AutoLicenseRenewalIsNotEnabled":"Auto license renewal is not enabled.",
"SetAsDefaultPaymentMethod":"Set as default payment method",
"{0}PerAdditionalDeveloper":"{0} per additional developer",
"CardAlias":"Card Alias",
"CardAlias":"Card Alias (Optional)",
"AbpDoesNotSaveYourPaymentDetails_Description":"The payment data will be saved in <a href=\"{0}\" target=\"_blank\" class=\"{1}\">{2}</a> security vaults and you can remove stored data anytime. Enabling auto-renewal ensures that your ABP subscription will automatically renew prior to expiration, providing a valid credit card. Disabling auto-renewal means you will have to renew your subscription manually. To continue your project development without interruption, we suggest you enable the Auto-Renewal option.",
@ -29,6 +29,8 @@ public interface IHasConcurrencyStamp
* While a new record is **creating**, if the entity implements the `IHasConcurrencyStamp` interface, ABP Framework automatically sets a unique value to the **ConcurrencyStamp** property.
* While a record is **updating**, ABP Framework compares the **ConcurrencyStamp** property of the entity with the provided **ConcurrencyStamp** value by the user and if the values match, it automatically updates the **ConcurrencyStamp** property with the new unique value. If there is a mismatch, `AbpDbConcurrencyException` is thrown.
> If there is a unit of work, you need to call the [SaveChangesAsync](./Unit-Of-Work.md#savechangesasync) method to get the generated `ConcurrencyStamp` when creating or updating.
**Example: Applying Concurrency Control for the Book Entity**
Implement the `IHasConcurrencyStamp` interface for your entity:
@ -74,8 +76,8 @@ public class BookAppService : ApplicationService, IBookAppService
book.ConcurrencyStamp = input.ConcurrencyStamp;
//set other input values to the entity ...
await BookRepository.UpdateAsync(book);
//use autoSave: true to get the latest ConcurrencyStamp