![](/img/trans.png)
[英]Why am I getting a type error : "function_name" is not a function at
[英]Why am I getting this error? Error: Unable to locate a 'Type' by the name: 'User:#Default'
我正在尝试将OdataBreezeJSSample适配到我的项目中。 元数据被调用并填充,但是我的查询是:
var people = breeze.EntityQuery .from("Users") .using(manager) .select('Email') .execute() .then(function() { }) .catch(function(err) { var isEmpty = manager.metadataStore.isEmpty(); });
失败并显示错误消息:
错误:无法通过名称“用户:#Default”找到“类型”。 确保执行查询或首先调用fetchMetadata。
检查metastore在我的项目中显示为:
检查有效的样本后,元数据看起来有所不同:
据我所知,我的设置代码与示例匹配。 我也使用相同版本的库。 该查询从不触发,唯一的调用是获取$ metadata。
我尝试调用fetchMetadata(),但它只是创建了对/ $ metadata的重复调用。
是什么原因导致此错误消息?
更新:
这是EDMX。 我已经确认工作样本中只有1个架构。 我不知道从哪里生成了这个额外的架构。 生成EDM的所有代码均与示例匹配。
<xml version="1.0" encoding="utf-8"?> <edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx"> <edmx:DataServices m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> <Schema Namespace="SCATowel.Models" xmlns="http://schemas.microsoft.com/ado/2009/11/edm"> <EntityType Name="User"> <Key> <PropertyRef Name="Id" /> </Key> <Property Name="Id" Type="Edm.Int32" Nullable="false" /> <Property Name="Name" Type="Edm.String" /> <Property Name="Login" Type="Edm.String" /> <Property Name="Email" Type="Edm.String" /> <Property Name="IsAppAdmin" Type="Edm.Boolean" Nullable="false" /> <NavigationProperty Name="Sites" Relationship="SCATowel.Models.SCATowel_Models_User_Sites_SCATowel_Models_Site_SitesPartner" ToRole="Sites" FromRole="SitesPartner" /> <NavigationProperty Name="Settings" Relationship="SCATowel.Models.SCATowel_Models_User_Settings_SCATowel_Models_Setting_SettingsPartner" ToRole="Settings" FromRole="SettingsPartner" /> </EntityType> <EntityType Name="Setting"> <Key> <PropertyRef Name="Id" /> </Key> <Property Name="Id" Type="Edm.Int32" Nullable="false" /> <Property Name="SiteListLocation" Type="Edm.String" /> <NavigationProperty Name="User" Relationship="SCATowel.Models.SCATowel_Models_Setting_User_SCATowel_Models_User_UserPartner" ToRole="User" FromRole="UserPartner" /> </EntityType> <EntityType Name="Site"> <Key> <PropertyRef Name="Id" /> </Key> <Property Name="Id" Type="Edm.Int32" Nullable="false" /> <Property Name="Title" Type="Edm.String" /> <Property Name="Url" Type="Edm.String" /> <Property Name="IsSiteAdmin" Type="Edm.Boolean" Nullable="false" /> <Property Name="IsSiteOwner" Type="Edm.Boolean" Nullable="false" /> <NavigationProperty Name="User" Relationship="SCATowel.Models.SCATowel_Models_Site_User_SCATowel_Models_User_UserPartner" ToRole="User" FromRole="UserPartner" /> </EntityType> <Association Name="SCATowel_Models_User_Sites_SCATowel_Models_Site_SitesPartner"> <End Type="SCATowel.Models.Site" Role="Sites" Multiplicity="*" /> <End Type="SCATowel.Models.User" Role="SitesPartner" Multiplicity="0..1" /> </Association> <Association Name="SCATowel_Models_User_Settings_SCATowel_Models_Setting_SettingsPartner"> <End Type="SCATowel.Models.Setting" Role="Settings" Multiplicity="*" /> <End Type="SCATowel.Models.User" Role="SettingsPartner" Multiplicity="0..1" /> </Association> <Association Name="SCATowel_Models_Setting_User_SCATowel_Models_User_UserPartner"> <End Type="SCATowel.Models.User" Role="User" Multiplicity="0..1" /> <End Type="SCATowel.Models.Setting" Role="UserPartner" Multiplicity="0..1" /> </Association> <Association Name="SCATowel_Models_Site_User_SCATowel_Models_User_UserPartner"> <End Type="SCATowel.Models.User" Role="User" Multiplicity="0..1" /> <End Type="SCATowel.Models.Site" Role="UserPartner" Multiplicity="0..1" /> </Association> </Schema> <Schema Namespace="Default" xmlns="http://schemas.microsoft.com/ado/2009/11/edm"> <EntityContainer Name="Container" m:IsDefaultEntityContainer="true"> <EntitySet Name="Users" EntityType="SCATowel.Models.User" /> <EntitySet Name="Settings" EntityType="SCATowel.Models.Setting" /> <EntitySet Name="Sites" EntityType="SCATowel.Models.Site" /> <AssociationSet Name="SCATowel_Models_User_Sites_SCATowel_Models_Site_SitesPartnerSet" Association="SCATowel.Models.SCATowel_Models_User_Sites_SCATowel_Models_Site_SitesPartner"> <End Role="SitesPartner" EntitySet="Users" /> <End Role="Sites" EntitySet="Sites" /> </AssociationSet> <AssociationSet Name="SCATowel_Models_User_Settings_SCATowel_Models_Setting_SettingsPartnerSet" Association="SCATowel.Models.SCATowel_Models_User_Settings_SCATowel_Models_Setting_SettingsPartner"> <End Role="SettingsPartner" EntitySet="Users" /> <End Role="Settings" EntitySet="Settings" /> </AssociationSet> <AssociationSet Name="SCATowel_Models_Setting_User_SCATowel_Models_User_UserPartnerSet" Association="SCATowel.Models.SCATowel_Models_Setting_User_SCATowel_Models_User_UserPartner"> <End Role="UserPartner" EntitySet="Settings" /> <End Role="User" EntitySet="Users" /> </AssociationSet> <AssociationSet Name="SCATowel_Models_Site_User_SCATowel_Models_User_UserPartnerSet" Association="SCATowel.Models.SCATowel_Models_Site_User_SCATowel_Models_User_UserPartner"> <End Role="UserPartner" EntitySet="Sites" /> <End Role="User" EntitySet="Users" /> </AssociationSet> </EntityContainer> </Schema> </edmx:DataServices> </edmx:Edmx>
@Adel问我要问什么。 请参阅Brian Noyes对此问题的讨论 。 遗憾的是, ODataConventionModelBuilder
对EDMX不忠实。
情况变得更糟。 ODataConventionModelBuilder
不会保留必要的外键信息,这意味着您确实不能将其用于Breeze应用程序。 OData团队承认这一缺陷。 他们什么时候会解决? 没人知道。
为什么要使用Web API OData? 为什么不直接使用Web API ...我几乎每次都发现它既容易又优越。 我将使用Web API OData的唯一原因是,如果我必须将Web api暴露给我无法控制的客户端,这些客户端也准备使用OData。
假设您有如此充分的理由。
您是否注意到Web API OData示例中的部分,建议不要使用ODataConventionModelBuilder
并将其定向到EdmBuilder
。 你在那样吗
您是否在App_Start
文件夹的WebApiConfig.cs
中公开了Users
集合?
public static IEdmModel GetEdmModel()
{
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<User>("Users");
builder.Namespace = "SCATowel.Models";
return builder.GetEdmModel();
}
来源: 开放数据(OData)
我有同样的问题。
我认为这仅仅是因为EF的元数据不利于轻松进行。
就像这里在http://www.breezejs.com/documentation/odata-server上解释的那样,您只需要使用nuget安装EdmBuilder就可以了:
Install-Package Breeze.EdmBuilder
然后将其添加到您的WebApiConfig.cs中 :
config.Routes.MapODataRoute(
routeName: "odata",
routePrefix: "odata",
model: EdmBuilder.GetEdm<MyDbContext>(),
batchHandler: new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer)
);
它应该工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.