【发布时间】:2014-05-09 14:26:45
【问题描述】:
我“成功”地对一个 asp.net web api ODATA 服务执行了一个微风查询,但似乎没有任何子级,即使响应中有子级。
查询: var 查询 = 微风.EntityQuery.from('交易') .take(20) .orderBy('Transaction_Timestamp desc') .expand('项目');
我如何访问孩子?我试过 .Items、.Items()、.Item、.Item(),那里没有属性或方法。在服务端,我验证了从 Transaction 到 Items (Transaction.Items) 和 Items.Transaction 的导航属性。而且,正如我所说,来自服务的 http 响应包含所有孩子的数据。
我在哪里可以查看问题可能出在哪里?
微风配置:
breeze.config.initializeAdapterInstance('dataService', 'webApiOData', true);
$http.defaults.headers.put = {
'Access-Control-Allow-Origin': '*'
};
new breeze.ValidationOptions({ validateOnAttach: false }).setAsDefault();
var metadataStore = createMetadataStore();
etc.
我的交易类:
public partial class Transaction
{
public Transaction()
{
this.Discounts = new HashSet<Discount>();
this.Items = new HashSet<Item>();
this.Tenders = new HashSet<Tender>();
}
public System.Guid Id { get; set; }
...
public virtual ICollection<Item> Items { get; set; }
}
我的物品类:
public partial class Item
{
public System.Guid Id { get; set; }
public System.Guid Transaction_Id { get; set; }
...
public virtual Transaction Transaction { get; set; }
}
这还不够吗?
项目实体的odata/$metadata:
<EntityType Name="Item">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Name="Id" Type="Edm.Guid" Nullable="false"/>
<Property Name="Transaction_Id" Type="Edm.Guid" Nullable="false"/>
... (omitted fields)
<NavigationProperty Name="Transaction" Relationship="TransactionService.Models.TransactionService_Models_Item_Transaction_TransactionService_Models_Transaction_TransactionPartner" ToRole="Transaction" FromRole="TransactionPartner"/>
</EntityType>
这是 Transactions.Expand('Items') 微风查询中返回的数据:
{
"odata.metadata":"http://localhost:49858/odata/$metadata#Transactions","value":[
{
"odata.type":"TransactionService.Models.Transaction","odata.id":"http://localhost:49858/odata/Transactions(guid'f93805cf-cc80-4d2e-9d9e-97df9c21c622')","Discounts@odata.navigationLinkUrl":"http://localhost:49858/odata/Transactions(guid'f93805cf-cc80-4d2e-9d9e-97df9c21c622')/Discounts","Shift@odata.navigationLinkUrl":"http://localhost:49858/odata/Transactions(guid'f93805cf-cc80-4d2e-9d9e-97df9c21c622')/Shift","Tenders@odata.navigationLinkUrl":"http://localhost:49858/odata/Transactions(guid'f93805cf-cc80-4d2e-9d9e-97df9c21c622')/Tenders","Items@odata.navigationLinkUrl":"http://localhost:49858/odata/Transactions(guid'f93805cf-cc80-4d2e-9d9e-97df9c21c622')/Items","Items":[
{
"odata.type":"TransactionService.Models.Item","odata.id":"http://localhost:49858/odata/Items(guid'511348d7-2886-4b13-ad7e-0eeb2a11bd85')","Transaction@odata.navigationLinkUrl":"http://localhost:49858/odata/Items(guid'511348d7-2886-4b13-ad7e-0eeb2a11bd85')/Transaction","Id@odata.type":"Edm.Guid","Id":"511348d7-2886-4b13-ad7e-0eeb2a11bd85","Transaction_Id@odata.type":"Edm.Guid","Transaction_Id":"f93805cf-cc80-4d2e-9d9e-97df9c21c622","Updated@odata.type":"Edm.DateTime","Updated":"2014-05-06T20:30:30.657","Ordinal@odata.type":"Edm.Int16","Ordinal":1,"Item_Type":"item ","Item_Number":"39 ","Parent_Ordinal":null,"Modifier@odata.type":"Edm.Byte","Modifier":0,"Description":"Cinnamon Coffee Cake","Item_Serial":null,...
等等……
【问题讨论】:
-
你能展示你的模型和他们的关系吗?请记住,在您的模型定义中,您需要在两个模型之间建立适当的关系,以便 Breeze 知道当
Items出现在 JSON 中时,它的类型为Item以正确映射它。 -
我可能无法正确回答您的问题。所以你的意思是:你可以得到正确的响应,但你不能用 Breeze Api 读取扩展的项目?
标签: asp.net angularjs odata breeze asp.net-web-api