BreezeJs Ef Core迁移问题
BreezeJs Ef Core migration problems
最近我们将后端 Web api 从 .Net 4.61 升级到 .Net Core 2.0,
我们正在使用 Breezejs,我们对此很满意,
升级后我们遇到了两个无法在线找到答案的问题:
用于升级的全部是:
我们使用此 git 作为指导:https://github.com/mikemichaelis/dnc/
但总结一下:
使用 .Net 标准库项目和 Scaffold-DbContext(具有所有需要的依赖项)
使用 Breeze 和 Ef Core 依赖项创建 .Net Core 2.0 WebApi 项目
将我们的旧控制器迁移到新项目并移除错误
所以首先是问题:
对于只有 return 个实体的列表方法,它工作正常
但是对于 return 是单个 Object 的方法,它给出:
[HttpGet]
public Choice ChoiceByID(int ID)
{
var result = this.PersistenceManager.Context.Choice
.SingleOrDefault(n => n.ID == ID);
return result;
}
breeze error Error: Unable to convert this endpoint to an IQueryable
如果我们将代码更改为 return IQueryable:
[HttpGet]
public IQueryable<Choice> ChoiceByID(int ID)
{
var result = this.PersistenceManager.Context.Choice
.Where(n => n.ID == ID);
return result;
}
它会给出:
breeze error Error: This EntityQuery ctor requires a valid json
string. The following is not json
到目前为止还没有解决问题
自从迁移到 .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();
}
经过一些挖掘和克隆 breeze git,我发现了问题所在
似乎 breeze efcore 改变了你应该如何称呼你的终点:
之前没有第一个参数(或者我没有使用它)
所以为了解决问题:
按照@Nkosi 提供的方式更改您的控制器
在您的客户端中,添加以下行(在您的构造函数中):
从 'breeze-client' 导入 * 作为 breeze; //在顶部导入
breeze.config.initializeAdapterInstance('uriBuilder', 'json') // 添加到你的构造函数
最近我们将后端 Web api 从 .Net 4.61 升级到 .Net Core 2.0, 我们正在使用 Breezejs,我们对此很满意, 升级后我们遇到了两个无法在线找到答案的问题:
用于升级的全部是:
我们使用此 git 作为指导:https://github.com/mikemichaelis/dnc/
但总结一下:
使用 .Net 标准库项目和 Scaffold-DbContext(具有所有需要的依赖项)
使用 Breeze 和 Ef Core 依赖项创建 .Net Core 2.0 WebApi 项目
将我们的旧控制器迁移到新项目并移除错误
所以首先是问题: 对于只有 return 个实体的列表方法,它工作正常
但是对于 return 是单个 Object 的方法,它给出:
[HttpGet]
public Choice ChoiceByID(int ID)
{
var result = this.PersistenceManager.Context.Choice
.SingleOrDefault(n => n.ID == ID);
return result;
}
breeze error Error: Unable to convert this endpoint to an IQueryable
如果我们将代码更改为 return IQueryable:
[HttpGet]
public IQueryable<Choice> ChoiceByID(int ID)
{
var result = this.PersistenceManager.Context.Choice
.Where(n => n.ID == ID);
return result;
}
它会给出:
breeze error Error: This EntityQuery ctor requires a valid json string. The following is not json
到目前为止还没有解决问题
自从迁移到 .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();
}
经过一些挖掘和克隆 breeze git,我发现了问题所在 似乎 breeze efcore 改变了你应该如何称呼你的终点:
之前没有第一个参数(或者我没有使用它)
所以为了解决问题:
按照@Nkosi 提供的方式更改您的控制器
在您的客户端中,添加以下行(在您的构造函数中):
从 'breeze-client' 导入 * 作为 breeze; //在顶部导入
breeze.config.initializeAdapterInstance('uriBuilder', 'json') // 添加到你的构造函数