Breeze服务器端保存更改,无需Entity Framework

时间:2014-08-26 10:46:09

标签: breeze

我在没有Entity Framework的情况下使用breeze,有没有办法在服务器端一次性保存整个更改集?或者我是否必须遍历实体列表并根据实体状态的检查保存每个实体?在此先感谢!!!

2 个答案:

答案 0 :(得分:0)

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

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

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

  • breeze.server.net
  • breeze.server.node
  • breeze.server.java

这些包括以下组合的服务器实现

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

答案 1 :(得分:0)

我和NancyFx(没有EF - OrmLite作为ORM),Breeze和AngularJs有类似的情况。我google了很多,但没有找到任何可以帮助我的好资源。 经过大量的热门和试编,我编写了完成的代码。

以下是简要步骤。

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

  2. 将EF元数据保存到metadata.js中,客户端将使用该元数据加载元数据。

  3. 在您的应用程序中进行更改,以便从js文件而不是从服务器中选择元数据。

  4. 在服务器上定义您自己的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;
    }
    
  5. &#34;节点:#微风&#34;应替换为&#34; EntityName:NameSpace&#34; NodeContext应该由一些用户定义的类替换,我们将在实体状态的基础上处理实体(CRUD操作)。