[英]Architecture: entity framework Web Api
我正在使用实体框架创建一个web api程序。 所以作为基础,我有一个sql server数据库,我用实体框架连接到我的web api程序。 使用实体框架的附加组件,我根据我的数据库表生成了类。 但是我不想将这些类用于我的webservices,因为我不需要显示实体框架生成的一些属性,并且对于所有代理问题都有点棘手。 由于外键,特别生成这些属性。 如下所示,对于这个生成的类,我不需要显示“Societe”对象和“Utilisateur”对象:
public partial class FonctionnalitePerUser
{
public int FonctionUserLngId { get; set; }
public int FonctionUserLngUserId { get; set; }
public int FonctionUserLngSocieteId { get; set; }
public virtual Societe Societe { get; set; }
public virtual Utilisateur Utilisateur { get; set; }
}
我需要一些建议,以避免在我的Web服务中显示该实体。 我在考虑3种可能性:
这些是我发现的3种解决方案。 为了获得最佳性能,我想知道是否有人可以给我一些建议或者提出其他一些解决方案。 提前致谢
如果您使用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; }
}
或者,如果您想要忽略的属性多于想要序列化的属性,则可以执行以下操作:
[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; }
}
这些信息来自这里 。
通常,为Web服务API公开不同类型的对象通常比持久化更有用。 这正是您声明的原因:因为您不需要将所有持久性内容暴露给世界其他地方(客户端)。
通常,您可以将要从持久性模型(EF实体等)公开的信息映射到视图模型对象(或DTO)。
所以,我想说你的选择3是在正确的轨道上。
我可能会创建具有函数的管理类,这些函数可以创建我的Web服务所需的完美对象。 我的意思是将“FonctionnalitePerUser”对象转换为“FonctionnalitePerUserCustom”对象的函数
有几种工具可以帮助转换或映射对象。 一个是AutoMapper ,它将按照惯例进行映射。 这可以节省大量的映射代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.