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

时间:2011-08-01 16:01:51

标签: c# asp.net orm dapper

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

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

public Post LastPost { get; set; }

VS

public int LastPostId { get; set; }

然而,如果我实现这种漂亮干净的方法,我必须多映射到所有对象(这导致对象内的对象的潜在圆形引用,(或必须在某一点停止多映射,因此最后在对象树的某个位置使用NULL对象。)此外,如果我在一定程度上进行多映射,那么我可能会导致不必要的工作,在不总是需要时执行连接等。

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

我过去曾经使用过NHibernate(或者至少是它的一些基本功能)并没有进入两难的境地,因为我的模型中总是有对象,如果需要它们,我可以依赖延迟加载来得到他们 - 然而,没有Dapper.net的延迟加载我真的不确定最好的方法吗?

2 个答案:

答案 0 :(得分: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;
   }
}

当你懒惰时,这允许你在需要时使用多映射和延迟加载来急切加载;

答案 1 :(得分:0)

好,这是Lazy加载代理模式。