2011-12-12 77 views
0

如何用一對多關係的EF獲取數據。
即,如果我有一個表名Person(personID作爲主鍵)和另一個表名streetLivedIn(personID作爲外鍵)。 現在我強迫我的控制器方法傳遞類型的人的目標如何用EF一對多關係獲取數據

var persons=db.persons(); 
return View(persons); 

現在我想與街道一起顯示人的詳細信息(即什麼存放在streetLivedInTable),他/她住在。
假設我有一個人的EntitySet

public class Persons 
{ 
    public string Name{get;set;} 
    //NAVIGATIONL PROP. 
    public virtual ICollection<streetLivedIn>{get;set} 
} 

回答

0

假設導航屬性名稱是Streets

public class Persons 
{ 
    public string Name { get; set; } 
    //NAVIGATIONL PROP. 
    public virtual ICollection<streetLivedIn> Streets { get; set } 
} 

然後你可以使用Include方法來加載這個屬性。

var persons = db.persons.Include("Streets"); 
return View(persons); 

您可以用各種方式顯示它。例如

@foreach (var person in Model) 
{ 
    <div>@person.Name</div> 

     @foreach (var street in person.Streets) 
     { 
       <div>@street.Name</div> 
     } 
} 

或者你可以使用WebGridMvcContrib Grid

+0

那麼如何來顯示它在我的觀點(比如有多個街道單次入境)html.displayfor(model.name)和html.displayfor(model.streets) – RollerCosta

+0

即一個人可以擁有多個街道再如何將這兩個表中的數據顯示在一個ViewTable中 – RollerCosta

+0

我已經嘗試過你的代碼,如果有多對一的關係,並且它可以正常工作,但是在一對多關係中它不起作用 – RollerCosta

0

假設你不想直接暴露實體框架數據模型視圖,而是做一個轉換業務對象創建,我只需用雙foreach循環迭代EF數據模型。實體框架使用包含爲您創建一對多引用 - 爲什麼不利用這一點。

爲了清楚起見,我在EF生成的類別前添加了「Ef」。

var personList = new List<Person>(); 
foreach (var efPerson in EfPersons) 
{ 
    var person = new Person 
    { 
     Name = efPerson.Name, 
     StreetsLivedIn = new List<StreetLivedIn>(); 
    } 
    foreach (var efStreet in efPerson.EfStreetsLivedIn) 
    { 
     var street = new StreetLivedIn { Name = efStreet.Name; } 
     person.StreetsLivedIn.Add(street); 
    } 
    personList.Add(person); 
} 
return View(personList); 
+0

請注意,如果您不介意將EF對象模型展示給View,那麼問題中的兩行代碼就是答案 - 您直接在View中迭代對象。 – Nilzor