C# 通过WebAPI公开EF6模型子集
例如,我有一个像这样的EF6模型:C# 通过WebAPI公开EF6模型子集,c#,asp.net,asp.net-mvc,entity-framework,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Web Api,例如,我有一个像这样的EF6模型: class User { public int Id { get; set; } public string Email { get; set; } public string Name { get; set; } public virtual ICollection<ProfileProperty> Properties { get; set; } public virtual ICollection&l
class User
{
public int Id { get; set; }
public string Email { get; set; }
public string Name { get; set; }
public virtual ICollection<ProfileProperty> Properties { get; set; }
public virtual ICollection<Book> Books { get; set; }
}
class Book
{
public int Id { get; set }
public int Name { get; set }
public DateTime CreationDate { get; set }
public long Size { get; set }
public string ContentPath { get; set }
}
类用户
{
公共int Id{get;set;}
公共字符串电子邮件{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection属性{get;set;}
公共虚拟ICollection图书{get;set;}
}
课堂用书
{
公共int Id{get;set}
公共int名称{get;set}
公共日期时间创建日期{get;set}
公共长大小{get;set}
公共字符串ContentPath{get;set}
}
现在我想创建一个WebAPI,它允许:
- 创建新用户
- 更新用户名
- 修改用户书籍的列表
- 有些字段是无关的或机密的,不能通过WebAPI公开,例如:
、User.Id
、嵌套的User.Properties
User.Books[x].ContentPath
- 只有一小部分字段是可编辑的(在示例中,
)User.Name
- 只有一小部分操作(CRUD)可用,因此它不是REST服务
理想的方法是需要编写尽可能少的冗余代码。也许有一组属性可以标记字段?您认为应该创建更多的类是正确的。对于每个公开的操作(更改名称、创建用户等),您应该创建一个仅公开所需字段的ViewModel
public class ChangeUserNameViewModel
{
public int UserId { get; set; }
public string NewName { get; set; }
}
您可以轻松地将视图模型转换为域模型,然后再使用类似的方法进行转换。谢谢您的回答。AutoMapper看起来真不错。从它使用反射的假设来看,它不是很慢吗?我从来没有遇到过速度问题。如果你担心的话,你可以使用一些普通的工厂来进行转换。