1

我可以使用一些关于如何在 Breeze 版本及其依赖项之间手动更新的指导。我不相信我可以只使用 NuGet 包管理器进行更新。

我一直在用 Breeze、Knockout、WebAPI 等开发我的单页应用程序。我一直在使用 Breeze 0.61 版并想升级到最新版本,这样我就可以利用 ODataActionFilters 而不必解析 Request.QueryString 来提取参数和过滤器。例如当我打电话时

       var getMachineById(machineId) {
            var query = EntityQuery
            .from("Machines")
            .where("machineId", "eq", machineId);

            return manager.executeQuery(query)
            .then(function (data) {
                do_something_with(data.results);
            })
            .fail(queryFailed);
       }

Breeze 必须有办法为我处理这个问题,所以我可以这样做:

    [AcceptVerbs("GET")]
    public IQueryable<Machine> Machines()
    {
        return _contextProvider.Context.Machines;
    }

代替

    // eg "?$filter=machineId%20eq%205"
    [AcceptVerbs("GET")]
    public IQueryable<Machine> Machines()
    {
        IQueryable<Machine> x = _contextProvider.Context.Machines;
        List<ODataQueryString> list = null;
        string qs = Request.RequestUri.Query.ToString(CultureInfo.CurrentCulture);  
        list = new ODataQueryStringParser(qs).Parse();
        if (list != null)
        {
            int machineId = int.Parse(list[0].Value); // covert string to an int
            x = x.Where(o => o.MachineId == machineId);
        }

        return x;
    }  
  1. 我注意到控制器中的属性装饰在示例中发生了变化。我的也需要换吗?

    namespace PilotPlantBreeze.Controllers
    {
        [JsonFormatter, ODataActionFilter]
        public class BreezeController : ApiController
        {
            readonly EFContextProvider<PilotPlantDbContext> _contextProvider =
            new EFContextProvider<PilotPlantDbContext>();
    
            [AcceptVerbs("GET")]
            public string Metadata()
            {
                return _contextProvider.Metadata();
            }
            [AcceptVerbs("POST")]
            public SaveResult SaveChanges(JObject saveBundle)
            {
                return _contextProvider.SaveChanges(saveBundle);
            }
     ... etc.
        }
    }
    
  2. 我在文件夹 ~\Scripts\lib 中有我的 3rd 方库。如果我使用 NuGet 包管理器进行更新,它会将所有替换项放在 ~\Scripts 中。如何将文件移动到 lib 文件夹中而不弄乱我的 Team Foundation Server (Azure) 源代码控制?

  3. Antlr3.Runtime.dll、Breeze.WebApi.dll、Irony.dll、Newtonsoft.Json.dll、WebActivator.dll 和 WebGrease.dll 的运行时版本是否在版本之间兼容。我打赌不会。我必须在 Visual Studio 中更改什么吗?

  4. 我可以只更改 packages.config 中包文件夹中的版本条目吗?

    谢谢。

4

1 回答 1

1

我认为你最好的方法是从你的项目中删除任何现有的微风'.js'文件和webApi和irony.dlls,然后简单地安装最新的微风nuget包。安装 nuget 包后,您可以继续将文件移动到项目中的其他位置以匹配它们的“旧”位置。我也会为 NewtonSoft nuget 包做同样的事情,以防万一(微风会为你添加这个)。展望未来,您可以更新到最新的 nuget,然后移动文件。

正如您所注意到的,您还需要替换这些属性

[JsonFormatter,ODataActionFilter]

有这个属性

[微风控制器]

这假定您没有运行 ASP.MVC4 的 beta 版本。我认为其他论坛中的帖子讨论了如何从测试版迁移。

于 2013-01-16T17:48:53.550 回答