.NET 工程 基础知识-- Repository工程使用
2021-04-13 19:28
标签:exception 构造函数 net 抽象类 建立 action new wrong 实现 在 Repostiory工程建立中,我们建立了基本的工程结构,接下来就是完成CRUD的简单操作。 这里使用Account为例: 第一步,在Entities 里创建一个名为“Models” 或者 “Entities” 的文件夹,然后在这个文件中创建一个名为Account 的类,字段与数据库表对应。 第二步,在Abstract里建立名为 IAccountRepository 的接口, 代码如下: 第三步,在Repository里实现这个接口,同时需要继承抽象类 “Repositorybase 第四步,在Abstract里边建立 名为 “IRepositoryWrapper” 的接口,代码如下: 然后在 Repository中实现这个接口,代码如下: 创建这个接口的原因,是在Controller的调用中,不需要定义过多的接口,只需要在定义这个接口,然后就可以找到对应每一个表的CRUD操作。 第五步,在Webapplication工程中,新建一个Controller,API controller 名为 AccountController. 可以选择API empty controller 也可以选择带action的,这里建立API Empty controller. 因为是空的controller,所以需要创建CRUD的每一个action。 在创建Action之前,在构造函数中传入参数:IRepositoryWrapper 接口, 然后再类主题中定义私有变量 ” private readonly IRepositoryWrapper _repositoryWrapper;“ 代码如下: 最后,可以开始创建CRUD的Action,这里做一个CreateAccount 的例子,代码如下: 这段代码中 我是用了autoMap 来实现Data Transfer Object。需要注意的是,在写每个Action的时候 需要在Action的最上边写明是什么操作。例如[HttpPost],[HttpGet].[HttpPut],[HttpDelete],同时可以在每个请求后加入参数例如 getAccountById(int accountId) 这个Action前就可以加入[HttpGet("{accountId}")]. .NET 工程 基础知识-- Repository工程使用 标签:exception 构造函数 net 抽象类 建立 action new wrong 实现 原文地址:https://www.cnblogs.com/Weimin496/p/12382266.html public interface IAccountRepository
{
void CreateAccount(Account entity);
IEnumerable ReadAllAccounts();
Account ReadAccountById(int accountId);
void UpdateAccount(Account entity);
void DeleteAccount(Account entity);
}
public class AccountRepository : RepositoryBase, IAccountRepository
{
public AccountRepository(RepositoryContext repositoryContext)
: base(repositoryContext)
{
}
public void CreateAccount(Account entity)
{
Created(entity);
}
public IEnumerable ReadAllAccounts()
{
return ReadAll().OrderBy(account => account.ID).ToList();
}
public Account ReadAccountById(int accountId)
{
return ReadByFilter(account => account.ID == accountId)
.FirstOrDefault();
}
public void UpdateAccount(Account entity)
{
Update(entity);
}
public void DeleteAccount(Account entity)
{
Delete(entity);
}
}
public interface IRepositoryWrapper
{
IAccountRepository Account { get; }
void Save();
}
public class RepositoryWrapper : IRepositoryWrapper
{
private RepositoryContext _repositoryContext;
private IAccountRepository _account;
public IAccountRepository Account
{
get
{
if (_account == null)
{
_account = new AccountRepository(_repositoryContext);
}
return _account;
}
}
public RepositoryWrapper(RepositoryContext repositoryContext)
{
_repositoryContext = repositoryContext;
}
public void Save()
{
_repositoryContext.SaveChanges();
}
}
public class AccountController : ControllerBase
{
private readonly IRepositoryWrapper _repositoryWrapper;
public AccountController(IRepositoryWrapper repositoryWrapper)
{
_repositoryWrapper = repositoryWrapper;
}
.....
/* actions 部分 */
[HttpPost]
public IActionResult CreatedAccount([FromBody] AccountForCreationDTO accountForCreationDTO)
{
try
{
if (accountForCreationDTO == null)
{
_loggerManager.LogInfo("Account object sent from client is null.");
return BadRequest("Account object is null");
}
if (!ModelState.IsValid)
{
_loggerManager.LogInfo("Invalid object send from client");
return BadRequest("Invalid model object");
}
var accountEntity = _mapper.Map(accountForCreationDTO);
_repositoryWrapper.Account.CreateAccount(accountEntity);
_repositoryWrapper.Save();
var createdAccount = _mapper.Map(accountEntity);
return CreatedAtRoute("AccountById", new { accountid = createdAccount.ID }, createdAccount);
}
catch (Exception exMsg)
{
_loggerManager.LogError($"Something went wrong inside CreatedAccount action:{exMsg.Message}");
return StatusCode(500, "Interanl server error.");
}
}
文章标题:.NET 工程 基础知识-- Repository工程使用
文章链接:http://soscw.com/index.php/essay/75330.html