所以我正在使用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 字符串发布注册对象。但是,如何将此行为转换为课程集合或多对多关系?
您是否尝试过通过像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 映射到控制器中的对象。