關係

2011-11-08 52 views
0

我的項目有兩個目標:用戶和會議關係

每次會議都有一個用戶是在會議並是簡單的一個多用戶的「頭」。

我的模型是這些:

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; } 
} 

我爲會議創造模型的控制器。現在,每次我添加另一個會議,並在用戶字段中放入一個現有用戶ID時,該用戶不會被插入,並且會創建新用戶。

怎麼了?

編輯 的創建形式控制器

[HttpPost] 
    public ActionResult Create(Tremp tremp) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Tremps.Add(tremp); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(tremp); 
    } 

我只需輸入用戶

+0

你能在你創建新會議的位置顯示你的控制器後操作嗎? – Slauma

+1

你如何分配用戶?您分配給User屬性的任何用戶都必須從Context中檢索,而不是從new()實例中檢索。 IOW,您必須首先加載用戶,將其分配給會議,然後保存會議。 –

回答

0

我在EF代碼沒有專家第一的ID,但你的代碼示例也引起一些對我來說,似曾相識。我認爲問題在於您需要配置「頭」用戶和會議之間的關係,例如

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; } 
} 
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); 
}