diff --git a/src/Umbraco.Core/Models/ContentExtensions.cs b/src/Umbraco.Core/Models/ContentExtensions.cs
index 0639bfa86f..71e5df37ea 100644
--- a/src/Umbraco.Core/Models/ContentExtensions.cs
+++ b/src/Umbraco.Core/Models/ContentExtensions.cs
@@ -51,9 +51,11 @@ namespace Umbraco.Core.Models
///
public static IProfile GetCreatorProfile(this IContent content)
{
- var repository = RepositoryResolver.Current.Factory.CreateUserRepository(
- new PetaPocoUnitOfWork(DatabaseContext.Current.Database));
- return repository.GetProfileById(content.CreatorId);
+ using (var repository = RepositoryResolver.Current.Factory.CreateUserRepository(
+ PetaPocoUnitOfWorkProvider.CreateUnitOfWork()))
+ {
+ return repository.GetProfileById(content.CreatorId);
+ }
}
///
@@ -61,9 +63,11 @@ namespace Umbraco.Core.Models
///
public static IProfile GetWriterProfile(this IContent content)
{
- var repository = RepositoryResolver.Current.Factory.CreateUserRepository(
- new PetaPocoUnitOfWork(DatabaseContext.Current.Database));
- return repository.GetProfileById(content.WriterId);
+ using(var repository = RepositoryResolver.Current.Factory.CreateUserRepository(
+ PetaPocoUnitOfWorkProvider.CreateUnitOfWork()))
+ {
+ return repository.GetProfileById(content.WriterId);
+ }
}
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWork.cs b/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWork.cs
index f9b6072692..36b52c9b16 100644
--- a/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWork.cs
+++ b/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWork.cs
@@ -25,10 +25,12 @@ namespace Umbraco.Core.Persistence.UnitOfWork
///
///
///
+ /// This should normally not be used directly and should be created with the UnitOfWorkProvider
+ ///
/// The Database instance used for this unit of work should not be shared with other unit's of work, other repositories, etc...
/// as it will get disposed of when this unit of work is disposed.
///
- public PetaPocoUnitOfWork(UmbracoDatabase database)
+ internal PetaPocoUnitOfWork(UmbracoDatabase database)
{
Database = database;
_key = Guid.NewGuid();
diff --git a/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWorkProvider.cs b/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWorkProvider.cs
index ce635761db..9ab08c9497 100644
--- a/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWorkProvider.cs
+++ b/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWorkProvider.cs
@@ -30,5 +30,15 @@ namespace Umbraco.Core.Persistence.UnitOfWork
}
#endregion
+
+ ///
+ /// Static helper method to return a new unit of work
+ ///
+ ///
+ internal static IDatabaseUnitOfWork CreateUnitOfWork()
+ {
+ var provider = new PetaPocoUnitOfWorkProvider();
+ return provider.GetUnitOfWork();
+ }
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs b/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs
index 654e8f5e80..2cab761302 100644
--- a/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs
+++ b/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs
@@ -46,16 +46,17 @@ namespace Umbraco.Tests.Persistence
{
var method = typeof(RepositoryResolver).GetMethod("ResolveByType", BindingFlags.NonPublic | BindingFlags.Instance);
var gMethod = method.MakeGenericMethod(repoType);
- var repo = gMethod.Invoke(RepositoryResolver.Current, new object[] { new PetaPocoUnitOfWork(DatabaseContext.Current.Database) });
+ var repo = gMethod.Invoke(RepositoryResolver.Current, new object[] { PetaPocoUnitOfWorkProvider.CreateUnitOfWork() });
Assert.IsNotNull(repo);
Assert.IsTrue(TypeHelper.IsTypeAssignableFrom(repoType, repo.GetType()));
+ repo.DisposeIfDisposable();
}
[Test]
public void Can_Verify_UOW_In_Repository()
{
// Arrange
- var uow = new PetaPocoUnitOfWork(DatabaseContext.Current.Database);
+ var uow = PetaPocoUnitOfWorkProvider.CreateUnitOfWork();
// Act
var repository = RepositoryResolver.Current.ResolveByType(uow);
@@ -63,6 +64,8 @@ namespace Umbraco.Tests.Persistence
// Assert
Assert.That(repository, Is.Not.Null);
Assert.That(uow.Key, Is.EqualTo(((RepositoryBase)repository).UnitKey));
+
+ repository.Dispose();
}
[Test]
@@ -75,12 +78,14 @@ namespace Umbraco.Tests.Persistence
Assert.That(isSubclassOf, Is.False);
Assert.That(isAssignableFrom, Is.True);
- var uow = new PetaPocoUnitOfWork(DatabaseContext.Current.Database);
+ var uow = PetaPocoUnitOfWorkProvider.CreateUnitOfWork();
var repository = RepositoryResolver.Current.ResolveByType(uow);
bool subclassOf = repository.GetType().IsSubclassOf(typeof (IRepository));
Assert.That(subclassOf, Is.False);
Assert.That((typeof(IRepository).IsInstanceOfType(repository)), Is.True);
+
+ repository.Dispose();
}
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs
index 3de365b22c..c113514469 100644
--- a/src/Umbraco.Tests/Services/ContentServiceTests.cs
+++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs
@@ -667,8 +667,8 @@ namespace Umbraco.Tests.Services
[Test]
public void Can_Save_Lazy_Content()
- {
- var unitOfWork = new PetaPocoUnitOfWork(Umbraco.Core.DatabaseContext.Current.Database);
+ {
+ var unitOfWork = PetaPocoUnitOfWorkProvider.CreateUnitOfWork();
var contentType = ServiceContext.ContentTypeService.GetContentType("umbTextpage");
var root = ServiceContext.ContentService.GetById(1046);