2017-09-18 46 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约束。 –