2017-01-25 5 views
0

私は、Asp.Netアプリケーションでデータベースアクセスを抽象化するためにUnitOfWorkパターンを使用しています。基本的に私はここで説明したUnitOfWorkパターンのアプローチに従う:UnitOfWorkパターンを使ってAddからIDを取得するには?

https://chsakell.com/2015/02/15/asp-net-mvc-solution-architecture-best-practices/

しかし、私は私が新しく追加されたアイテムのIDを取得する方法を理解するのに苦労しています。新しい顧客を顧客リポジトリに追加する場合と同様に、顧客IDを取得するにはどうすればよいですか?問題は、AddとCommitは分離されており、IdはCommitの後まで分からないということです。

UnitOfWorkパターンを使用して、追加されたアイテムのIDを取得する方法はありますか?

+1

大きな質問はここにあります:なぜこのIDが必要ですか?私はリンクを読んでいませんでしたが、これは1つのトランザクションで完全なオブジェクトグラフをコミットするのに役立たないアーキテクチャーのようなにおいがします。 –

+0

私はIDをクッキーに保存する必要があります。 – brinch

答えて

0

パターンを破り、新しく作成されたエンティティについての追加情報を渡さない限り、これを行う方法はありません。

コミットが成功し、どのエンティティが作成/更新/削除されたかについての情報がない場合にのみIdが割り当てられるので、ほとんど知ることは不可能です。

私は一度それが仕事の単位が要求全体のトランザクションでなければなりません

public string Insert(Person entity) 
{ 
    uow.Repository.Add(entity); //public Repository object in unit of work which might be wrong 
    Response responseObject = uow.Save(); 
    string id = entity.Id; //gives the newly generated Id 
    return id; 
} 
1

(私もそれをお勧めしませんが、私は特にこのためにそれを必要とする使用)以下のコードを使用しました。

新しく作成されたオブジェクトからperson idを返すだけです。

あなたは、これが異なりますあなたのデータアクセスに使用している技術に応じて、しかし、あなたはEntity Frameworkのを使用している場合、あなたは次の操作を行うことができます。このようPersonインスタンスを作成することにより

var person = DbContext.Set<Person>().Create(); 

// Do your property assignment here 

DbContext.Set<Person>().Add(person); 

return person.Id; 

を、あなたが得ます遅延ロードを可能にするトラッキングされたインスタンス、およびIdプロパティを使用します。これは、SaveChangesが呼び出されたときに(作業ユニットの終了によって)更新されるためです。

関連する問題