2

当涉及到我的模型设计(并且我正在使用 Dapper.net)时,我正在尝试为即将开始的新项目确定最佳方法。

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

public Post LastPost { get; set; }

对比

public int LastPostId { get; set; }

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

或者,如果我决定使用多重映射“根据需要”在对象中填充我的对象(在我的一些 repos 方法中执行多重映射,因为它需要,而在其他 repos 方法中,不要费心填充对象),然后感觉有点脏,因为我不能总是确定一个对象(在一个对象内)是否为空。

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

4

2 回答 2

4

为什么不能两全其美?

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

这使您可以在需要时使用多映射和延迟加载进行预加载,当您懒惰时;

于 2011-08-17T09:51:48.407 回答
0

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

于 2013-04-06T12:25:28.883 回答