使用外键添加对象而无需提供外键

时间:2015-06-28 17:49:33

标签: c# asp.net-mvc entity-framework-6

我有一个asp.net-mvc项目,设置如下:

class Person {
 int PersonId {get; set;}
 List<Activity> Activities {get; set;}
} 
class Activity {
 int ActivityId {get; set;}
 int PersonId {get; set;}
 [ForeignKey("PersonId")]
 Person Person {get; set;}
}

现在,当我为一个人添加一个新活动时,我发送了一个ajax POST,action方法执行以下操作:

public ActionResult AddActivity(int Id) {
 var activity = new Activity();
 activity.PersonId = Id;
 db.Activity.Add(activity);
 db.SaveChanges();  
}

这是添加活动的一种坏方法,因为我手动添加了foregin密钥?

有没有办法做到这一点,而不必提供PersonId外键并让它自动生成(可能获取person对象,更新其活动列表,然后将其标记为EntityState.Modified )?

1 个答案:

答案 0 :(得分:1)

这完全合法。

当您创建实体的新实例时,EF无法预先知道外键需要的值,只有在您将对象保存回来之前指定一个值时,它才会关注它是否有效到数据库。

想象一下,你有多个外键......你还会如何分配它们?!

您可以尝试将EF对象添加到父集合属性,但这样做不会更新关联的外键。这有点意义,但是再次出现了多个外键的问题。