2017-08-05 71 views
0

這裏是我的數據庫架構: -指定導航屬性的結果視圖模型

public class Department 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Employee> Employee_Id { get; set; } 
} 

public class Employee 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public long Salary { get; set; } 
    public string Gender { get; set; } 
    public virtual Department Department_Id { get; set; } 
} 

根據我的研究的一個很好的做法,使用查看模型所以我通常創建我的模型,這種查詢: -

var v = edm.Departments.Select(x => new departmentViewModel { Name = x.Name }); 
return v.ToList(); 

現在我想導航屬性的好處加入到我的代碼。問題是它不適合我有用的,如果我不能把結果賦值給我視圖模型。如果我試圖通過員工訪問到我不能訪問。選擇()聲明。

var v = edm.Employees.Where(x => x.Id == 1).FirstOrDefault().Department_Id. //Ops!!! 

在上述發言中,我可以接觸到IdName.Select()無法訪問。

我可以忽略導航屬性並打破我的查詢到兩個查詢,並實現我想要的。但我問我怎麼能夠將它與導航屬性?我只是誤解了它的使用情況如何?

回答

0

我發現其實在我的架構中沒有導航屬性。要獲得導航屬性必須在您的類中具有構造函數,並且指向該構造函數的ForeignKey

public class Department 
{ 
    public Department(){} //needed constructor 

    public int Id { get; set; } 
    public string Name { get; set; } 

    [ForeignKey("Employee")] 
    public int Employee_Id; 
    public virtual ICollection<Employee> Employee { get; set; } 
} 

public class Employee 
{ 
    public Employee(){} //needed constructor 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public long Salary { get; set; } 
    public string Gender { get; set; } 

    [ForeignKey("Department")] 
    public int Department_Id; 
    public virtual Department Department { get; set; } 
} 

現在我可以在一個標準的方式,通過員工訪問。選擇()聲明仍然無法訪問。這並不重要,我發現我可以將結果複製到查看模型下一行沒有。選擇()語句。

var e = edm.Employees.Where(x => x.Id == 1).FirstOrDefault().Department; //.select() is still inaccessible 
departmentViewModel department = new departmentViewModel() { Id = e.Id, Name = e.Name };//but I could copy the result into my View Model here