2010-04-26 81 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进行交互。