推奨asp.net MVCモデル設計手法

asp.net c# dapper orm

質問

私は私のモデルデザイン(そして私はDapper.netを使用しています)に関して、私が始めようとしている新しいプロジェクトのための最良のアプローチを決定しようとしています。

私は、外来キーのプロパティではなく、オブジェクトで私のモデルを持っているというアイデアが好きです。

public Post LastPost { get; set; }

public int LastPostId { get; set; }

しかし、このようなきれいなアプローチを実装すれば、すべてのオブジェクト(オブジェクト内のオブジェクトの潜在的な循環参照につながる)にマルチマップする必要があります(または、特定のポイントでマルチマッピングを停止する必要があります。何らかの点でNULLオブジェクトがオブジェクトツリーの下にあります)。また、ある程度まで複数のマップを作成すると、不必要な作業が発生したり、結合が必要になることがあります。

または、マルチマッピングを使用して、必要に応じてオブジェクト内にオブジェクトを移入することにした場合(私のreposメソッドの中には、必要なものや他のreposメソッドでマルチマッピングを実行するものがあります。 )、オブジェクト(オブジェクト内)がnullであるかどうかを必ずしも確かめることができないという点で、一種の汚いと感じます。

私は過去に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
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow