gpt4 book ai didi

c# - 我需要将 POCO 类与 Entity Framework 6 一起使用吗

转载 作者:太空狗 更新时间:2023-10-30 00:31:49 26 4
gpt4 key购买 nike

以下类是使用 Entity Framework 模型从模板自动生成的。

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; }
}
}

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

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

但我不想返回 Regions ICollection。

然后可以使用类似

的方式返回对象

Newtonsoft.Json.JsonConvert.SerializeObject()

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

最佳答案

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

  1. 数据库实体对象( Entity Framework 使用的对象)
  2. 数据契约对象(WCF 或您的网络服务与之配合使用)

虽然可以对两者使用相同的对象,但不建议这样做,因为数据库实体对象是与外部接口(interface)(您的网络服务)分离的内部实现问题。您可能会在数据库表中添加或删除列,并且不希望更改 API 契约(Contract)。但是通常你会想对服务消费者隐藏信息,比如数据库表 Users ( UserId, Password ),你肯定不希望 Password 属性消失!

另一个不这样做的原因是您稍后可能想要将属性添加到您的网络服务契约(Contract)类(例如,以控制输出格式或输入验证),将这些添加到实体对象是很痛苦的,即使在某些情况下不是不可能的。

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

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

关于c# - 我需要将 POCO 类与 Entity Framework 6 一起使用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22193551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com