推荐asp.net MVC模型设计方法

本文关键字:方法 模型 MVC asp net 推荐 | 更新日期: 2023-09-27 18:04:05

我正试图决定一个我即将开始的新项目的最佳方法,当它涉及到我的模型设计(我使用的是Dapper.net)。

我喜欢让我的模型带有对象而不是外键属性,即

public Post LastPost { get; set; }

public int LastPostId { get; set; }

然而,如果我实现这种干净的方法,我必须对所有对象进行多映射(这会导致对象内对象的潜在循环引用,或者必须在某个点停止多映射,因此在对象树的某个点上以NULL对象结束)。此外,如果我在一定程度上做多映射,那么我可能会导致不必要的工作,执行连接等,当它们并不总是需要的。

或者,如果我决定使用多映射在"按需"的基础上填充对象中的对象(在我的一些repos方法中执行多映射,因为它需要,而在其他repos方法中,不要费心填充对象),那么它感觉有点脏,因为我不能总是确定对象(在对象中)是否为空。

我过去使用过NHibernate(或者至少是它的一些更基本的功能),并没有遇到这样的困境,因为我的模型中总是有对象,如果/当需要它们的时候,我可以依靠延迟加载来获取它们——然而,在Dapper.net中没有延迟加载,我真的不确定最好的方法是什么?

推荐asp.net MVC模型设计方法

为什么不两全其美呢?

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;
   }
}

这允许您在需要时使用多映射和延迟加载,当您是懒惰的;

很好,这是延迟加载代理模式