Как разрешить сохранение внешних ключей в базе данных как нулевых с помощью Entity Framework с ASP.NET MVC? - PullRequest
1 голос
/ 13 мая 2019

В моей базе данных есть три таблицы: Superdealer, subdealer и commission

  • Идентификатор в Superdealer: SuperdealerId
  • Идентификатор в субдилере: subdealerId
  • Идентификатор в комиссии: commissionId.Он имеет два внешних ключа SuperdealerId и subdealerId

. Имеется раскрывающийся список, в котором можно выбрать, назначать ли комиссию субдилеру или самому супердилеру.Если я выбираю субдилера, значение должно быть присвоено subdealerid, а superdealerid должен быть нулевым.И если я выберу superdealer, ему должно быть присвоено значение, а subdealerid должен быть нулевым.

Я попробовал следующий код, но этот код не относится к моей проблеме.

 modelBuilder .Entity<Commission>()
                    .HasOptional<SuperDealer>(u => u.SuperDealer)
                    .WithOptionalPrincipal();
 modelBuilder .Entity<Commission>()
                    .HasOptional<SubDealer>(u => u.SubDealer)
                    .WithOptionalPrincipal();

public class Commission
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CommissionId { get; set; }


    //[Display(Name ="Selected Dealer Name")]
    //public string DealerName { get; set; }
    [Range(0, double.MaxValue, ErrorMessage = "Please enter valid 
    commission")]
    [Display(Name = "Commission Percentage")]
    public double CommissionPercentage { get; set; }

    [DataType(DataType.Date)]
    [Display(Name = "Commission Start Date")]
    public DateTime CommissionStart { get; set; }
    [Display(Name = "First Commission")]
    [Range(0, int.MaxValue, ErrorMessage = "Please enter valid number")]
    public int firstCommissionPart { get; set; }
    [Display(Name = "Second Commission")]
    [Range(0, int.MaxValue, ErrorMessage = "Please enter valid number")]
    public Nullable<int> secondCommissionPart { get; set; }
    [Display(Name = "Third Commission")]
    [Range(0, int.MaxValue, ErrorMessage = "Please enter valid number")]
    public Nullable<int> thirdCommissionPart { get; set; }

    [ForeignKey("SubDealerId")]
    public SubDealer SubDealer { get; set; }
    [Display(Name = "Select Sub dealer")]
    public int? SubDealerId { get; set; }

    [ForeignKey("SuperDealerId")]
    public SuperDealer SuperDealer { get; set; }
    [Display(Name = "Select Super dealer")]
    public int? SuperDealerId { get; set; }

 }

Это код создания комиссии дилерам

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "CommissionId,CommissionPercentage,CommissionStart,firstCommissionPart,secondCommissionPart,thirdCommissionPart,SubDealerId,SuperDealerId")] Commission commission, FormCollection fc)
{
        //var superdealer = Request.Form["SuperDealerId"];
        //var subdealer = Request.Form["SubDealerId"];
        int superdealer = int.Parse(fc["SuperDealerId"]);
        int subdealer = int.Parse(fc["SubDealerId"]);


        if (ModelState.IsValid)
        {
            if (superdealer > 0 && subdealer > 0)
            {
                commission.SubDealerId = subdealer;
            }
            else if (superdealer > 0)
            {
                commission.SuperDealerId = superdealer;
            }
            db.Commissions.Add(commission);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        List<SelectListItem> plans = new List<SelectListItem>();

        plans.Add(new SelectListItem { Text = "QM Plan", Value = "1", Selected = true });

        plans.Add(new SelectListItem { Text = "Customized Plan", Value = "2" });
        ViewBag.Plans = plans;
        ViewBag.SubDealerId = new SelectList(db.SubDealers, "SubDealer_No", "Name", commission.SubDealerId);
        ViewBag.SuperDealerId = new SelectList(db.SuperDealers, "SuperDealer_No", "Name", commission.SuperDealerId);
        return View(commission);
}

То, что я хочу, это

  1. Под супердилером может быть много субдилеров.Существует раскрывающийся список, в котором я могу выбрать, назначать ли комиссию субдилеру или самому супердилеру.Если я выбираю субдилера, значение должно быть присвоено subdealerid, а superdealerid должен быть нулевым.и если я выбираю superdealer, ему должно быть присвоено значение, а subdealerid должен быть нулевым.

Когда я нажимаю, я получаю следующую ошибку: https://imgur.com/sWsrKnZ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...