Breeze服务器端保存更改而不使用实体框架

Breeze服务器端保存更改而不使用实体框架,breeze,Breeze,我使用的是没有实体框架的breeze,有没有办法在服务器端一次性保存整个更改集?或者我必须循环遍历实体列表,并根据实体状态的检查保存每个实体?提前感谢 您当然可以在单个EntityManager.saveChanges调用中保存整个更改集。查看breeze.js.samples GitHub repo中的NoDb示例,您将看到一个示例 当然,您需要自己在服务器上实现实际的保存操作,但服务器将接收整个更改集供您使用 此外,如果您不想使用EF,还可以使用其他几种breeze后端服务器技术。看看.NE

我使用的是没有实体框架的breeze,有没有办法在服务器端一次性保存整个更改集?或者我必须循环遍历实体列表,并根据实体状态的检查保存每个实体?提前感谢

您当然可以在单个EntityManager.saveChanges调用中保存整个更改集。查看breeze.js.samples GitHub repo中的NoDb示例,您将看到一个示例

当然,您需要自己在服务器上实现实际的保存操作,但服务器将接收整个更改集供您使用

此外,如果您不想使用EF,还可以使用其他几种breeze后端服务器技术。看看.NET服务器的.NET、Node和Java版本的breeze GitHub repos

  • breeze.server.net
  • breeze.server.node
  • breeze.server.java
其中包括以下组合的服务器实现

  • .NET/实体框架(EF支持的任何SQL db)
  • .NET/Hibernate-(NHibernate支持的任何SQL数据库)
  • 节点/续集-(MySql/Postgress数据库)
  • Node/Mongo-(Mongo数据库)
  • Java/Hibernate-(Hibernate支持的任何SQL数据库)

我对NancyFx(没有EF-OrmLite作为ORM)、Breeze和AngularJs有类似的场景。我在谷歌上搜索了很多,但没有找到任何可以帮助我的好资源。 经过大量的点击和尝试编码,我编写了代码来完成

以下是简单的步骤

  • 仅使用EF生成元数据。您可以在生产中删除EF

  • 将EF元数据保存到Metadata.js中,客户端将使用该文件加载元数据

  • 在应用程序中进行更改,以从js文件而不是服务器中拾取元数据

  • 在服务器上定义您自己的SaveChanges方法

    private dynamic SaveChanges(dynamic arg)
    {
        var requestBody = this.Request.Body;
        int length = (int)requestBody.Length; //this is a dynamic variable.
        byte[] data = new byte[length];
        requestBody.Read(data, 0, length);
    
        JObject saveBundle = JObject.Parse(System.Text.Encoding.Default.GetString(data));
    
        for (int i = 0; i < saveBundle["entities"].Count(); i++)
        {
            JToken entity = saveBundle["entities"][i];
    
            switch ((string)entity["entityAspect"]["entityTypeName"])
            {
                case "Node:#Breeze":
                    Node node = NodeContext.Process(entity);
                    break;
            }
        }
    
        return this.Request.Body;
    }
    
    私有动态保存更改(动态参数)
    {
    var requestBody=this.Request.Body;
    int length=(int)requestBody.length;//这是一个动态变量。
    字节[]数据=新字节[长度];
    读取(数据,0,长度);
    JObject saveBundle=JObject.Parse(System.Text.Encoding.Default.GetString(data));
    对于(int i=0;i
  • “节点:#Breeze”应替换为“EntityName:命名空间”
    NodeContext应该被一些用户定义的类所取代,在这些类中,我们将根据实体状态处理实体(CRUD操作)。

    可能-您的备份存储是什么?感谢您的回复!!这是关系数据库,Web API和微型orm。谢谢Jay!NoDb示例只适用于一个实体TodoItem,我可以看到它在从客户机发送的列表中循环,并保存每个实体。我可以使用Breeze将整个变更集(不止一个实体)发送到服务器,因此基本上我必须循环实体,将它们转换为它们的模型,并通过检查实体状态保存每个实体,没有一个方便的函数来保存所有内容?根据发送到服务器的saveBundle执行保存的代码取决于后端的功能。EF能够接受整个变更集,Breeze EF服务器实现利用了这一点。NoDb示例显示了一种仅使用内存存储的替代实现。如果您的ORM提供了接受更改集的功能,那么您可以将发送到服务器的saveBundle转换为特定于ORM的更改集,并将其作为单个操作提交。这有道理吗?有道理。ORM无法接受更改集。我尽量避免使用EF,因为它又重又慢。谢谢你,杰!谢谢回复!经过大量的研究,我做了与您的步骤1-3相同的实现,对于步骤4,我使用了Breeze的SaveChange并实现了底层的保存功能。我之所以使用“无实体框架”,是因为我需要使用Mono在Linux上部署解决方案。早些时候,我拒绝了Breeze-NoDB解决方案,因为“Breeze.ContextProvider”nuget包会自动下载“实体框架包”,所以我觉得NoDB解决方案也使用EF程序集。但今天,我刚刚从项目中删除了EF程序集,它正在工作,现在我不必在服务器端编写巨大的SaveChanges逻辑。