【发布时间】:2017-10-11 20:27:44
【问题描述】:
我目前正在学习接口和存储库模式,并且在我的简单项目中遇到 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”中做到这一点。当用户想要添加新车型时,他应该在文本框中输入新车型的名称,然后他应该在下拉列表中选择属于该车型的车型。我不知道如何使用存储库模式来实现这一点,我们将不胜感激。
【问题讨论】:
标签: c# asp.net-mvc repository-pattern