我正在尝试为我即将开始的新项目决定最佳方法,当谈到我的模型设计时(我正在使用Dapper.net)。
我喜欢让我的模型使用对象而不是外键属性,即
public Post LastPost { get; set; }
VS
public int LastPostId { get; set; }
然而,如果我实现这种漂亮干净的方法,我必须多映射到所有对象(这导致对象内的对象的潜在圆形引用,(或必须在某一点停止多映射,因此最后在对象树的某个位置使用NULL对象。)此外,如果我在一定程度上进行多映射,那么我可能会导致不必要的工作,在不总是需要时执行连接等。
或者,如果我决定使用多映射在“按需”的基础上填充对象内的对象(在我的一些repos方法中执行多映射,因为它需要,而在其他repos方法中,不要打扰填充对象),然后感觉有点脏,因为我不能总是确定对象(在对象内)是否为空。
我过去曾经使用过NHibernate(或者至少是它的一些基本功能)并没有进入两难的境地,因为我的模型中总是有对象,如果需要它们,我可以依赖延迟加载来得到他们 - 然而,没有Dapper.net的延迟加载我真的不确定最好的方法吗?
答案 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加载代理模式。