我正在.Net core 2.2中做我的业余时间项目
我已经将我的项目分为4部分
1)DataLayer 2)RepositoryLayer 3)服务 4)Web-API层
我有一个模型,让我们以它为例 IPerson 。 然后我在这里有通用存储库
class Repository<TEntity> : IRepository<TEntity> where TEntity : class, IEntity, IPhysicalPersonEntity
{
private readonly DataContext _context;
private DbSet<TEntity> _entities;
string errorMessage = string.Empty;
public Repository(DataContext context)
{
_context = context;
_entities = context.Set<TEntity>();
}
public void Delete(TEntity entity)
{
if (entity == null)
{
throw new ArgumentNullException("entity is null");
}
_entities.Remove(entity);
_context.SaveChanges();
}
public IEnumerable<TEntity> GetAll()
{
return _entities
.AsEnumerable();
}
public TEntity GetByIdentifyNumber(int identifyNumber)
{
return _entities
.SingleOrDefault(e => e.Id == identifyNumber);
}
public void Insert(TEntity entity)
{
if(entity == null)
{
throw new ArgumentNullException("entity is null");
}
_entities.Add(entity);
_context.SaveChanges();
}
public void Remove(TEntity entity)
{
if (entity == null)
{
throw new ArgumentNullException("entity is null");
}
_entities.Remove(entity);
}
public void SaveChanges()
{
_context.SaveChanges();
}
public void Update(TEntity entity)
{
if (entity == null)
{
throw new ArgumentNullException("entity is null");
}
var currentEntity = _entities
.SingleOrDefault(e => e.Id == entity.Id);
currentEntity = entity;
_context.SaveChanges();
}
}
正如您提到的,第三层用于服务,因此这里有
服务每个服务都是具有单个接口的单个类。 我知道在每个服务中我都应该使用我的存储库对象和方法。
但是我的问题是:
答案 0 :(得分:0)
我使用的是DataLayer
,Repository
,WebAPI
相同的结构。
我按如下所示构建了结构
在我的WebAPI层中,我使用BaseController,而其他控制器是从BaseController派生的
public class ApiBaseController<T> : ApiController where T : class {
[HttpPut]
[Authorize]
[ActionName("Update")]
[Produces("application/json")]
public T Put([FromBody]T entity) // Update
{
using (MyContext db = new MyContext())
{
repository.Update(updateElement);
return entity;
}
}
[HttpPost]
[Authorize]
[ActionName("Add")]
[Produces("application/json")]
public T Post([FromBody]T entity)//Add new record
{
try
{
lock (LockObjectAdd)
{
using (MyContext db = new MyContext())
{
Repository<T> repository = new Repository<T>(db);
repository.Add(entity);
return entity;
}
}
}
catch (Exception ex)
{
throw;
}
}
}
和这样创建控制器;
public class ApiUserController : ApiBaseController<DataLayer.Models.User> { }
答案 1 :(得分:0)
取决于项目的体系结构和最佳实践,有时您不需要数据层 和服务分开,但有时您可以将其分开,但是您可以使用此链接 存储库模式实现: Generic-Repository-Pattern-in-ASP-NET