【问题标题】:Breeze Custom Actions微风自定义操作
【发布时间】:2015-05-22 16:59:15
【问题描述】:

我在许多项目中使用 BreezeJS 已经有一段时间了,我不得不说,在大多数情况下,它让你的生活更轻松,这就是我不断回归的原因。但是,我似乎一直遇到一种情况,它完全没有问题,而且我似乎找不到任何“正确”的方法来解决这个问题。

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

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

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

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

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

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

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

我见过的解决此类操作的一种方法是简单地“围绕”微风 api 控制器进行此类操作。也就是简单的使用一个与微风无关的ApiController。但是我觉得这有悖于微风的目的,因为如果操作导致创建或删除实体,您必须在客户端上自己开始跟踪它们,或者在本地创建它们,或者通过发出另一个微风查询到去拿他们。如果您需要大量此类操作,这真的很烦人。

【问题讨论】:

  • 我自己也在为同样的问题苦苦挣扎。

标签: c# entity-framework breeze


【解决方案1】:

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

作为一种解决方法,我使用自定义方法扩展了微风实体,该方法将发布到 /trades(???)/ImportTrade。 如果微风能为我们处理这件事,那就太好了!

【讨论】:

    【解决方案2】:

    您使用 ajax post 的方法是做这类事情的好方法... 您还可以通过从与数据库无关的 BreezeContext 继承来创建自己的上下文,并在那里执行您的操作而不保存实体,并且仍然将结果作为未跟踪的对象或实体返回。

    如果您在服务器上创建一个新实体(使用轻风并不总是一个好主意,但仍然可以完成),您必须确保轻风仍然会为该实体生成临时键。 您可以使用临时键生成器或仅删除非跟踪对象的主键。 您可以使用该实体类型的元数据来获取它的主键属性,然后使用 javascript 删除它们,如下所示:delete obj[prop] 然后将 createEntity 与没有主键的非跟踪实体一起使用。 然后,Breeze 将为您和您的所有设置生成主键。

    我也希望 Breeze 能够解决执行自定义操作的需求,这些操作可能会以更直观的方式返回自定义的非跟踪对象

    希望对你有帮助

    【讨论】:

    • 从“BreezeContext”继承是什么意思?
    • 我的意思是您可以创建自己的类来实现像 SaveChanges 这样的 BreezeContextProvider 函数,以便创建自定义逻辑,然后调用该类的实例,并像您一样使用保存包调用它的 SaveChanges 函数通常会使用本机上下文提供程序
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2016-02-07
    • 2014-02-02
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多