我目前正在學習接口和存儲庫模式,並在我的簡單項目中遇到與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」中做到這一點。當用戶想要添加新車型時,他應該在文本框中輸入新車型的名稱,然後他應該在下拉列表中選擇屬於該車型的車型。我不知道如何使用存儲庫模式實現這一點,任何幫助將不勝感激。