2010-04-26 102 views
1

我正在嘗試組建一個非常簡單的REST風格的界面,用於與我們的合作伙伴進行通信。在API中的一個例子對象是合作伙伴,我們希望已經系列化這樣其中:實體框架模型與.NET WCF Rest服務的序列化

<partner> 
    <id>ID</id> 
    <name>NAME</name> 
</partner> 

這是相當簡單,以實現使用.NET 4.0 WCF REST模板,如果我們只是聲明瞭一個夥伴類作爲:

public class Partner 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
} 

但是,當我使用實體框架來定義和存儲合作伙伴的對象,所得到的序列化看起來是這樣的:

<Partner p1:Id="NCNameString" p1:Ref="NCNameString" xmlns:p1="http://schemas.microsoft.com/2003/10/Serialization/" xmlns="http://schemas.datacontract.org/2004/07/TheTradeDesk.AdPlatform.Provisioning"> 
    <EntityKey p1:Id="NCNameString" p1:Ref="NCNameString" xmlns="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses"> 
    <EntityContainerName xmlns="http://schemas.datacontract.org/2004/07/System.Data">String content</EntityContainerName> 
    <EntityKeyValues xmlns="http://schemas.datacontract.org/2004/07/System.Data"> 
... 

該XML我用作外部API顯然是不可接受的。建議使用EF作爲數據存儲的機制,但維護一個簡單的XML序列化接口?

回答

1

只是project到您的Partner類型,在你的問題中定義:

var q = from p in Context.Partners 
     select new MySerializationTypes.Partner 
     { 
      Id = p.Id, 
      Name = p.Name 
     }; 

...然後序列化。

+0

謝謝 - 我一直在想自己在圈子裏如何最好地做到這一點,答案是在整個時間裏面對我。我會在早上執行這樣的事情! – 2010-04-29 03:58:11

0

看來您需要一組對象來提供EF和您的外部API之間的圖層。

雖然看起來多餘,但這並不是一個前所未有的做法。當您需要在視圖和底層數據存儲之間進行抽象時,它始終以MVC模式完成。

一個額外的抽象層爲您提供了定義所需的確切接口的能力,靈活性和控制能夠以您想要的方式與EF進行交互。