推薦asp.net MVC模型設計方法

asp.net c# dapper orm

我正在嘗試為我即將開始的新項目決定最佳方法,當談到我的模型設計時(我正在使用Dapper.net)。

我喜歡讓我的模型使用對象而不是外鍵屬性的想法,即

public Post LastPost { get; set; }

VS

public int LastPostId { get; set; }

然而,如果我實現這種漂亮的干淨方法,我必須多映射到所有對象(這導致對象內的對象的潛在圓形引用,(或必須在某一點停止多映射,因此最終在對象樹的某個點上的NULL對象。)此外,如果我在一定程度上進行多映射,那麼我可能會導致不必要的工作,在不總是需要時執行連接等。

或者,如果我決定使用多映射在“根據需要”的基礎上填充對象內的對象(在我的一些repos方法中執行多映射,因為它需要,並且在其他repos方法中,不要費心填充對象),然後它感覺有點臟,因為我不能總是確定一個對象(在一個對象內)是否為空。

我過去曾經使用過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合法嗎? 是的,了解原因