2016-08-24 33 views
1

我創建了一個碼的第一個項目,其中有一個帖子模式和人物模型:保存對象到數據庫中的MVC

public class post 
{ 
    [Key] 
    public int postId { get; set; } 
    public string title { get; set; } 
    public virtual person sender { get; set; } 
} 

public class person 
{ 
    [Key] 
    public int personId { get; set; } 
    public string name { get; set; } 
} 

我想創建一個帖子,其中發送者信息存在,但人被定義爲一個對象。創建新帖子時,如何將現有人員添加到帖子中?其實我只能通過從視圖中獲取值插入一些像int,string等字段,但在這種情況下,它不是一個值,它是一個對象,我怎樣才能插入數據?

例如 代碼:

ViewBag.personlist = new SelectList(db.persons,"personId","name"); 

觀點:

@Html.DropDownListFor(model => model.sender, (SelectList)ViewBag.personlist, "select item") 

在數據庫中沒有發件人項目,但person_postId,因爲這個原因dropdownlistfor發送NULL值,我該怎麼處理呢?

回答

0

如果我知道你想正確的,你需要將PERSONID外鍵添加到您的文章型號:

public class post 
{ 
    [Key] 
    public int postId { get; set; } 
    public int personId { get; set; } 
    public string title { get; set; } 
    public virtual person sender { get; set; } 
} 

目前的情況是你有一個導航屬性,但沒有外鍵與後關聯人。下面一行:

public virtual person sender { get; set; } 

設置你的導航屬性,但它需要一個PERSONID從人的模型是在後模型字段,以便有就是人與崗位之間的聯繫記錄。憑藉設置導航屬性,實體框架將自動將personID標記爲外鍵。

+0

感謝Rob,我在我的模型中添加了一個類似PersonId的字段,它可以工作。但是我的問題是「如果我應該將personId添加到爲什麼我將公共虛擬人發件人添加到模型中?」 我想「個人發件人」會導致類似personId的東西,實際上MVC在db中創建這樣的列,但是通過使用medel我無法到達創建的列。那麼「個人發件人」的功能是什麼? –

+0

個人發送者行是一個導航屬性,它告訴實體框架您將該模型鏈接到另一個模型,然後實體框架將查看您的模型的屬性以找到鏈接到其他模型的關鍵字。所以最初它是尋找一個,但沒有找到任何東西,一旦你有personID它會找到該ID,並可以看到這個ID是在人物模型中。所以它知道使用這個作爲模型的鏈接。對於你來說,'發件人'這一行只是告訴EF應該有一個到另一個模型的鏈接,請找一個鏈接它的密鑰。 – Rob

+0

感謝羅布,我明白了。通常情況下,因爲名稱不匹配實體框架不能匹配導航屬性與PK,爲此我使用[ForeignKey]關鍵字,如下所示,螞蟻它的作品! ----------------- public int selectedPersonId {get;組; } [ForeignKey(「selectedPersonId」)] public virtual sender sender {get;組; } ---------- –

相關問題