通过ID引用ID与多对多关系

时间:2014-04-07 01:43:11

标签: c# entity-framework asp.net-web-api entity-framework-4 automapper

所以我正在使用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>();

我尝试使用Automapper执行此操作,但是它没有使用Object - &gt; ID地图本身。有没有办法在不使用automapper的情况下完成此任务,或者如果没有,如何使用automapper执行此操作?

我期待的行为的一个很好的例子是here -

 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; }
}

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

2 个答案:

答案 0 :(得分:0)

您是否尝试通过Angular等服务处理此类对象?

如果您正在寻找使用某些形式的crud功能以及一些angular和web api,那么本教程是一个很好的起点: http://code.msdn.microsoft.com/CRUD-Grid-Using-AngularJS-84afaf13

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

希望这有帮助!

答案 1 :(得分:0)

我能够通过以下方式解决这个问题,用于映射模型 - &gt; DTO(使用automapper)

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

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