2013-03-19 38 views
2

我必須實施一種架構,不幸的是,我們正在有效地將SharePoint 2013用作我們的主數據庫。 (不是我的選擇,如果你沒有選擇的話)。我在服務器上有一個Asp.Net MVC Facade應用程序,處理來自SP和一些其他數據源的數據組合,然後以JavaScript作爲客戶端。另外一個問題是客戶端需要能夠離線工作,所以我需要使用IndexedDB來存儲離線訪問的數據。如何在不使用EF的情況下將上下文元數據添加到我的實體? [已解決]

這似乎是breeze.js的完美用例。我的基本體系結構是在MVC外觀中定義一個強類型模型,它將使用SP客戶端對象模型將從SP獲得的非類型化數據(在表單對象[「property」]中包裝)。 Breeze將處理此模型和客戶端之間的同步,並且我將使用導出/導入功能根據需要在IndexedDB中緩存數據。

到目前爲止這麼好。但是...微風網站上的SOA示例仍在開發中(對我來說,這基本上是一個SOA架構,每個SP列表都需要一個服務來組成)。我能找到的最接近的東西是NoDB示例,但是這會在客戶端上硬編碼元數據。我想在MVC模型中建立關係和驗證,然後將它們傳遞給客戶端,因此驗證可以在兩個地方運行相同的聲明。

這可能嗎?如果是這樣 - 如何?如果沒有人有解決方法或更好的主意?我已經放棄了在兩個不同的地方定義模型(正面和隱含的SP列表結構)。我非常希望避免在客戶端第三次實施它。我很樂意讓breeze.js直接與SP REST端點對話,但我從https://stackoverflow.com/a/15364503/1014822得知的理解是實現有缺陷,並且沒有公開所需的元數據。

分辨率:基於下面的接受的答案,我來到了以下解決方案:

1)生成從SP ListData.svc端點的服務引用 - 從而創造一個EDMX和代理類。

2)擴展ContextProvider在我的倉庫,並覆蓋BuildJsonMetadata像這樣:

protected override string BuildJsonMetadata() 
{ 
    XDocument xDoc = XDocument.Load(HttpContext.Current.Server.MapPath("PATH_TO_EDMX")); 
    String xString = xDoc.ToString(); 
    xString = xString.Replace("DATA_SERVICE_NAMESPACE", "APP_NAMESPACE"); 
    xDoc = XDocument.Parse(xString); 
    var jsonText = CsdlToJson(xDoc); 
    return jsonText; 
} 

3)修改breeze.js非常輕微,編輯行12383:

var schema = metadata.schema || metadata["edmx:Edmx"]["edmx:DataServices"].schema; 

(我大概可以也有通過爲我的xDoc選擇後代而不是根節點來解決此問題)

4) - 可選地使用@ Christoff的非常有用的T4TS.tt模板腳本從服務代理類生成一個d.ts,所以我可以對微風載入的數據進行類型安全。

到目前爲止這個設置非常好 - 我可以使用元數據執行基本的CRUD,由SP作爲數據源支持。

回答

3

v 1.2.7我們已經記錄了Breeze的元數據模式,並且從webservice返回的堅持這個模式的json對象現在將被Breeze認可。

---以前的帖子下面

我們是在介紹如何在未來一週左右暴露任意服務器端的元數據的過程中,遵循此後很快就被如何消費任意Web服務的一些例子。還有一些小的代碼更改。

目前,在這些文檔完成之前,最好的解決方法是在客戶端上創建元數據,並使用jsonResultsAdapter將服務調用的結果形成「實體」。您在客戶端上創建的元數據將與您最終在服務器上創建併發送給客戶端的元數據完全相同。

希望這會有所幫助。

+0

周杰倫 - 謝謝你的迴應。我可以花上一個星期左右的時間,直到文檔準備就緒,但只是失敗的機會:我從服務引用中獲得了'edmx' - 是否有任何方法可以使用DbContext的insead? – JcFx 2013-03-19 17:37:30

+2

如果您查看EFContextProvider類中的源代碼,則可以使用GetCsdlFromDbContext方法中的代碼從edmx中提取碎片以構建json元數據結構。希望這可以幫助。 – 2013-03-19 20:14:46

+0

我來看看。非常感謝。 – JcFx 2013-03-19 20:17:03

相關問題