Base solution for your next web application
Open Closed

When to use [UnitOfWork] Attribute #2567


User avatar
0
bilalhaidar created

Hello, in this source code below, the class already inherits from MyTestsDomainServiceBase, hence, all methods are handled automatically by UOW.

Why the code still adds an attribute [UnitOfWork], is it necessary in this case?

Thanks

public class FriendshipManager : MyTestsDomainServiceBase, IFriendshipManager
    {
        private readonly IRepository<Friendship, long> _friendshipRepository;

        public FriendshipManager(IRepository<Friendship, long> friendshipRepository)
        {
            _friendshipRepository = friendshipRepository;
        }

        [UnitOfWork]
        public void CreateFriendship(Friendship friendship)
        {
            if (friendship.TenantId == friendship.FriendTenantId &&
                friendship.UserId == friendship.FriendUserId)
            {
                throw new UserFriendlyException(L("YouCannotBeFriendWithYourself"));
            }

            using (CurrentUnitOfWork.SetTenantId(friendship.TenantId))
            {
                _friendshipRepository.Insert(friendship);
                CurrentUnitOfWork.SaveChanges();
            }
        }
Markdown is supported
Copy & paste or drag & drop images (max 30 MB per image)

6 Answer(s)
  • User Avatar
    0
    ismcagdas created
    Support Team

    Hi,

    Normally you don't need this but I couldn't remember why we did this at the moment. I will check this and let you know. You can remove it and try chat functionality in the mean time.

    Thanks.

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    ismcagdas created
    Support Team

    Hi,

    Sorry for the late reply, Normally Domain Services are not UoW by default, that is why UnitOfWork attribute is used.

    Thanks.

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    bilalhaidar created

    Thank you. I understand now. Why would DS not be UOW?

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    ismcagdas created
    Support Team

    Hi,

    Because domain services are mostly used in app services/controllers and cannot be reached from UI directly. Since app services and controllers are unit of work by default, there is no need to make domain services UoW by default.

    Thanks.

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    DennisAhlin created

    Just FYI, here you can read more about the implementation of UOW :)

    <a class="postlink" href="https://www.aspnetboilerplate.com/Pages/Documents/Unit-Of-Work">https://www.aspnetboilerplate.com/Pages ... it-Of-Work</a>

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    bilalhaidar created

    Thanks everyone.

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)