使用ASP MVC5和AngularJS的Breeze.js

时间:2014-06-18 20:54:28

标签: asp.net-mvc angularjs breeze entity-framework-6

我正在考虑使用ASP MVC5Breeze.js创建一个AngularJS项目(不是WebApi,我必须坚持使用ASP.MVC)但是我面临各种各样的因为文档在实现这一点上没有完成的问题(所有新的例子都是用WebApi完成的)。我通过NuGet(Breeze.WebApi2)上找到的包创建了一个MVC控制器,所以我设法编译,但我不确定它是否真的有效,我觉得它没有做我想要的魔法。如果我转到http://localhost/breeze/MyBreeze/MetaData,我会得到它的JSON对象,很酷的部分可行,但如果我尝试使用此http://localhost/breeze/MyBreeze/Attendees来获取参加者,那么我唯一得到的就是SQL查询,所以没有JSON数据,我猜我想要......我呢? Breeze.WebApi2[BreezeController]是否适用于ASP MVC5(同样不适用于WebApi)?
这是我的MVC5控制器:

using Breeze.ContextProvider;
using Breeze.ContextProvider.EF6;
using Breeze.WebApi2;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TemplateBreezeAngularMVC5.Models;

namespace TemplateBreezeAngularMVC5.Controllers
{
    [BreezeController]
    public class MyBreezeController : Controller
    {
        static readonly TimeSpan RefreshRate = TimeSpan.FromMinutes(60);
        private static readonly object Locker = new object();
        static DateTime _lastRefresh = DateTime.Now; // will first clear db at Now + "RefreshRate" 
        // static DateTime lastRefresh = DateTime.MinValue; // will clear when server starts

        private readonly EFContextProvider<ConferenceContext> _contextProvider = new EFContextProvider<ConferenceContext>();

        public MyBreezeController()
        {

        }

        [HttpGet]
        public string Metadata()
        {
            return _contextProvider.Metadata();
        }

        [HttpGet]
        public IQueryable Attendees()
        {
            return _contextProvider.Context.Attendees;
        }

        [HttpGet]
        public IQueryable Presentations()
        {
            return _contextProvider.Context.Presentations;
        }

        [HttpGet]
        public IQueryable Speakers()
        {
            return _contextProvider.Context.Speakers;
        }

        [HttpPost]
        public SaveResult SaveChanges(JObject modifications)
        {
            return _contextProvider.SaveChanges(modifications);
        }
    }
}

这里也是我的Angular代码,非常基本,我只是想让查询工作并返回数据虽然失败并返回查询,比如SELECT [Extent1].[Id] AS [Id], ...,但我想这是因为MVC控制器不是'工作正常。无论如何,这是我的Angular代码:

breeze.config.initializeAdapterInstance('modelLibrary', 'backingStore', true);
//Q.stopUnhandledRejectionTracking();

var myApp =
    angular
        .module('myApp', ['ngRoute', 'breeze.angular', 'breeze.directives'])
        .controller("SpeakersCtrl", function ($scope) {
            var manager = new breeze.EntityManager('/breeze/MyBreeze');

            var query = new breeze.EntityQuery.from("Speakers");
            manager.executeQuery(query).then(function (data) {
                $scope.results = data.results;
                $scope.$apply();
            }).fail(function (e) {
                alert(e);
            });
        });

然后我安装的NuGet包是AngularJSBreeze.ClientWebApi2.EF6Breeze.Angular.DirectivesBreeze.AngularBreeze.Server.ContextProvider.EF6Breeze.Server.ContextProviderBreeze.Server.WebApi2EntityFramework 6.0jQueryJson.NETQ 我也试图得到旧HotTowel MVC4,但它缺少很多东西而且没有让它起作用。

编辑
值得一提的是,我想使用ASP MVC的原因是我的公司强迫我使用它,也因为我不会制作SPA。

1 个答案:

答案 0 :(得分:2)

为了回答我自己的问题,在Steeve Schmitt和Ward的帮助下,我得出的结论是,我可以将我的项目保留为ASP MVC,但保留BreezeController作为WebApi控制器。将MVC控制器与WebApi控制器混合没有问题。我不得不改变这个:

public class MyBreezeController : Controller

到此:

public class MyBreezeController : ApiController

并且还要确保项目的BreezeWebApiConfig.cs部分正确设置路由。瞧!!!“