C# 体系结构:实体框架Web Api

C# 体系结构:实体框架Web Api,c#,web-services,entity-framework,asp.net-web-api,C#,Web Services,Entity Framework,Asp.net Web Api,我正在使用实体框架创建一个web api程序。因此,作为基础,我有一个sql server数据库,通过实体框架与我的web api程序连接。使用实体框架的附加组件,我根据数据库表生成了类。但是,我不想在我的Web服务中使用这些类,因为我不需要显示实体框架生成的一些属性,并且不需要处理所有代理问题。这些属性尤其是由于外键而生成的。如下所示,对于这个生成的类,我不需要显示“Societe”对象和“Usiliateur”对象: 我需要一些建议,以避免在我的Web服务中显示这些实体。 我在考虑3种可能性

我正在使用实体框架创建一个web api程序。因此,作为基础,我有一个sql server数据库,通过实体框架与我的web api程序连接。使用实体框架的附加组件,我根据数据库表生成了类。但是,我不想在我的Web服务中使用这些类,因为我不需要显示实体框架生成的一些属性,并且不需要处理所有代理问题。这些属性尤其是由于外键而生成的。如下所示,对于这个生成的类,我不需要显示“Societe”对象和“Usiliateur”对象:

我需要一些建议,以避免在我的Web服务中显示这些实体。 我在考虑3种可能性:

  • 由于它是一个分部类,我可能会创建另一个具有相同名称的分部类,在其中放置所需的属性并重写构造函数
  • 我可能会从该类继承一个自定义类来重写构造函数,以便获得所需的结构化类
  • 我可能会创建管理类,其中包含创建Web服务所需的完美对象的函数。我指的是将“FontionNalitePeruser”对象转换为“FontionNalitePerUserCustom”对象的函数
以下是我找到的3种解决方案。为了获得最好的性能,我想知道是否有人可以给我一些建议,或者提出一些其他的解决方案。
一般来说,提前感谢您,为web服务API公开不同于持久性的对象类型通常是有用的。这正是您声明的原因:因为您不需要向世界其他地方(客户机)公开所有持久性内容

通常,您会将要公开的信息从持久性模型(EF实体等)映射到视图模型对象(或DTO)

所以,我认为你的选择3是正确的

我可以使用创建 我的Web服务需要的完美对象。我是说 将“FontionNalitePeruser”对象转换为 “FontionNalitePerUserCustom”对象


有几种工具可以帮助转换或映射对象。一个是按照惯例绘制地图。这可以节省大量映射代码。

如果您使用Newtonsoft Json.NET,我认为这是MVC5中的默认设置,那么您可以通过属性告诉Newtonsoft要序列化什么和忽略什么

public class Car
{
  // included in JSON
  public string Model { get; set; }
  public DateTime Year { get; set; }
  public List<string> Features { get; set; }

  // ignored
  [JsonIgnore]
  public DateTime LastModified { get; set; }
}

这一信息来源于。

我的第一直觉是;不要将BE视为DTO,反之亦然。(即使用选项3)好的,谢谢你的回答。过一会儿我可能会把它标记为“接受答案”。如果出现更好的解决方案,只需等待新的解决方案!
public class Car
{
  // included in JSON
  public string Model { get; set; }
  public DateTime Year { get; set; }
  public List<string> Features { get; set; }

  // ignored
  [JsonIgnore]
  public DateTime LastModified { get; set; }
}
[DataContract]
public class Computer
{
  // included in JSON
  [DataMember]
  public string Name { get; set; }
  [DataMember]
  public decimal SalePrice { get; set; }

  // ignored
  public string Manufacture { get; set; }
  public int StockCount { get; set; }
  public decimal WholeSalePrice { get; set; }
  public DateTime NextShipmentDate { get; set; }
}