【问题标题】:Serialization of Entity Framework Models with .NET WCF Rest Service使用 .NET WCF Rest 服务对实体框架模型进行序列化
【发布时间】:2010-04-26 15:18:33
【问题描述】:

我正在尝试构建一个非常简单的 REST 样式界面,用于与我们的合作伙伴进行交流。 API 中的一个示例对象是合作伙伴,我们希望将其序列化如下:

<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 序列化接口的建议机制是什么?

【问题讨论】:

    标签: c# .net entity-framework serialization rest


    【解决方案1】:

    只需 project 到您的 Partner 类型,如您的问题中所定义:

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

    ...然后将其序列化。

    【讨论】:

    • 谢谢——我一直在思考如何最好地做到这一点,而答案一直盯着我看。我会在早上实施这样的事情!
    【解决方案2】:

    您似乎需要一组对象来在 EF 和您的外部 API 之间提供一个层。

    虽然看起来多余,但这并不是前所未有的做法。当您需要在视图和底层数据存储之间有一个抽象层时,它一直在 MVC 模式中完成。

    额外的抽象层使您能够定义所需的确切接口,并具有以您想要的方式与 EF 交互的灵活性和控制力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 2017-06-25
      • 1970-01-01
      相关资源
      最近更新 更多