c# - Breeze 自定义操作

标签 c# entity-framework breeze

一段时间以来,我一直在许多项目中使用 BreezeJS,我不得不说,在大多数方面,它让您的生活变得更加轻松,这就是我不断回头使用它的原因。然而,我似乎总是遇到一个情况,它完全没有变化,而且我似乎找不到任何“正确”的方法来解决这个问题。

让我解释一下。 BreezeJS 最好的事情之一是它遵循这种 UoW 模式,允许您使用实体管理器(如 EF)的 saveChanges 方法保存实体。

不过这也是问题的一部分,因为随着你开发的应用程序越来越复杂,我有时会觉得这种做法并不总是合适的。我发现我经常有:

  1. 实际上并不涉及在客户端上创建实体的操作,而是涉及在 Web API 上执行一个操作,该操作可能会导致在服务器上创建各种实体或其他形式的状态,然后应将其发回给客户。
  2. 涉及具有属性的实体的操作,无法保存,因为其中一些是服务器私有(private)的,不应放在客户端上(通常通过客户端的 JsonIgnore 解决,但当您开始坚持时会出现问题给定的实体)

我觉得有一个东西可以比较容易地解决这些问题,而且是OData中已经存在的一个概念:Actions。可以在全局、实体集或特定实体上执行的操作,然后返回将由 BreezeJS 直接跟踪的自定义对象或实体。

目前,我发现自己正在执行以下解决方法(我不知道这是否合适):<​​/p>

  • 在代表 Action 而非实际资源的 BreezeController 上执行“资源” Action 。这接受一个自定义参数对象并返回一个非实体对象,该对象可能包含实际实体(如“Cool Breezes”中所述的查找,因为这些将由 BreezeJS 跟踪)
  • 使用“ajaxpost”breeze lab 允许使用 POST 而不是 GET 查询资源,因此可以传入任何类型的参数。

有没有更合适的方法来完成这样的事情?是否有 future 计划支持自定义操作?

我见过的一种解决此类操作的方法是简单地使这些操作“围绕” Breeze api Controller 。也就是说,简单地使用与 breeze 无关的 ApiController。但我觉得这违背了 breeze 的目的,因为如果操作导致实体的创建或删除,你必须开始在客户端自己跟踪它们,方法是在本地创建它们,或者通过发出另一个 breeze 查询来去找他们。如果您需要大量此类操作,这真的会让人厌烦。

最佳答案

我自己也在为同样的问题而苦苦挣扎。我有一个使用 breeze 将交易存储在 SQL 数据库中的应用程序,在存储交易后,另一个用户可以使用该应用程序将交易发送到后端交易系统。我创建了一个 OData 操作来导入到外部交易系统,这样我就可以发布到/trades(123)/ImportTrade。当我使用/$metadata 获取服务的元数据时,它会看到交易实体具有此操作(它在元数据中)。 我希望 Breeze 能在元数据中看到这一点,并在交易实体上创建一个方法来发布到我的 OData 操作,但它没有。如果将其添加到 breeze 中(将 OData 操作公开为实体上的方法),这将是一个很棒的功能。

作为解决方法,我自己使用自定义方法扩展了 breeze 实体,该方法将发布到/trades(???)/ImportTrade。 如果 breeze 能帮我们解决这个问题就好了!

关于c# - Breeze 自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23864466/

相关文章:

c# - 在 Entity Framework (Oracle 或 SQL Server)中检测 dbms 类型

angularjs - 使用 $route resolve stops 页面解决 breeze query/Q promise

c# - 通过 ClosedXML.dll 打开 Excel 文件显示错误 "Excel found unreadable content"

c# - 什么样的 RSASignaturePadding 与 PKCS#8 key 一起使用?

c# - 'java.lang.System' 的类型初始值设定项引发异常。内部异常 : Unable to load DLL 'vjsnativ' :

multithreading - Entity Framework 4.3和线程

c# - User.Identity.GetUserId() 返回 null

entity-framework - 升级到 Visual Studio 16.3.0 后,dotnet ef 命令不再有效

javascript - 离线加载 Breeze 导航属性

entity-framework - Entity Framework 双向关系未加载包括