最近我们将后端网络API从.Net 4.61升级到.Net Core 2.0, 我们正在使用Breezejs,我们很高兴, 升级后,我们面临两个无法在线找到答案的问题:
用于升级所有用的是:
我们将这个git用作guidline:https://github.com/mikemichaelis/dnc/
但要总结一下:
使用.Net标准库项目和Scaffold-DbContext(包含所有必需的依赖项)
使用Breeze和Ef Core Dependencies创建.Net Core 2.0 WebApi项目
将我们的旧控制器迁移到新项目并删除了错误
所以这是第一个问题: 对于只返回实体的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
到目前为止,没有运气解决问题
答案 0 :(得分:2)
经过一些挖掘和克隆微风git后,我发现了问题所在 对于efcore改变你应该如何调用你的终点似乎是微风:
之前第一个参数不存在(或者我没有使用它)
所以解决问题:
将您的控制器更改为@Nkosi提供
在您的客户端中,添加以下行(在构造函数中):
从'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();
}