私はEF/Repository/Unit of Workを使用していますが、いくつかの詳細を理解するのは苦労しています。 UnitOfWorkの中で、新しいEF DbContext(EmmaContext)を作成しますが、リポジトリ内を見て、間違っていると思ってキャストします。リポジトリ内のコンテキストを正しく取得するにはどうすればいいですか?たぶん私は間違った道を歩いていますか?ここでエンティティフレームワークと作業単位
は私のUnitOfWorkである:ここでは
//Interface
public interface IUnitOfWork : IDisposable
{
void Commit();
}
//Implementation
public class UnitOfWork : IUnitOfWork
{
#region Fields/Properties
private bool isDisposed = false;
public EmmaContext Context { get; set; }
#endregion
#region Constructor(s)
public UnitOfWork()
{
this.Context = new EmmaContext();
}
#endregion
#region Methods
public void Commit()
{
this.Context.SaveChanges();
}
public void Dispose()
{
if (!isDisposed)
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
isDisposed = true;
if (disposing)
{
if (this.Context != null)
this.Context.Dispose();
}
}
#endregion
}
はリポジトリです:こので
//Interface
public interface IRepository<TEntity> where TEntity : class
{
IQueryable<TEntity> Query();
void Add(TEntity entity);
void Attach(TEntity entity);
void Delete(TEntity entity);
void Save(TEntity entity);
}
//Implementation
public abstract class RepositoryBase<TEntity> : IRepository<TEntity> where TEntity : class
{
#region Fields/Properties
protected EmmaContext context;
protected DbSet<TEntity> dbSet;
#endregion
#region Constructor(s)
public RepositoryBase(IUnitOfWork unitOfWork)
{
this.context = ((UnitOfWork)unitOfWork).Context;
this.dbSet = context.Set<TEntity>();
}
#endregion
#region Methods
public void Add(TEntity entity)
{
dbSet.Add(entity);
}
public void Attach(TEntity entity)
{
dbSet.Attach(entity);
}
public void Delete(TEntity entity)
{
dbSet.Remove(entity);
}
public IQueryable<TEntity> Query()
{
return dbSet.AsQueryable();
}
public void Save(TEntity entity)
{
Attach(entity);
context.MarkModified(entity);
}
#endregion
}
これは基本的に私がやったことですが、IUnitOfWorkインターフェイスを追加しましたが、単なるユニットテストのように思いますか?あなたは本当にあなたのリポジトリと作業ユニットをユニットテストするつもりですか? – Sam
少し考えた後、実装を呼び出しコードに抽象化しても、IoCコンテナからリポジトリにコンテキストを取得する方法が不思議でしたか?コードサンプルがありますか?ありがとう! BTW - 私はちょうどあなたのMVC 3.0の本、素晴らしい本を読んで! – Sam
@Sam - ありがとう:) – OdeToCode