2017-09-18 64 views
0

我新的ASP.NET MVC和Entity Framework。我正在使用Code First方法創建一個汽車經銷商項目。我有3個表(類):
從3個相關的表ASP.NET MVC 5 EF代碼第一次加載數據

車,用於存儲車數據
CarBrand,用於存儲像福特,菲亞特,寶馬...
CarModel品牌,用於存儲模型,如嘉年華,熊貓,318 .. 。

汽車類有一個FK到CarModel類。 的CarModel類有一個FK到CarBrand。

這裏有我的課:

public class Car 
{ 
    public int Id { get; set; } 
    public string Description{ get; set; } 
    public decimal Price{ get; set; } 

    public CarModel CarModel { get; set; } 
    public int CarModelId { get; set; } 

    ..... (more properties) 
} 

public class CarBrand 
{ 
    public int CarBrandId { get; set; } 
    public string Description{ get; set; } 
} 

public class CarModel 
{ 
    public int CarModelId { get; set; } 
    public string Description{ get; set; } 

    public int CarBrandId { get; set; } 
    public CarBrand CarBrand { get; set; } 
} 

我想從所有3個表加載數據。我可以使用Controller中的以下代碼加載2個表中的數據:

var cars = _context.Cars.Include(c => c.CarModel).ToList(); 

如何從CarBrand載入數據? 難道我設置了正確的導航屬性的類?

一旦我加載數據,我想我需要一個ViewModel來存儲和發送數據到強類型視圖,對吧?

此刻我的視圖模型爲:

public class CarsModelsViewModel 
{ 
    public CarModel CarModel { get; set; } 
    public CarBrand CarBrand { get; set; } 
    public List<Car> Cars { get; set; } 
} 

回答

0

要包含多個層次,它更容易使用的Include串PARAM過載:

.Include("CarModel.CarBrand") 

但是,可以達到同樣的效果,通過簡單地選擇附加級別:

.Include(m => m.CarModel.Select(b => b.CarBrand)) 

的順稅開始變得有點討厭這種方式,雖然,特別是與相關實體的兩個以上的級別。

這就是說,個人而言,我會稍微改變實體的設計。模型和品牌之間的關係與汽車和品牌之間的關係有着不同的目的。它更有意義,在我看來,對汽車有一個外鍵以創品牌爲好。

public class Car 
{ 
    public int Id { get; set; } 
    public string Description{ get; set; } 
    public decimal Price{ get; set; } 

    public CarBrand CarBrand { get; set; } 
    public int CarBrandId { get; set; } 

    public CarModel CarModel { get; set; } 
    public int CarModelId { get; set; } 

    ..... (more properties) 
} 

然後,你只需要:

Include(m => m.CarBrand).Include(m => m.CarModel) 

這也有可以集合導航屬性添加到CarBrand現在獲得與該品牌所有車的好處,而不必遍歷所有CarModel關係。換句話說,而以前你必須做一些事情,如:

var cars = brand.Models.SelectMany(m => m.Cars); 

你可以簡單地這樣做:

var cars = brand.Cars; 
+0

感謝您的回覆克里斯,數據加載的作品!現在我正在實施關於向Car類添加外鍵的建議。使用更新的類創建新的遷移時出現以下錯誤:引入FOREIGN KEY約束'FK_dbo.Cars_dbo。表'Cars'上的CarModels_CarModelId可能會導致循環或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。 –