我可以使用一些关于如何在 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;
}
我注意到控制器中的属性装饰在示例中发生了变化。我的也需要换吗?
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. } }
我在文件夹 ~\Scripts\lib 中有我的 3rd 方库。如果我使用 NuGet 包管理器进行更新,它会将所有替换项放在 ~\Scripts 中。如何将文件移动到 lib 文件夹中而不弄乱我的 Team Foundation Server (Azure) 源代码控制?
Antlr3.Runtime.dll、Breeze.WebApi.dll、Irony.dll、Newtonsoft.Json.dll、WebActivator.dll 和 WebGrease.dll 的运行时版本是否在版本之间兼容。我打赌不会。我必须在 Visual Studio 中更改什么吗?
我可以只更改 packages.config 中包文件夹中的版本条目吗?
谢谢。