EF an cqrs:编辑和实体,同时保持层分离以及查询和命令分离
EF an cqrs: editing and entity while both keeping separation of layers and of query and command
我正在将 crud nTier 网络应用程序 (MVC) 更改为 cqrs 实现(这是我第一次这样做),我现在正在拆分业务层。我在重写一些编辑实体的命令时遇到问题,这是因为我必须 运行 查询才能获取实体,以便对其进行编辑。我认为正确的做法是让控制器进行 运行 查询,然后向下传递实体,但这似乎打破了层之间的分离,因为这意味着表示层会知道数据使用权。我在这里做什么,EF 中是否有一种方法可以使用用于创建实体的模型的新版本来编辑实体。如果那不可能,我怎么能在不破坏关注点或 cqrs 分离的情况下做到这一点。
我考虑过的一些选项是
将我的模型导出到公共库中
在命令堆栈中执行查询但仍未返回任何内容
您不需要查询对象来更新 table 中的记录。通过 Id 查询,您可以附加 "fake" 实体,编辑它并保存更改。
var book = new book()
{
Id = 20
};
using (var context = new DatabaseContext())
{
context.Books.Attach(book);
book.Title = "Updated Title";
context.SaveChanges();
}
这样你就不会破坏图层。您可以使用 DI 将 DatabaseConext 注入命令执行器。
我正在将 crud nTier 网络应用程序 (MVC) 更改为 cqrs 实现(这是我第一次这样做),我现在正在拆分业务层。我在重写一些编辑实体的命令时遇到问题,这是因为我必须 运行 查询才能获取实体,以便对其进行编辑。我认为正确的做法是让控制器进行 运行 查询,然后向下传递实体,但这似乎打破了层之间的分离,因为这意味着表示层会知道数据使用权。我在这里做什么,EF 中是否有一种方法可以使用用于创建实体的模型的新版本来编辑实体。如果那不可能,我怎么能在不破坏关注点或 cqrs 分离的情况下做到这一点。
我考虑过的一些选项是
将我的模型导出到公共库中
在命令堆栈中执行查询但仍未返回任何内容
您不需要查询对象来更新 table 中的记录。通过 Id 查询,您可以附加 "fake" 实体,编辑它并保存更改。
var book = new book()
{
Id = 20
};
using (var context = new DatabaseContext())
{
context.Books.Attach(book);
book.Title = "Updated Title";
context.SaveChanges();
}
这样你就不会破坏图层。您可以使用 DI 将 DatabaseConext 注入命令执行器。