First solve:
db.KreatoryZamowien.Add(model.KreatorZamowien);
db.Nabywcy.Add(model.Nabywca);
db.SaveChanges();
That is adding data to two tables. How Can I add related IDs to junction table (NabywcaKreatorzamowien)?
****************** Question: *************** I have created related tables, figured out how to display that data in my View. (jejejej) Now when I'm trying to save that data to database I'm getting exception.
Exception:
System.NullReferenceException occurred
  HResult=0x80004003
  Message=The object reference has not been set to the instance of the object.
  Source=<Cannot evaluate the exception source>
  StackTrace:
   at Panele.Controllers.KreatorZamowienController.Create(KreatorZamowienNabywca model) in C:\Users\bplos\Source\Repos\Panele\Panele\Controllers\KreatorZamowienController.cs:line 81
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
Exception appears in controller in line within:
emp.KreatorZamowien.NumerZamowienia = model.KreatorZamowien.NumerZamowienia;
I don't know why, cos it gets value from model and is assigning to object.:(
My database schema:
KreatorZamowien(Id, NumerZamowienia)  -------------------------------|
                                                                     |
NabywcaKreatorzamowien (KreatorZamowien_Id, Nabywca_Nabywca_Id)------|
                                                                     |
Nabywca(Nabywca_Id, Nazwa) ------------------------------------------|
My models:
KreatorZamowien.cs
public class KreatorZamowien
    {
        public int Id { get; set; }
        public int NumerZamowienia { get; set; }
        public virtual ICollection<Nabywca> Nabywcy { get; set; }
    }
Nabywca.cs
 public class Nabywca
    {
        public int NabywcaId { get; set; }
        public string Nazwa { get; set; }
        public virtual ICollection<KreatorZamowien> KreatoryZamowien { get; set; }
    }
Model containing 2 models to display them in View: KreatoryZamowienNabywca.cs
 public class KreatorZamowienNabywca
    {
        public KreatorZamowien KreatorZamowien { get; set; }
        public Nabywca Nabywca { get; set; }
    }
My Create.chtml View:
@model Panele.Models.KreatorZamowienNabywca
@using (Ajax.BeginForm("Create", "KreatorZamowien", new AjaxOptions { HttpMethod = "POST", LoadingElementId = "loader", OnSuccess = "onAjaxRequestSuccess" }, new
{
    @id = "AjaxformId",
    @class = "form-horizontal",
    role = "form"
}))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
   @Html.DisplayNameFor(m => m.KreatorZamowien.NumerZamowienia)
   @Html.TextBoxFor(m => m.KreatorZamowien.NumerZamowienia)
  @Html.DisplayNameFor(m => m.Nabywca.Nazwa)
  @Html.TextBoxFor(m => m.Nabywca.Nazwa)
  <input id="btnSubmit" class="ico2" type="submit" value="Zapisz zamówienie" form="AjaxformId" />
}
KreatorZamowienController.cs
public class KreatorZamowienController : Controller
    {
        private ShopContext db = new ShopContext();
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Create(KreatorZamowienNabywca model)
        {
            try
            {
                // Verification  
                if (ModelState.IsValid)
                {
                    ShopContext db = new ShopContext();
                    KreatorZamowienNabywca emp = new KreatorZamowienNabywca();
                    emp.KreatorZamowien.NumerZamowienia = model.KreatorZamowien.NumerZamowienia;
                    emp.Nabywca.Nazwa = nabywca.Nazwa;
                    db.KreatoryZamowien.Add(emp.KreatorZamowien);
                    db.Nabywcy.Add(emp.Nabywca);
                    db.SaveChanges();
                    // Info.  
                    return this.Json(new
                    {
                        EnableSuccess = true,
                        SuccessTitle = "Success",
                        SuccessMsg = "Zapisano zamówienie o numerze: " + model.KreatorZamowien.NumerZamowienia + "."
                    });
                }
            }
            catch (Exception ex)
            {
                // Info  
                Console.Write(ex);
                throw ex;
            }
            // Info  
            return this.Json(new
            {
                EnableError = true,
                ErrorTitle = "Error",
                ErrorMsg = "Coś poszło nie tak! Sprawdź formularz."
            });
            //return View(model);
        }
User contributions licensed under CC BY-SA 3.0