0

作業単位クラスがあり、データベース コンテキストを破棄するメソッドがあります。しかし、データベース コンテキストもリポジトリ クラス (NotesRepository) に渡します。また、コンテキストを NotesRepository クラスに配置する必要がありますか?それとも、このコンテキストは作業クラスの単位で配置されているため、必要ありませんか?

public class UnitOfWork : IDisposable
{
    private DatabaseContext context = new DatabaseContext();
    private NotesRepository notesRepository;

    public NotesRepository NotesRepository
    {
        get
        {
            if (this.notesRepository == null)
            {
                this.notesRepository = new NotesRepository(context);
            }
            return notesRepository;
        }
    }


    private bool disposed = false;

    protected virtual void Dispose(bool disposing)
    {
        if (!this.disposed)
        {
            if (disposing)
            {
                context.Dispose();
            }
        }
        this.disposed = true;
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
}

これはリポジトリクラスです:

public class NotesRepository
{
    private DatabaseContext context;

    public NotesRepository(DatabaseContext context)
    {
        this.context = context;
    }


    public IQueryable<Notes> GetAllNotes()
    {
        return (from x in context.Notes
                orderby x.CreateDate descending
                select x);
    }        
}
4

1 に答える 1

0

UnitOfWork クラス内でこれを行うことをお勧めします

using(var ctx = new DatabaseContext())
{
  var repo = new NotesRepo(ctx);
}

これで、使用によって適切に破棄されます - リポジトリに破棄する必要はありません

于 2013-07-21T07:14:13.727 に答える