kgrzybek / sample-dotnet-core-cqrs-api

Sample .NET Core REST API CQRS implementation with raw SQL and DDD using Clean Architecture.
https://www.kamilgrzybek.com/design/simple-cqrs-implementation-with-raw-sql-and-ddd/
MIT License
2.88k stars 646 forks source link

Is it mandatory to use Guid for Id in entity or aggregate? #33

Open maulik-modi opened 3 years ago

maulik-modi commented 3 years ago

hello @kgrzybek ,

We have learned in the past that searching based on Guid primary key is less performant as compared to Sequential Integer/Long primary key.

Is there any work around so we can get the best of both worlds - leverage Outbox for gurantee and search friendly primary key? Is it possible to do like this in command handler?

I am thinking to have 3 methods in UnitOfWork

  1. SaveChanges - to flush entity changes - explicit call in command handler and fetch Primary Key
  2. BeginTransaction - to start database transaction - from decorator
  3. Commit - to commit transaction - from decorator

REference: https://entityframeworkcore.com/saving-data-transaction Commit method can Invoke DomainEventDispatcher which in turn can record DomainEventNotifications in Outbox table.

Open for other ideas?

dbeylkhanov commented 2 years ago

@maulik-modi

Is it mandatory to use Guid for Id in entity or aggregate?

no, it's not. I'd rather say that using Guid is simplifying work with UoW within DDD

check out my pet project for generating strongly typed entity's id before saving changes into DB https://github.com/beylkhanovdamir/StronglyTypedIdentity