2011-05-28 103 views
0

結合我有這樣模型多對多的關係

License 
------------ 
Id 
LicenseName 


DriversLicense 
------------- 
Id 
LicenseId 
DriverId 


Drivers 
----------- 
Id 
FirstName 
LastName 

表有6個enteries在授權表,現在我想創建一個單選按鈕是/否爲一個particual驅動程序的所有許可選項。桌子之間最好的關係是什麼? (一對一,一對多,多對多)以及如何使用模型綁定顯示單選按鈕。

+1

如果您對關係數據庫有任何最少的理解,您應該知道這些表之間應該是什麼關係。如果您沒有這麼簡單的理解,請停止當前的任務,然後閱讀關係數據庫的一些啓動任務,否則您將無法完成項目。 – 2011-05-28 10:06:18

+0

是的,我有這種理解。但不知道如何在特定用戶的單選按鈕中顯示 – coure2011 2011-05-28 10:14:03

+0

您必須加載來自許可證的所有記錄 - 定義您的單選按鈕。然後,您必須使用其DriverLicences/Licenses加載用戶並設置單選按鈕以更正值。 – 2011-05-28 10:16:13

回答

0

正如我在評論中發佈的,你應該立即看到這一點。如果你不僅僅停止你的工作並做一些學習。

這是驅動程序和許可證之間的多對多關係,必須使用關係數據庫(DriversLicence)中的關聯表建模。概念抽象中的多對多在驅動程序和驅動程序許可證之間以及許可證和驅動程序許可證之間分爲兩個一對多。

EFv4能夠直接使用多對多而不是您的情況,因爲您的聯結表不僅包含外鍵列(LicenceId和DriverId),而且還包含附加列(Id)。 EF只能在您將模型設置爲

DriversLicence 
---------------- 
LicenceId 
DriverId 

這兩個列組成複雜主鍵時纔可以隱藏結點表。如果您離開表中的Id列,則您的DriversLicence將作爲其他實體公開。

+0

仍然沒有得到如何顯示驅動程序的單選按鈕值? – coure2011 2011-05-28 11:28:47

+0

如何從許可證表中顯示單選按鈕? @ Html.RadioButton(這裏有什麼)? – coure2011 2011-05-28 11:36:36

2

Ladislav對實體關係是正確的。如果你想讓它工作,你將不得不從關聯表中刪除Id字段。另外,在您的數據模型中,每個實體都需要具有引用其他集合的導航屬性:

public partial class Driver 
{ 
    public int Id { get; set; } 

    // other properties 

    [UIHint("Licenses")] 
    public virtual ICollection<License> Licenses { get; set; } 
} 

與Driver類相同。但是,我認爲嘗試使用放射性按鈕不會很好。在我正在進行的一個項目中,我們有幾種這種類型的情況,我們使用一個列表框。

在您希望用戶選擇的集合上使用UIHint,並創建一個局部視圖來保存該類型集合的列表框。所以在Licenses.cshtml - 必須〜/查看/共享/ EditorTemplates創建/你就會有這樣的事情:

@inherits System.Web.Mvc.WebViewPage<IList<License>> 
@Html.ListBoxFor(x => x, 
       new MultiSelectList((List<License>)ViewBag.LicenseAll, 
       "Id", 
       "LicenseName", 
       Model)) 

在你的控制器,設置ViewBag.LicenseAll所有可能的許可選項。在驅動程序編輯視圖,您只要致電:

@Html.EditorFor(m=>m.Licenses) 

的UIHint你的模型設定會找到正確的局部視圖,並顯示所有許可選項選擇所有的當前駕駛員設定的。

我知道這個答案並不直接回答你的問題(使用單選按鈕),但考慮到你的情況,這是我會推薦的。