2015-06-28 40 views
0

我有以下設置一個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和操作方法執行以下操作:

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

這是添加一個活動,因爲我手動添加foregin關鍵的好方法?

有沒有辦法做到這一點,而不必提供PersonId外鍵,並讓它自動生成(可能獲取人物,更新其活動列表,然後將其標記爲EntityState.Modified)?

回答

1

這是完全合法的。

當您創建一個實體的新實例時,EF無法預先知道外鍵需要的值,它只關心它在您將對象保存回數據庫之前指定一個值時是否有效。

想象一下你有多個外鍵......你會怎樣指定它們呢?

您可以嘗試將EF對象添加到父集合屬性,但這樣做不會更新關聯的外鍵。這樣會有道理,但是再一次,有多個外鍵的問題。