我使用的是热毛巾模板附带的 Breeze v1.1.2,该模板现已扩展为我的项目。我犯了将 NuGet 包更新到当前 1.3.3 的错误(我从未学习过)。无论如何,一切都很好,现在没有那么多了!
我按照发行说明和其他文档中的说明将 BreezeWebApiConfig 文件更改为:
[assembly: WebActivator.PreApplicationStartMethod(
typeof(BreezeWebApiConfig), "RegisterBreezePreStart")]
namespace MyApp.App_Start {
public static class BreezeWebApiConfig {
public static void RegisterBreezePreStart() {
GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "BreezeApi",
routeTemplate: "breeze/{controller}/{action}"
);}}}
以及 config.js 文件(它为 EntityManager 构造函数提供 serviceName):
var remoteServiceName = 'breeze/breeze'; // NEW version
//var remoteServiceName = 'api/breeze'; // OLD version
如果您有兴趣,还有我的 BreezeController:
[BreezeController]
public class BreezeController : ApiController
{
readonly EFContextProvider<MyDbContext> _contextProvider =
new EFContextProvider<MyDbContext>();
[HttpGet]
public string Metadata()
{
return _contextProvider.Metadata();
}
[HttpGet]
public IQueryable<SomeItem> SomeItems()
{
// Do stuff here...
}
}
现在我收到“在填充 metadataStore 之前无法执行 _executeQueryCore”错误。
我在这里想念什么?
编辑: 我可能遗漏了您需要的部分......在 SomeItems() 方法中,实际完成的是对 MyDBContext 类中的 GetMeSomeData() 方法的调用。此方法对存储过程进行以下调用以获取数据。
public virtual ObjectResult<SomeItem> GetMeSomeData(string inParam)
{
var p = new object[] { new SqlParameter("@inParam", inParam) };
var retVal = ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<SomeItem>("exec GetData @SN", p);
return retVal;
}
现在鉴于我有限的理解,对 Metadata() 的调用并没有失败,但我认为它不知道返回时实体模型是什么,即使在某个地方,它应该从实体中弄清楚我有模型(即 SomeItem)?Metadata() 的返回字符串没有关于实体的任何信息。有没有办法让它知道?还是我只是在左外野和雏菊玩耍?