【发布时间】:2015-05-19 21:48:28
【问题描述】:
应该很简单,不知道为什么我在网上找不到解决方案。也许它特定于 EF6 或 ASP Identity,或者我输入了错误的搜索关键字。
为了简单起见,假设我有两个模型类 Teacher 和 Kid;一个孩子只能分配给一位老师,但一位老师可以有多个孩子。它是多用户环境,因此每个孩子和每个老师都属于特定用户。因为我首先使用代码,所以我的数据库是由这些模型类构建的:
public class Kid
{
[Required]
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public virtual Teacher { get; set; }
[Required]
public virtual ApplicationUser User { get; set; }
}
public class Teacher
{
[Required]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Kid> Kids { get; set; }
[Required]
public virtual ApplicationUser User { get; set; }
}
我有一个添加新孩子的观点: 孩子名字的文本框; 带有教师列表的下拉列表
所以,我正在创建一个数据传输对象,专门用于该视图:
public class AddNewKidViewDTO
{
public string Name {get; set;}
public IEnumerable<SelectListItem> Teachers { get; set; }
public int SelectedTeacherId { get; set; }
}
表单被提交,我得到了填充的 AddNewKidViewDTO 模型。
现在,我需要在数据库中插入一个新 Kid。因此,我将 AddNewKidViewDTO 属性一一映射到我的 Kid 模型属性:
public void InsertNewKid {AddNewKidViewDTO addNewKidViewDTO}
{
Kid kid = new Kid();
kid.Name = AddNewKidViewDTO.Name;
// here comes the question. How do I set Kid.Teacher and Kid.User?
}
更新 1
我不是在问如何获得选定的教师 ID。我需要知道如何将导航属性分配给模型对象(使用该 ID)。
更新 2:
如果我得到这样的当前用户对象:
ApplicationUser user = usermanager.FindById(User.Identity.GetUserId<int>());
然后将其附加到 Kid:
Kid.User = user;
在 Kid 插入时,它会引发异常:
元数据集合中不存在身份为“mynamespace.DAL.Kid_User”的成员。
任何帮助表示赞赏。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-5 ef-code-first entity-framework-6 asp.net-identity-2