带有EFCore的模式存储库



我有继承DbContext的类,我如何使用它?

class ApplicationDbContext : DbContext
{
public DbSet<MyModel> Models {get;set;}
}

像这样:

class Repository<MyModel>
{
private readonly ApplicationDbContext _context = new ApplicationDbContext();
public async Task Add<MyModel>(MyModel item)
{
if(item == null)
throw new ArgumentNullException();
var contains = await GetItemByName(item.UniqueNameAndThisNotId );     
if(contains != null)
throw new InvalidOperationException();
_context.AddAsync(item);
_context.SaveChangesAsync();
}
public async Task<MyModel> GetItemByName(string uniqueNameAndThisNotId)
{
return await Task.FromResult(_context.Single(x => x.UniqueNameAndThisNotId == uniqueNameAndThisNotId));
}
}

或者像这样:

class Repository<MyModel>
{
public async Task Add<MyModel>(MyModel item)
{
ApplicationDbContext context = new ApplicationDbContext();
if(item == null)
throw new ArgumentNullException();
var contains = await GetItemByName(item.UniqueNameAndThisNotId );     
if(contains != null)
throw new InvalidOperationException();
context.AddAsync(item);
context.SaveChangesAsync();
}
public async Task<MyModel> GetItemByName(string uniqueNameAndThisNotId)
{
ApplicationDbContext context = new ApplicationDbContext();
return await Task.FromResult(context.SingleOrDefault(x => x.UniqueNameAndThisNotId == uniqueNameAndThisNotId));
}
}

我认为最好的方法是通过构造传递上下文

protected readonly ApplicationContext _context;
public GenericRepository(ApplicationContext context)
{
_context = context;
}

最新更新