J'ai une tâche très basique dans mon application ASP.NET CORE MVC . Le problème, c’est que j’ai 2 modèles d’ abonnements et de bons, et qu’ils ont une à plusieurs relations. En utilisant les classes de modèles et les échafaudages suivants, j’ai pu générer une page de dépôt dropDownList sur les coupons afin de sélectionner l’un des abonnements figurant actuellement dans la base de données. J'utilise également Entity Framework pour ma base de données et mon échafaudage.
Classes modèles
public class Subscription
{
public string FirstName { get; set; }
[Key]
public int ID { get; set; }
[Required]
public string Identifier { get; set; }
public bool State { get; set; }
[Required]
public string Description { get; set; }
[Required]
public int MonthlyPrice { get; set; }
[Required]
public int MinMonthlyPrice { get; set; }
[Required]
public int MonthlyDiscount { get; set; }
public virtual ICollection<Coupon> Coupons { get; set; }
public virtual ICollection<RegisterViewModel> Registrations { get; set; }
}
public class Coupon
{
[Required]
public string CouponCode { get; set; }
[Required]
public DateTime StartTime { get; set; }
[Required]
public DateTime EndTime { get; set; }
[Key]
public int ID { get; set; }
public int Discount { get; set; }
public bool IsPercentage { get; set; }
[ForeignKey("Identifier")]
public int SubscriptionId { get; set; }
public virtual Subscription Identifier { get; set; }
[Required]
public int ValidMonths { get; set; }
public bool IsSponsored { get; set; }
[Required]
public int Length { get; set; }
[Required]
public int Quantity { get; set; }
}
Maintenant, je veux le même menu déroulant sur ma page d' inscription . J'utilise le système d'enregistrement intégré des comptes d'utilisateurs individuels et je veux simplement inclure le même menu déroulant que j'ai sur la page de coupon pour sélectionner "abonnement". Je veux le même compte page d'inscription. Comment puis je faire ça? AccountsController n'obtient aucun ApplicationDbContext dans son paramètre constructeur contrairement à d'autres contrôleurs tels que "couponsController", c'est pourquoi j'ai du mal à comprendre comment obtenir des données de la base de données sur la page d'enregistrement.
Je sais que le code suivant m'aide à obtenir la liste des abonnés et à n'en obtenir qu'une propriété spécifique.
// GET: Coupons/Create
public IActionResult Create()
{
ViewData["SubscriptionId"] = new SelectList(_context.Subscription, "ID", "Identifier");
return View();
}
Je veux le même type de contenu sur ma page d'enregistrement, mais dbcontext n'existe pas sur AccountsController et je ne peux pas le créer à nouveau car je ne sais pas quelles options fournir dans le constructeur.
Si vous avez déjà votre DbContext, il devrait simplement être automatiquement injecté si vous créez un constructeur similaire à vos autres contrôleurs.
private ApplicationDbContext _db;
public AccountsController(ApplicationDbContext db)
{
_db = db;
}
Ensuite, vous pouvez accéder à vos DbSets via cela. Si cela ne fonctionne pas, vérifiez si vous avez quelque chose de similaire dans ConfigureServices dans votre classe de démarrage:
services.AddTransient<ApplicationDbContext>();
Si vos autres contrôleurs ont accès à DbContext, il devrait déjà y avoir quelque chose de similaire à cette ligne.