通过WebAPI公开EF6模型子集
本文关键字:模型 子集 EF6 公开 WebAPI 通过 | 更新日期: 2023-09-27 18:10:01
例如,我有一个这样的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<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 }
}
现在我想创建一个WebAPI,允许:
- 创建新用户
- 更新用户名
- 修改用户图书列表
然而,这里有一些技巧,不让我马上使用教程:
- 有些字段是不相关的或机密的,不能通过WebAPI暴露,例如:
User.Id
,User.Properties
和嵌套的User.Books[x].ContentPath
。 - 只有一小部分字段是可编辑的(在示例中是
User.Name
)。 - 只有一小部分操作(CRUD)是可用的,因此它不是一个REST服务。
首先想到的是为每个公开的模型创建额外的类。然而,维护它们和编写将数据从数据库模型转换为那些webapi友好类的代码太麻烦了。有没有更简单、更自动化的方法?
理想的方法是需要编写尽可能少的冗余代码。也许有一组属性来标记字段?
您认为应该创建更多的类是正确的。对于每个公开的操作(更改名称、创建用户等),您应该创建一个只公开您需要的字段的ViewModel。
public class ChangeUserNameViewModel
{
public int UserId { get; set; }
public string NewName { get; set; }
}
很容易将视图模型转换为域模型,然后使用AutoMapper之类的东西再转换回来。