所以我正在使用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注册对象。但是,如何将此行为转换为课程集合或多对多关系?
答案 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映射到控制器中的对象。