홈>
예를 들어, 다음과 같은 Laravel Resource Controller 코드가 있습니다 :
class BaseAPIController extends Controller
{
public function index()
{
return self::$model->all();
}
}
그래서 ASP.NET C #에서 그렇게하려고 노력했습니다 :
[ApiController]
public class BaseAPIController<T> : ControllerBase
{
[HttpGet]
public ActionResult<IEnumerable<T>> Get()
{
using (ExamRTContext db = new ExamRTContext())
{
return db.${typeof(T).Name}.Select(x => x);
}
}
}
하지만 어떻게해야할지 모르겠습니다.
그래서 3 개의 테이블로 간단한 CRUD를하고 싶다고합시다. 모든 작업은 동일합니다. 예를 들어 Get ()은 해당 모델에서 모든 데이터를 가져 오는 데 사용됩니다.
3 번 쓰는 대신 한 번만 쓰고 각 모델 컨트롤러로 확장하고 싶었습니다.
어떻게해야할까요?
- 답변 # 1
- 답변 # 2
엔터티 프레임 워크로 간단한 CRUD 작업을 수행하려면 일반 리포지토리를 만들 수 있습니다.
저장소 :
public class GenericRepository<TEntity, TContext> where TContext : DbContext where TEntity : class { protected readonly TContext context; public GenericRepository(TContext context) { this.context = context; } public virtual async Task Add(TEntity model) { await context.Set<TEntity>().AddAsync(model); await context.SaveChangesAsync(); } public virtual async Task<TEntity> Get(int id) { return await context.Set<TEntity>().FindAsync(id); } public virtual async Task<IEnumerable<TEntity>> GetAll() { return await context.Set<TEntity>().ToListAsync(); } public virtual async Task<TEntity> FindFirstBy(Func<TEntity,bool> predicate) { return await Task.Run(()=> context.Set<TEntity>().FirstOrDefault(predicate)); } public virtual async Task<IEnumerable<TEntity>> FilterBy(Func<TEntity,bool> predicate) { return await Task.Run(()=> context.Set<TEntity>().Where(predicate).ToList()); } public virtual async Task Update() { await context.SaveChangesAsync(); } public virtual async Task Remove(TEntity model) { context.Set<TEntity>().Remove(model); await context.SaveChangesAsync(); } }
사용하려면 엔티티 유형과 컨텍스트를 지정하여 컨트롤러에 삽입하면됩니다. 예를 들면 다음과 같습니다.
컨트롤러 기반 :
[ApiController] public class BaseAPIController<T> : ControllerBase { protected readonly GenericReposoitory<T,ExamRTContext> repository; public BaseAPIController(GenericRepository<T,ExamRTContext> repository) { this.repository = repository; } [HttpGet] public ActionResult<IEnumerable<T>> Get() { var entities = repository.GetAll(); if (entities!= null) { return Ok(entities); } return NotFound(); } }
시작시 :
services.AddTransient(typeof(GenericRepository<,>), typeof(GenericRepository<,>));
관련 자료
- excel - 직원이 일한 날에 대한 부울 항목을 만들 수있는 VBA 함수가 있습니까?
- javascript - 생성 및 업데이트를위한 laravel의 ajax
- 컨트롤러 laravel의 다른 기능에서 사용할 ID를 얻는 방법
- php - 라 라벨 7 - 중첩 된 리소스 경로의 범위 문제
- php - 라 라벨 8 - 컨트롤러에서보기로 데이터를 전달할 수 없음-> 정의되지 않은 변수 $test
- php - laravel의 관리자 컨트롤러에서 추가 및 편집 기능을 얻는 방법
- terraform - 리소스를 사용하여 Azure에서 Container Registry를 만들려면 어떻게하나요?
- javascript - 함수를 사용하여 개체에 새 개체를 만들려면 어떻게해야합니까?
- Laravel Cashier는 구독으로 더 많은 관계를 만듭니다
- php - laravel 모델 생성 이벤트에서 레코드 생성을 방지하는 방법
- php - 라 라벨 - 찾을 수 없음 :요청한 리소스/제어를이 서버에서 찾을 수 없습니다
- routes - laravel 리소스 URL은 모델에 따라 다릅니다
- php - Laravel의 스토리지에 csv 생성 및 저장
- phpunit - laravel 8 - json get testing 덕분에 컨트롤러 메서드를 테스트하려고하지만 경로를 찾을 수 없습니다
- php - Laravel이 다른 폴더에있는 컨트롤러를 찾지 못함
- Laravel Nova는 리소스보기를 제한합니다
- 컨트롤러의 사용자 정의 변수를 Laravel의 블레이드로 어떻게 전달합니까?
- javascript - Laravel 문제에 세션 데이터, 경로 및 컨트롤러 저장
- 내 laravel 컨트롤러에서 내 링크를 링크로 표시하는 방법
- php - file_put_contents는 laravel의 공용 디렉토리에서 파일을 생성합니다
관련 질문
- c# : Invision Api 포럼 /포럼
- c# REST API에 JSON 데이터 게시
- c# : DHL API 통합
- java : 패치 엔드 포인트 이름 REST API
- c# : HttpClient 요청에 대한 Content-Type 헤더를 어떻게 설정합니까?
- API를 사용하여 c# 창에서 데이터 저장
- c# : 트랜잭션의 WCF 서비스에서 REST API에 대한 Post 요청 만들기
- api : 우편 배달부를 사용하여 요청에서 토큰을 가져 와서 다른 사람에게 보냅니다.
- java : https://spring.io/guides/gs/sumption-rest/RESTful 웹 서비스 사용
- Restful Api 액세스를 Flutter 클라이언트로만 제한 하시겠습니까?
C #에서는 런타임에 식을 작성할 수 없습니다.
그러나 EF는이를위한 API를 가지고 있습니다.
당신을 찾고 있습니다
.Set<T>()
.