문제

나는 것을 통해서(특별히 그들을 사용하여 Linq-to-체)나는 기본 개념을 이해하고,그러나 어떤 일이 나에게 문제입니다.

서 일반적으로만 간단한 모델과는 양식만 활용하는 기본을 만들고,업데이트 및 삭제의 문이 있습니다.내가 조금 더 복잡,그리고 나는 확실하지 않겠에 대한 올바른 방법이기 때문에 올 때 그 시간을 처리하는 관계의 반을 다스 데이터베이스 객체는,자습서 중지 돕고 있습니다.

게시물에 대한 방법 일반적인 방법으로 수행하는 CRUD 작업

entities.AddToTableSet(myClass);
entities.SaveChanges();

지 않을 내가 원하는 것이기 때문에 완전히 구현한 클래스고 있지 않는 게시하는 컨트롤러 방법입니다.게시 할 수있 개별 필드,양식 또는 여러 DTO 개체고 다음 메소드를 호출에 서비스 또는 저장하는 정보가에서 받은 형식,정보와 함께하는 데 필요에 대한 쿼리를 만들거나 자체가,그리고 그때부터 모든 것들을 만들고,데이터베이스 객체는 저장할 수 있습니다.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(int id, [Bind(Exclude = "Id")] ClassA classA,
                        [Bind(Exclude = "Id")]ClassB classB)
{
   // Validation occurs here

   if(!ModelState.IsValid)
      return View();

   try
   {
      _someRepositoryOrService.Add(id, classA, classB);
      return RedirectToAction("Index", new { id = id });
   }
   catch(Exception ex)
   {
      // Logging and exception handling occurs here
   }
}


public void Add(int id, ClassA classA, ClassB classB)
{
    EntityA eA = new EntityA
    {
        // Set a bunch of properties using the two classes and
        // whatever queries are needed
    };

    EntityB eB = new EntityB
    {
        // Set a bunch of properties using the two classes and
        // whatever queries are needed
    };

    _entity.AddToEntityASet(eA);
    _entity.AddToEntityBSet(eB);
    _entity.SaveChanges();
}

내가 처리가 올바르게 하거나 내가 bastardizing framework?실제로 엔터티를 사용하여 객체를 직접 확인하고,에 대한 쿼리를 하나는 내가 정보를 필요에 DTO 및 기초 내을 갖추고 있습니다.동 간의 창조이다.이 허용,또는 나의 회피의 엔터티를 사용하여 직접 거의 목적에 반하여 framework?

편집:나는 걱정도 이에 대한 접근 방식이 필요하기 때문에 빈 생성자를 제대로 수행 LINQ 쿼리를 때문에 이 오류 메시지:

만 매개 변수가 없는 생성자 및 이니셜라이저에서 지원되는 LINQ 체.

이것은 큰 문제 때문에 나가 거의 필요 논리 int 생성자,그러나 이것이 문제가 없 생성자 및 공공 재산?

도움이 되었습니까?

해결책

_someRepositoryOrService.추가(id,classa 를,기본);

말 것을 부부의 저장소 프레젠테이션층이다.이 되지 않습니다.귀하의 저장소에만 작동 entities.다음 방법을 알 수 있을 추가 방법

public void 추가(int id,인터페이스 또는 멤버 하 classa 를,기본 기본)

바꿈 문제의 분리(SoC).그것은 두 가지 작업을 수행:

  1. 맵 뷰 데이터로 엔티티
  2. 저장소

분명히는 첫 번째 단계에서 수행해야 프레젠테이션층이다.을 고려하여 모델이 바인더니다.그것은 또한 당신을 도울 수 있습을 해결하고 생성자 문제 때문에,당신의 모형 바인더로 만들 수 있습 알고 있는 건설 현장의 요구 사항입니다.

체크 또한 이 호 게시 에 의해 지미그(co-author 의 ASP.NET MVC 에서 활동)대 ViewModels.이것은 당신을 도움이 될 수 있습을 자동화 매핑을 사용합니다.그것은 또한 제안된 기술을-당신의 컨트롤러와 함께 작업체,지 ViewModels!사용자 지정 작업에 필터와 모형 바인더는 정말 열쇠를 제거하는 일과하지 않는 정말에 속하는 컨트롤러하지만 오히려는 인프라의 세부 사이를 보고 컨트롤러입니다.예를 들어, 's 는 방법을 자동화체 retrival. 's 는 방법을 내가 무엇을 볼 컨트롤러야 합니다.

여기에 목표를 확인 컨트롤러 contentrate 관리에는 비즈니스 논리,따로 넣는 모든 기술 정보에 속하지 않는 당신의 사업이다.그것은 techical 는 제약 조건에 대해 이야기 이 질문에는,당신은 그들을 누출로 당신의 코드입니다.그러나 사용할 수 있습 MVC 도구는 이동하는 그들에게 인프라의 수준입니다.

업데이트:No,저장소 안 핸들 형태 데이터를,그것에 의해 무엇을 의미"카플링과 함께 프리젠테이션".예,저장소에 컨트롤러하지만,그들과 함께 작동하지 않는 양식이다.할 수 있는(당신이해야한다)양식 작동으로"저장소 데이터"-즉체는 무엇 대부분의 예,예를 들어,NerdDinner-지만 다른 방법이다.이 때문에 일반의 높은 층을 결합될 수 있습니다 낮은 사람(프레젠테이션과 함께 저장소 및체)지만,결코 저렴한 수준의 결합해야한다 더 높은 사람(엔티티에 의존한 저장소로 저장소에 따라 달라집 형태로 모델,etc.).

첫 번째 단계를 수행해야에서 저장소에는 것을 제외하고 매핑에서 ClassX 을 EntityX 에 속하지 않는 단계입니다.그것은 매핑 문제는 인프라가 있습니다.예를 들어,참조 질문에 대해 매핑하지만,일반적으로 두 개 있는 경우에 레이어(UI 및 저장소)그들은 걱정하지 말고에 대한 매핑-매퍼는 서비스/도우미 해야 합니다.옆에 지미의 블로그를 읽을 수도 있습니다 ASP.NET MVC 에서 작업 또는 단순히 자신의 CodeCampServer 는 방법에 대한 그들은 매핑 IEntityMapper 인터페이스를 통하여 컨트롤러를 생성자(이 설명서 및 더 적은 작업 방식을 지미그의 AutoMapper).

그리고 한가지 더 있습니다.에 대해 읽어 도메인 중심의 디자인,보고에 대한 기사를,그들로부터 배우고,하지만 당신은하지 않는 모든 것을 따르십시오.이러한 지침을 엄격하지 않는 솔루션입니다.귀하의 프로젝트를 처리할 수 있습니다,당신은 처리할 수 있는니다.에 적용하려고 하는 이 기술을 이기 때문에 일반적으로 우수하고 승인된 방법을 개발,하지만 그들에게 맹목적으로-그것의 더 나은 배우는 길을 따라보다는 적용하지 않는 무언가를 이해합니다.

다른 팁

DTO를 사용하고 엔티티 프레임 워크를 자신의 데이터 액세스 방법으로 포장하는 것이 좋은 방법이라고 말합니다. 많은 코드를 작성하게 될 수 있지만 엔티티 프레임 워크 생성 코드가 비즈니스 계층 인 척하는 것보다 더 나은 아키텍처입니다.

이러한 문제가 실제로 어떤 식 으로든 ASP.NET MVC와 관련이있는 것은 아닙니다. ASP.NET MVC는 기본적으로 모델 / 데이터 액세스를 수행하는 방법에 대한 지침을 제공하지 않으며 ASP.NET MVC의 대부분의 샘플 및 자습서는 제작 가치가있는 모델 구현이 아니라 실제로 최소화합니다.

당신이 올바른 길을 가고있는 것 같습니다. 계속 가십시오.

결국, 당신은 매우 유용한 코드를 생성하지 않는 코드 생성기로 엔티티 프레임 워크를 사용하고 있으므로 요구 사항과 더 밀접하게 일치하는 다른 코드 생성기 또는 도구 또는 프레임 워크를 살펴볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top