C# 体系结构:实体框架Web Api
我正在使用实体框架创建一个web api程序。因此,作为基础,我有一个sql server数据库,通过实体框架与我的web api程序连接。使用实体框架的附加组件,我根据数据库表生成了类。但是,我不想在我的Web服务中使用这些类,因为我不需要显示实体框架生成的一些属性,并且不需要处理所有代理问题。这些属性尤其是由于外键而生成的。如下所示,对于这个生成的类,我不需要显示“Societe”对象和“Usiliateur”对象: 我需要一些建议,以避免在我的Web服务中显示这些实体。 我在考虑3种可能性: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服务所需的完美对象的函数。我指的是将“FontionNalitePeruser”对象转换为“FontionNalitePerUserCustom”对象的函数
一般来说,提前感谢您,为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; }
}