권장 asp.net MVC 모델 디자인 접근법

asp.net c# dapper orm

문제

나는 내가 시작하려고하는 새로운 프로젝트에 대한 최선의 접근 방식을 내 모델 디자인 (그리고 나는 Dapper.net을 사용하고있다)에서 결정하려고 노력하고있다.

나는 Foreign Key 속성보다는 개체로 내 모델을 가지고 있다는 생각을 좋아한다.

public int LastPostId { get; set; }

public int LastPostId { get; set; }

그러나 이런 종류의 멋진 접근 방식을 구현하면 모든 객체에 멀티 맵핑을해야합니다 (객체 내에서 객체의 잠재적 인 순환 참조가 발생하거나 특정 지점에서 멀티 매핑을 중지해야하므로 어떤 시점에서 NULL 객체 트리 아래에있는 객체). 또한, 만약 내가 멀티 - 맵을 수행한다면, 아마도 불필요한 작업을 일으키고, 조인 등을 수행 할 때 항상 필요하지는 않을 것이다.

또는 멀티 매핑을 사용하여 '필요에 따라'기반으로 개체 내 개체를 채우기로 결정한 경우 (일부 리포지토리 메서드는 필요에 따라 멀티 매핑을 수행하고 다른 리포지토리 메서드에서는 개체 채우기가 필요하지 않습니다. ), 객체 (객체 내의)가 null인지 아닌지를 항상 확신 할 수 없다는 점에서 더러운 느낌이 들게됩니다.

나는 과거에 NHibernate (또는 적어도 더 기본적인 기능 중 일부)를 사용 했었고, 항상 내 모델 내에 객체가 있었기 때문에 딜레마가 없었고, 필요할 때면 게으른 로딩을 사용하여 얻을 수 있었다. - 그러나 Dapper.net에 대한 게으른로드가 없으면 가장 좋은 방법을 모를 수 있습니까?

수락 된 답변

왜 두 세계의 장점을 가지고 있지 않습니까?

bool _lastPostLoaded;
private Post _lastPost; 
public Post LastPost 
{ 
   get 
   {
      if(!_lastPostLoaded)
      {
         _lastPost = cnn.Query<Post>("select * from Posts where Id = @lastPostId", 
              new {lastPostId});
         _lastPostLoaded = true;
      }
      return _lastPost;
   } 
   set 
   {
      _lastPost = value;
      _lastPostLoaded = true;
   }
}

이 기능을 사용하면 게으른 멀티 매핑과 지연로드가 필요할 때마다 열심히로드 할 수 있습니다.


인기 답변

좋은, 그것은 게으른 로딩 프록시 패턴입니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.