Aspen – A sample app using Silverlight 4 and .Net 4.0 – part 5 of X – New Repository implementation

This will be quite small blog post but the time is running out and I have to go to bed. But I wanted to let you know what I’m working on at the moment in the “Aspen” project.

I have done several changes to the code. No methods calls to the SubmitChanges of the ObjectContext it done from the Repositories. In a previous post I made a call to the SaveChanges in the Add and Delete methods of a Repository, it’s now removed. The reason why it’s removed is because I want to take the benefit of using the Entity Frameworks ObjectContext through the whole DomainService operation. By doing so I can reuse the ObjectContext’s Unit of Work.

I have also make sure that the SubmitChanges now will be called when the Complete method of the TransactionScope class is called, like nHibernate does.

I will write a new blog soon about all my solutions to solve the things above, but I will in this blog post at least show you some code. The following is a DomainService where the ObjectContext will be reused during a whole operation (so in the GetAll method, both the Member- and GetheringRepository will share the same ObjectContext, you can also see that I use a Transaction when I add members, when the Complete method is called, I will make sure the ObjectContext’s SaveChanges method will be called:

[EnableClientAccess()]
public class MemberDomainService : DomainService
{
     readonly IMemberRepository _memberRepository = null;
     readonly IGatheringRepository _gatheringRepository = null;

     public MemberDomainService(IMemberRepository membershipRepository, IGatheringRepository gatheringRepository)
     {
         if (membershipRepository == null)
             throw new ArgumentNullException("membershipRepository");

         _memberRepository = membershipRepository;
        _gatheringRepository = gatheringRepository;

     }

    [Invoke]
    public void Save()
    {
        using (var trans = new TransactionScope())
        {
            _memberRepository.Add(new Member() { FirstName = "Ove", LastName = "Bengt" });
            _gatheringRepository.Add(new Member() { FirstName = "OveG", LastName = "BengtG" });
            trans.Complete();
        }
    }

    public IEnumerable<MemberDto> GetMembers()
    {
        var test = _gatheringRepository.GetAll();
        var members = _memberRepository.GetAll();

        return members.Select(m => Mapper.Map<Member, MemberDto>(m));
    }
}


And one more thing, the ObjectContext reused during the operation will of course be Disposed when the operation is completed. As you may see I still inherits from the DomainService base class so how can I make sure the OjbectContext’s Dispose method will be called after an operation is done? That is something you will see in my next blog post when I will show you the detail of the implementations I have done.

 

If you want to know when I published a new blog post, you can follow me on twitter: http://www.twitter.com/fredrikn

No Comments