繁体   English   中英

我是否需要将POCO类与Entity Framework 6一起使用

[英]Do I need to use POCO Classes with Entity Framework 6

以下类是使用实体框架模型从模板自动生成的。

namespace Entities
{
    using System;
    using System.Collections.Generic;

    public partial class Country
    {
        public Country()
        {
           this.Regions = new HashSet<Region>();
        }

        public long CountryId { get; set; }
        public string Code { get; set; }
        public string Name { get; set; }
        public bool Preferred { get; set; }
        public System.DateTime LastChanged { get; set; }

        public virtual ICollection<Region> Regions { get; set; }
   }
}

我有一个Wcf Web服务,只返回POX(Xml)和Json。 我想要返回我自己的序列化对象,如;

public class MyResponseObject
{
    public int RequestId {get;set;}
    public List<Country> CountryList {get;set;}
    //other properties
}

但我不想返回Regions ICollection。

然后可以使用类似的东西返回对象

Newtonsoft.Json.JsonConvert.SerializeObject()

我最好以这种方式返回我自己的序列化POCO对象吗?

在这些项目中,您的类可以分为两种类型:

  1. 数据库实体对象(实体框架使用的对象)
  2. 数据协定对象(WCF或您的Web服务使用的对象)

虽然可以为两者使用相同的对象,但不建议这样做,因为数据库实体对象是与外部接口(您的Web服务)分开的内部实现关注点。 您可以在数据库表中添加或删除列,而不希望更改API合约。 但通常你会想要隐藏服务消费者的信息,比如数据库表Users ( UserId, Password ) ,你绝对不希望Password属性消失!

另一个原因是你以后可能想要在你的webservice合同类中添加属性(例如控制输出格式或输入验证),将这些属性添加到实体对象是很痛苦的,如果不是在某些情况下也是不可能的。

我知道这听起来像是一种不必要的重复工作,因为大多数课程都有相同的成员,但从长远的角度来看它是有道理的。

幸运的是,像AutoMapper这样的工具可以加快将数据从数据库实体对象复制到数据协定对象的过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM