2017-02-18 9 views
1

私はちょうどMartenを発見しましたが、現在これを適切に使用する方法を学んでいます。MartenをASP.NET MVC/Coreに使用する適切な方法

新しいレコードを作成するために、それはのようにまっすぐ進むの提出時に、空白のフォーム/ビューを提供するようにすることができます - ちょうどこのようにセーブを実行して新しいセッションを開く:

更新について
using (var session = _documentStore.LightweightSession()) 
     { 
      session.Store(model); 
      session.SaveChanges();     
     } 

しかし、どのように既存のレコード?レコードをフェッチしてフォームに表示した後は、上で使用したのと同じコードを使用するか、別の方法がありますか?私が更新のために見つけた唯一の例は、Load()メソッドを呼び出してプロパティを編集した後、使用されたセッションのSaveChanges()メソッドを呼び出してからセッションからレコードをロードすることです。

答えて

2

Martenはdocument identityを使用して文書を追跡します。 Idはパブリックフィールドまたはプロパティのいずれかで、名前はidまたはIdまたはIDのいずれかでなければなりません。 docから

引用:

マーテンの.NET APIには、挿入と更新の間に区別を行いません。 文書を更新するためにMartenによって生成されたPostgresql関数 ストレージテーブルはあなたのために "upserts"を実行します。ドキュメントがIDocumentSession.Store(ドキュメント)によって登録された である場合、MartenはそのドキュメントのIDタイプに対して 「自動割り当て」ポリシーを実行します。ドキュメントIDの詳細については、 「ドキュメントID」を参照してください。

これは、あなたが、必ずしもそれを更新する前にドキュメントをロードする必要がないことを意味します。 IDの値がわかっている場合は、文書の一部のプロパティを変更してIDocumentSession.Store(document)に電話すると、このIDを持つ文書がデータストアにすでに存在する場合に更新を実行します。

+0

です。私はそれが読み込まれたレコードのためのトラッキングシステムを汚しているが、同じメソッド "Store()"と "SaveChanges()"を通してモデル全体を渡すと、この機能はまだ動作するのでしょうか? JSONBフィールド全体を上書きするのは、汚れたフィールドのみを更新するよりもコストがかかります。ありがとう! – eSPiYa

関連する問題