通过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友好类的代码太麻烦了。有没有更简单、更自动化的方法?

理想的方法是需要编写尽可能少的冗余代码。也许有一组属性来标记字段?

通过WebAPI公开EF6模型子集

您认为应该创建更多的类是正确的。对于每个公开的操作(更改名称、创建用户等),您应该创建一个只公开您需要的字段的ViewModel。

public class ChangeUserNameViewModel
{
    public int UserId { get; set; }
    public string NewName { get; set; }
}

很容易将视图模型转换为域模型,然后使用AutoMapper之类的东西再转换回来。