BreezeJs Ef Core迁移问题

时间:2018-04-22 11:04:24

标签: c# asp.net-core breeze ef-core-2.0

最近我们将后端网络API从.Net 4.61升级到.Net Core 2.0, 我们正在使用Breezejs,我们很高兴, 升级后,我们面临两个无法在线找到答案的问题:

用于升级所有用的是:

我们将这个git用作guidline:https://github.com/mikemichaelis/dnc/

但要总结一下:

  1. 使用.Net标准库项目和Scaffold-DbContext(包含所有必需的依赖项)

  2. 使用Breeze和Ef Core Dependencies创建.Net Core 2.0 WebApi项目

  3. 将我们的旧控制器迁移到新项目并删除了错误

  4. 所以这是第一个问题: 对于只返回实体的List方法,它可以正常工作

    但对于返回单个Object的Methods,它给出:

        [HttpGet]
        public Choice ChoiceByID(int ID)
        {
            var result = this.PersistenceManager.Context.Choice
                .SingleOrDefault(n => n.ID == ID);
            return result;
        }
    
      

    breeze error错误:无法将此端点转换为IQueryable

    如果我们更改代码以返回IQueryable:

        [HttpGet]
        public IQueryable<Choice> ChoiceByID(int ID)
        {
            var result = this.PersistenceManager.Context.Choice
                .Where(n => n.ID == ID);
            return result;
        }
    

    它会给:

      

    breeze error错误:此EntityQuery ctor需要有效的json   串。以下不是json

    到目前为止,没有运气解决问题

2 个答案:

答案 0 :(得分:2)

经过一些挖掘和克隆微风git后,我发现了问题所在 对于efcore改变你应该如何调用你的终点似乎是微风:

之前第一个参数不存在(或者我没有使用它)

request detail in fiddler

所以解决问题:

  1. 将您的控制器更改为@Nkosi提供

  2. 在您的客户端中,添加以下行(在构造函数中):

    从'breeze-client'导入*作为微风; //导入顶部

    breeze.config.initializeAdapterInstance('uriBuilder','json')//添加到您的构造函数

答案 1 :(得分:1)

自迁移到.net核心以来,请考虑遵循控制器操作的建议语法结构,以避免任何无法预料的问题。

[HttpGet]
public IActionResult ChoiceByID(int ID) {
    var result = this.PersistenceManager.Context.Choice
        .SingleOrDefault(n => n.ID == ID);

    if(result == null)
        return NotFound() 

    Ok(new List<Choice>() { result });
}

或第二个例子

[HttpGet]
public IActionResult ChoiceByID(int ID) {
    var result = this.PersistenceManager.Context.Choice
        .Where(n => n.ID == ID).ToList();

    if(result.Any())
        return Ok(result);

    return NotFound();
}