2016-06-27 7 views
0

Mvvm LightとEntity Frameworkコアを使用して新しいUWPアプリケーションを作成しています。私はこれらの2つの技術には新しいです。Mvvm LightとEntity Frameworkコアのベストプラクティス

私は私のモデルを作成:同上参照指定クラスには、3つのプロパティを持つ単純なObservableObjectです。私はDbContextと私の異なるビューを管理するための最良の方法を探しています

public class UniversalTest1Context : DbContext 
{ 
    public DbSet<Article> Articles { get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     optionsBuilder.UseSqlite("Filename=UniversalTest1.db"); 
    } 

} 

私DbContextは次のとおりです。

アプリケーション全体に対して1つのDbContextを作成する方がよいでしょうか? 私はその考えが本当に好きではありません

各ViewModelにDbContextを作成する必要がありますか? 私はこれが好きです
ユーザーが記事リストビュー内のアイテムをダブルタップすると、記事詳細ビューに移動し、記事詳細ビューに関連付けられたビューモデルに記事を渡します。しかし、この既存の記事は、記事詳細ビューモデルのDbContextとは関係ありません。

必要なときにのみDbContextをインスタンス化できますか? 私の好みのオプション
このために、記事をリストビューモデルから詳細ビューモデルに渡します。そして、ユーザーがクリックを保存するとき、私はこのような何かを実行します。もちろん

using (var db = new UniversalTest1Context()) 
{ 
    db.Articles.Add(article); 
    await db.SaveChangesAsync(); 
} 

が、これは既存のもの(更新)するために、新たな記事(挿入)のために動作しますが、ありません。

私はここで心を悩ませています。事前に

多くのおかげで、 ジュリアン

+0

私はCQRSと[Mediatr](https://github.com/jbogard/MediatR) )。各インスタンスは作業単位であるため、使用するたびにインスタンスを作成する必要があります。 –

+0

Callum、この場合、ビューに編集された記事を新しいDbContextに渡してデータベースに保存するにはどうしたらいいですか? –

+0

MediatRを読み上げれば、 'SaveArticleRequest:IRequest

'と呼ばれるものを作成します。これはMediator.SendAsync(new SaveArticleRequest(article));を使用してMediatRで送信されます。 (SRP)クラスで、1つのことを処理します。これは、あなたのシステムを非常に詳細に構成できることを意味します。 IMHO素晴らしいパターン。 –

答えて

0

私の意見では、あなたは(IArticleRepoまたはそのようななめらかのような)インターフェースにより、すべての保存操作を非表示にするといくつかのクラスが働きたい場合は、(それにアクセスするためのIoCを使用する必要がありますストアでは、IArticleRepoをctorパラメータで宣言する必要があります)。また、このインタフェースの内部では、IArticleRepo.AddArticle(記事a)のような記事で必要な操作を行うことができます。もしそうなら、後で、それぞれの操作のためにdbcontextを作成するかどうか、あるいはIoCコンテナを使ってIArticleRepoをsingletoneとして実装したいかどうかを選択できます。しかし、そのような決定は他のコードに影響を与えるべきではありません。 私のコードでは非常にシンプルなサンプルです(このファイルのみを表示していますが、プロジェクト全体が醜いので変更します)https://github.com/tym32167/arma3beclient/blob/master/src/Arma3BE.Client.Libs/Repositories/PlayerRepository.cs#L23

関連する問題