使用 EF 按 ID 引用多对多关系

本文关键字:关系 引用 ID EF 使用 | 更新日期: 2023-09-27 17:56:56

所以我正在使用EF和WebAPI构建REST服务。我有两个这样的课程

public class App 
{
  [Key]
  public int ID {get;set;}
  public virtual ICollection<User> Users {get;set;}
}
 public class User
{
  [Key]
  public int ID {get;set;}
  public virtual ICollection<App> Apps {get;set;}
}

我可以看到 EF 正确创建了表,一切都是桃色的。问题是我无法通过 REST 发布组合对象,我需要按 ID 引用发布并在服务器级别编写它们。

 public class UserViewModel
{
  [Key]
  public int ID {get;set;}
  public virtual ICollection<Int> Apps {get;set;}
}

//Automapper config
Mapper.CreateMap<User, UserViewModel>();

我尝试使用自动映射器执行此操作,但是它没有自行执行对象> ID映射。有没有办法在不使用自动映射器的情况下完成此操作,或者如果没有,如何使用自动映射器执行此操作?

我期待的行为的一个很好的例子在这里找到-

 public class Enrollment
{
    public int EnrollmentID { get; set; }
    public int CourseID { get; set; }
    public int StudentID { get; set; }
    public Grade? Grade { get; set; }
    public virtual Course Course { get; set; }
    public virtual Student Student { get; set; }
}

您可以看到注册具有一个名为 CourseID 的属性。根据文章"CourseID 属性是外键,相应的导航属性是 Course"。因此,这可以很好地映射到 WebAPI REST 服务,您可以忽略课程属性并将课程 ID 映射到视图模型并使用 CourseID 字符串发布注册对象。但是,如何将此行为转换为课程集合或多对多关系?

使用 EF 按 ID 引用多对多关系

您是否尝试过通过像Angular这样的服务来处理这种对象创建?

如果您希望将一些表单 crud 功能与一些角度和 Web API 一起使用,本教程是一个很好的起点:http://code.msdn.microsoft.com/CRUD-Grid-Using-AngularJS-84afaf13

此外,不要使用 EF。使用Dapper .NET!https://code.google.com/p/dapper-dot-net/

希望这有帮助!

我能够通过以下方式解决此问题,以映射模型 -> DTO(使用自动映射器)

        Mapper.CreateMap<User, UserViewModel>()
            .ForMember(u => u.App, opt => opt.ResolveUsing(u => u.Apps.Select(app=> app.ID)));

并在从客户端传入的途中手动将 ID 映射到控制器中的对象。