我目前正在学习接口和存储库模式,并在我的简单项目中遇到与CRUD操作有关的问题。下拉列表中的导航属性
我有域类 “VehicleMake”
public class VehicleMake
{
public VehicleMake()
{
}
[Key]
[Column(Order = 1)]
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
public virtual ICollection<VehicleModel> VehicleModels { get; set; }
}
和域类 “VehicleModel”
public class VehicleModel
{
[Key]
[Column(Order = 1)]
public int Id { get; set; }
public int VehicleMakeId { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
public virtual VehicleMake VehicleMake { get; set; }
}
我也有一个接口 “IVehicleRepository”
public interface IVehicleRepository
{
void Add(VehicleMake vehicleMake);
IEnumerable<VehicleMake> AllMakes { get; }
IEnumerable<VehicleModel> AllModels { get; }
}
和一类“VehicleRepository”实现该接口
public class VehicleRepository : IVehicleRepository
{
private readonly VehicleDbContext _context;
public VehicleRepository(VehicleDbContext context)
{
_context = context;
}
public void Add(VehicleMake vehicleMake)
{
_context.VehicleMakes.Add(vehicleMake);
_context.SaveChanges();
}
public IEnumerable<VehicleMake> AllMakes => _context.VehicleMakes;
public IEnumerable<VehicleModel> AllModels => _context.VehicleModels;
}
我的DbContext类以下
public class VehicleDbContext : DbContext
{
public VehicleDbContext() : base("VehicleDbContext")
{
}
public DbSet<VehicleMake> VehicleMakes { get; set; }
public DbSet<VehicleModel> VehicleModels { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
我 “VehicleMakeViewModel” 是继
public class VehicleMakeViewModel
{
[Required]
[Display(Name = "Vehicle Make Number")]
public int Id { get; set; }
[Required]
[Display(Name = "Vehicle Make Name")]
public string Name { get; set; }
}
和我的 “VehicleModelViewModel” 是继
public class VehicleModelViewModel
{
[Required]
[Display(Name = "Vehicle Model Number")]
public int Id { get; set; }
[Required]
[Display(Name = "Vehicle Model Name")]
public string Name { get; set; }
[Required]
[Display(Name = "Vehicle Make Id")]
public int VehicleMakeId { get; set; }
}
我有 “VehicleMakeController”
public class VehicleMakeController : Controller
{
private readonly IVehicleRepository _vehicleRepository;
public VehicleMakeController()
{
_vehicleRepository = new VehicleRepository(new VehicleDbContext());
}
// GET: VehicleMake
public ActionResult Index()
{
return View(_vehicleRepository.AllMakes);
}
public ActionResult CreateVehicleMake()
{
return View(new VehicleMakeViewModel());
}
[HttpPost]
public ActionResult CreateVehicleMake(VehicleMakeViewModel viewModel)
{
if (ModelState.IsValid)
{
var vehicleMake = new VehicleMake();
UpdateVehicleMake(vehicleMake, viewModel);
_vehicleService.Add(vehicleMake);
return RedirectToAction("Index");
}
return View(viewModel);
}
private void UpdateVehicleMake(VehicleMake vehicleMake, VehicleMakeViewModel viewModel)
{
vehicleMake.Id = viewModel.Id;
vehicleMake.Name = viewModel.Name;
}
}
和“VehicleModelController
public class VehicleModelController : Controller
{
private readonly IVehicleRepository _vehicleRepository;
public VehicleModelController()
{
_vehicleRepository = new VehicleRepository(new VehicleDbContext());
}
// GET: VehicleModel
public ActionResult Index()
{
return View(_vehicleRepository.AllModels);
}
}
正如你可以看到我的‘VehicleMakeController’我对加入新车型的方式使‘CreateVehicleMake’。问题是我不知道如何在车辆模型的“VehicleModelController”中做到这一点。当用户想要添加新车型时,他应该在文本框中输入新车型的名称,然后他应该在下拉列表中选择属于该车型的车型。我不知道如何使用存储库模式实现这一点,任何帮助将不胜感激。