【发布时间】:2016-06-27 10:01:03
【问题描述】:
我正在使用 Mvvm Light 和 Entity Framework Core 创建一个新的 UWP 应用程序。我是这两种技术的新手。
我创建了我的模型:Article 类是一个简单的 ObservableObject,具有 3 个属性:Id、Référence 和 Désignation em>。
我的 DbContext 如下:
public class UniversalTest1Context : DbContext
{
public DbSet<Article> Articles { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Filename=UniversalTest1.db");
}
}
我正在寻找管理 DbContext 和我的不同视图的最佳方式。
为整个应用程序创建一个 DbContext 更好吗? 我不太喜欢这个主意。
我必须在每个 ViewModel 中创建一个 DbContext 吗? 我更喜欢这个。
当用户在文章列表视图中双击一个项目时,我导航到文章详细视图并将文章传递给与文章详细视图关联的视图模型。但是这篇已经存在的文章与文章详细视图模型的 DbContext 无关。
是否可以仅在需要时实例化 DbContext ? 我的首选。
为此,我将文章从列表视图模型传递到详细视图模型。然后,当用户单击保存时,我执行如下操作:
using (var db = new UniversalTest1Context())
{
db.Articles.Add(article);
await db.SaveChangesAsync();
}
当然,这适用于新文章(插入),但不适用于现有文章(更新)。
我在这里很难下定决心。
提前非常感谢, 朱利安
【问题讨论】:
-
我会查找 CQRS 和 Mediatr。每次使用时都应该创建一个实例,因为每个实例都是一个工作单元。
-
Callum,在这种情况下,如何将我视图中编辑的文章传递给新的 DbContext 以便将其保存到数据库中?
-
如果您阅读 MediatR,您将创建所谓的
class SaveArticleRequest : IRequest<Article>然后使用mediator.SendAsync(new SaveArticleRequest(article));在 MediatR 中发送此内容,这样您只创建非常利基(SRP)的类来处理一件事情。这意味着您可以非常详细地组成您的系统。恕我直言,这是一个惊人的模式。 -
在您的问题中发布
viewModel代码,我将使用 CQRS 为您创建答案。 -
@JulienFerraro,如果你想创建大型复杂的应用程序,我建议你使用 PRISM。如果你创建的东西非常小,那么你可以使用任何你想要的东西。
标签: c# entity-framework uwp mvvm-light