J'apprends actuellement les interfaces et le modèle de référentiel et j'ai des difficultés avec les opérations CRUD dans mon projet simple.Propriété de navigation dans une liste déroulante
Je classe de domaine "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; }
}
et une classe de domaine "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; }
}
J'ai aussi une interface "IVehicleRepository"
public interface IVehicleRepository
{
void Add(VehicleMake vehicleMake);
IEnumerable<VehicleMake> AllMakes { get; }
IEnumerable<VehicleModel> AllModels { get; }
}
et une classe "VehicleRepository" qui implémente cette interface
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;
}
Ma classe DbContext suit
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)
{
}
}
Mon "VehicleMakeViewModel" est la suite
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; }
}
et mon "VehicleModelViewModel" est suivant
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; }
}
Je "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;
}
}
et un « 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);
}
}
Comme vous pouvez le voir dans mon « VehicleMakeController »J'ai des méthodes pour ajouter des nouvelles marques de véhicules « CreateVehicleMake ». Le problème est que je ne sais pas comment faire cela dans mon "VehicleModelController" pour les modèles de véhicules. Lorsque l'utilisateur souhaite ajouter un nouveau modèle de véhicule, il doit entrer un nom du nouveau modèle de véhicule dans la zone de texte, puis sélectionner dans la liste déroulante la marque de véhicule qui appartient à ce modèle de véhicule. Je ne sais pas comment implémenter ceci avec le modèle de dépôt et n'importe quelle aide serait appréciée.