我的项目有两个对象:用户和会议
每次会议都有一个用户是会议的“头”,而有许多用户都很简单。
我的模特是这些:
public class Meeting
{
public int MeetingId { get; set; }
public string Title { get; set; }
public virtual User User { get; set; }
public Location From { get; set; }
public Location To { get; set; }
public virtual ICollection<User> Users { get; set; }
}
public class Location
{
public float Lat { get; set; }
public float Long { get; set; }
}
public class User
{
public int UserId { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
我为会议模型创建了一个控制器。现在每次我添加另一个会议a并在用户字段中我放置一个现有的用户ID,不插入该用户并创建新用户。
怎么了?
修改 创建控制器
[HttpPost]
public ActionResult Create(Tremp tremp)
{
if (ModelState.IsValid)
{
db.Tremps.Add(tremp);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(tremp);
}
在表单中我只输入用户的ID
答案 0 :(得分:0)
我首先不是EF代码的专家,但你的代码示例确实给我带来了一些似曾相识的感觉。我认为问题是你需要配置“头”用户和会议之间的关系,例如
public class Meeting
{
public int MeetingId { get; set; }
public string Title { get; set; }
[ForeignKey("UserId")]
public virtual User User { get; set; }
[Column(name: "UserId")]
public int HeaderUserId { get; set; }
public Location From { get; set; }
public Location To { get; set; }
public virtual ICollection<User> Users { get; set; }
}
答案 1 :(得分:0)
如果您的tremp
实体具有对现有用户(tremp.User
)的引用,则必须在添加tremp
之前将此用户附加到上下文。这告诉EF该用户存在于数据库中并避免插入新用户:
[HttpPost]
public ActionResult Create(Tremp tremp)
{
if (ModelState.IsValid)
{
db.Users.Attach(tremp.User);
db.Tremps.Add(tremp);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(tremp);
}