我想使用Breeze處理OData服務。我花了幾個小時試圖讓這個運行,但我沒有找到解決方案,所以我真的希望有人能幫助!? (我剛開始使用微風 - 所以我很抱歉,如果我在這裏缺少「明顯」的東西。)odata breeze:ComplexType的集合: - 「TypeError:無法調用方法'_createInstanceCore ...」
我想要做的是使用子對象集合(ComplexType)。即我想我的實體類有一個集合屬性是這樣的:
public List<Address> addresses { get; set; }
(地址是沒有實體,是在DB集合自身的堅持,但一個簡單的類的一些屬性(的ComplexType))
服務器是一個MVC4 WebAPI ODATA服務,它基於持久化在MongoDB數據庫中的實體框架代碼優先POCO類。
在瀏覽器中我得到以下錯誤,當微風庫嘗試從服務器讀取的ODATA元數據(它甚至不查詢例子集合,它有前一個錯誤):
[Q] Unhandled rejection reasons (should be empty):
["TypeError: Cannot call method '_createInstanceCore…://localhost:56936/scripts/breeze.debug.js:236:26"]
有沒有辦法讓這個運行?
謝謝!
我的客戶端代碼如下所示:
var serverAddress = "http://localhost:56936/odata";
breeze.config.initializeAdapterInstances({ dataService: "OData" });
var manager = new breeze.EntityManager(serverAddress);
var query = breeze.EntityQuery.from("BreezeExample");
manager.executeQuery(query).then(querysucceeded).fail(queryfailed);
function querysucceeded(data) {
console.log("querysucceeded");
data.results.forEach(function (item) {
//...
});
}
function queryfailed(e) {
console.log("!!! queryfailed");
console.log(e);
}
的模型如下:
[BsonIgnoreExtraElements]
public class ExampleClass : MongoEntity
{
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string loginEmail { get; set; }
public bool? active { get; set; }
public ICollection<Address> addresses { get; set; } //THIS DOES NOT WORK CLIENT SIDE - WHY?
}
public class Address
{
public string place { get; set; }
public string street { get; set; }
public string houseNumber { get; set; }
public string postalCode { get; set; }
}
如果我查詢使用瀏覽器(http://localhost:56936/odata/$metadata
)的ODATA元,我得到這樣的結果:
<edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" Version="1.0">
<edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0">
<Schema xmlns="http://schemas.microsoft.com/ado/2009/11/edm" Namespace="MvcWebRole1.Models.MongoDB.Entities">
<EntityType Name="ExampleClass">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Name="loginEmail" Type="Edm.String" />
<Property Name="active" Type="Edm.Boolean" />
<Property Name="addresses" Type="Collection(MvcWebRole1.Models.MongoDB.Entities.Address)" Nullable="false" />
<Property Name="Id" Type="Edm.String" Nullable="false" />
</EntityType>
<ComplexType Name="Address">
<Property Name="place" Type="Edm.String" />
<Property Name="street" Type="Edm.String" />
<Property Name="houseNumber" Type="Edm.String" />
<Property Name="postalCode" Type="Edm.String" />
</ComplexType>
<EntityContainer Name="Container" m:IsDefaultEntityContainer="true">
<EntitySet Name="BreezeExample" EntityType="MvcWebRole1.Models.MongoDB.Entities.ExampleClass" />
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
如果我查詢BreezeExample集合(http://localhost:56936/odata/BreezeExample
)我得到這樣的:
{
odata.metadata: "http://localhost:56936/odata/$metadata#BreezeExample",
value: [
{
loginEmail: "loginEmail1",
active: true,
addresses: [
{
place: "place",
street: "street",
houseNumber: "77",
postalCode: "123"
},
{
place: "place2",
street: "street",
houseNumber: "77",
postalCode: "123"
}
],
Id: "1"
},
{
loginEmail: "loginEmail2",
active: true,
addresses: [
{
place: "place",
street: "street",
houseNumber: "77",
postalCode: "123"
},
{
place: "place",
street: "street",
houseNumber: "77",
postalCode: "123"
}
],
Id: "2"
}
]
}
你可以看一下這個網頁,看看如何可以從腳本導入元數據http://www.breezejs.com/documentation/load - 元數據腳本 – ppoliani