Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF和cqrs:编辑和实体,同时保持层与查询和命令的分离_C#_Asp.net Mvc_Entity Framework_Design Patterns_Cqrs - Fatal编程技术网

C# EF和cqrs:编辑和实体,同时保持层与查询和命令的分离

C# EF和cqrs:编辑和实体,同时保持层与查询和命令的分离,c#,asp.net-mvc,entity-framework,design-patterns,cqrs,C#,Asp.net Mvc,Entity Framework,Design Patterns,Cqrs,我正在将一个更粗糙的web应用程序(MVC)更改为cqrs实现(这是我第一次这样做),现在我正在拆分业务层。我在重写一些编辑实体的命令时遇到问题,这是因为我必须运行一个查询来获取实体才能编辑它。我认为正确的做法是让控制器运行查询,然后向下传递实体,但这似乎阻止了层之间的分离,因为这意味着表示层将知道数据访问。我在这里要做的是,EF中是否有一种方法可以使用用于创建实体的模型的新版本来编辑实体。如果这是不可能的,我如何在不打破关注点分离或CQR的情况下做到这一点 我考虑过的一些选择是 将我的模型拉

我正在将一个更粗糙的web应用程序(MVC)更改为cqrs实现(这是我第一次这样做),现在我正在拆分业务层。我在重写一些编辑实体的命令时遇到问题,这是因为我必须运行一个查询来获取实体才能编辑它。我认为正确的做法是让控制器运行查询,然后向下传递实体,但这似乎阻止了层之间的分离,因为这意味着表示层将知道数据访问。我在这里要做的是,EF中是否有一种方法可以使用用于创建实体的模型的新版本来编辑实体。如果这是不可能的,我如何在不打破关注点分离或CQR的情况下做到这一点

我考虑过的一些选择是

  • 将我的模型拉入公共库

  • 在命令堆栈中执行查询,但仍不返回任何内容


您不需要查询对象来更新表中的记录。与按Id查询不同,您可以附加“假”实体,编辑它并保存更改

var book = new book()
{ 
    Id = 20 
}; 

using (var context = new DatabaseContext()) 
{ 
    context.Books.Attach(book);
    book.Title = "Updated  Title";  

    context.SaveChanges(); 
}

这样就不会破坏图层。您可以使用DI将DatabaseConext注入命令执行者。

IMHO,您不会使用CQRS的查询特性获取整个实体/聚合根,以便将其作为命令的一部分进行操作。只需在命令中使用上下文或类似于存储库的东西。谢谢,这很有用。我看到了这一点,但认为它只在完全替换中有用,而不是在更新中。