【发布时间】:2015-09-05 23:23:41
【问题描述】:
嗨,我正在做一个项目,目前我正在使用实体框架构建数据层
数据库上下文
public interface IDatabaseContext : IDisposable
{
IDbSet<TestEntity> TestEntitys { get; }
int SaveChanges();
}
public class DatabaseContext : DbContext, IDatabaseContext
{
static DatabaseContext()
{
System.Data.Entity.Database.SetInitializer<DatabaseContext>(null);
}
public DatabaseContext(string connectionString) :
base(connectionString)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new TestEntityConfiguration());
base.OnModelCreating(modelBuilder);
}
public IDbSet<TestEntity> TestEntitys
{
get;
set;
}
public override int SaveChanges()
{
return base.SaveChanges();
}
}
工作单元:
public interface IUnitOfWork : IDisposable
{
int Commit();
IDatabaseContext Context { get; }
}
public sealed class UnitOfWork : IUnitOfWork, IDisposable
{
private IDatabaseContext _dbContext;
private bool disposed = false;
public UnitOfWork(IDatabaseContext mydbContext)
{
//var builder=DataBaseConnectionStringBuilder();
//var factory = new DataBaseConnectionFactory(builder);
_dbContext = mydbContext;
}
public int Commit()
{
return _dbContext.SaveChanges();
}
public IDatabaseContext Context
{
get { return _dbContext; }
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
if (_dbContext != null)
{
_dbContext.Dispose();
_dbContext = null;
}
}
}
disposed = true;
}
}
服务:
public class Baseservice()
{
protacted IUnitOfWork unitofwork;
public BaseService(IUnitOfWork uow)
{
unitofwork= uow;
}
}
public class TestEntityservice() : BaseService
{
private ITestEntityReopsitory _testEntityReopsitory;
public TestEntityservice(IUnitOfWork uow,ITestEntityReopsitory testEntityReopsitory):base(uow)
{
_testEntityReopsitory=testEntityReopsitory;
}
public int AddNewData(somedto dto){
var result=_testEntityReopsitory.AddTEst(dto);
return unitofwork.Commit();
}
}
存储库:
public BaseRepository(IDatabaseContext context)
{
_dbContext = context;
}
public class TestEntityReopsitory() : BaseRepository, ITestEntityReopsitory
{
public TestEntityReopsitory(IDatabaseContext context) :base(context) {
}
public int AddTEst(somedto dto){
var entity = new TestEntity()
{
a= dto.a,
b= dto.b
}
context.Add(entity);
}
}
我担心的是,我在存储库中注入了我的数据库上下文(DatabaseContext),所以当存储库解析时,它将有一个单独的实例 存储库中的 dbcontext 然后服务 .所以这意味着我将实体添加到单独的上下文并使用不同的上下文进行保存。
如何确保我在存储库和服务中使用相同的实例,并且仍然保持相同的实现。
【问题讨论】:
-
您也可以尝试
NInject或任何其他依赖注入器来归档与工厂类相同的想法。
标签: c# entity-framework dependency-injection repository-pattern