Метод SaveChange () заставляет другие методы возвращать false вместо true - PullRequest
0 голосов
/ 01 августа 2020

Справочная информация:

Я подписываюсь на https://github.com/ajsaulsberry/BlipBinding, чтобы создать основную информацию mvc веб-сайт.

Описание проблемы :

При нажатии кнопки «Создать» изменения не сохраняются в базе данных, и строка return RedirectToAction («Index») под контроллером не выполняется. (Взгляните на Create ActionResult под контроллером, где я только RedirectToAction (), когда контекст успешно сохраняется в базе данных.)

Однако, если я закомментирую context.SaveChanges () под репо, тогда строка return RedirectToAction ("Index") снова начнет работать нормально.

The context.SaveChanges ( ) Строка кажется здесь виноватой, но я не знаю, почему она делает метод SaveCommercialInvoiceHeader () , возвращающий false вместо true.

Моя цель - сохранить ввод который я ввел в элементы управления CreateView в базе данных, а затем выполнил строку return RedirectToAction ("Index") , чтобы вернуться в представление индекса.

Я пробовал использовать прикрепление и отсоединение, но, похоже, тоже не работает.

Repo:

namespace CargoWarp.Models.Repositories
{
    public class CommercialInvoiceRepository
    {
        public CommercialInvoiceHeaderCreateViewModel CreateCommercialInvoiceHeader()
        {
            var commercialInvoiceHeader = new CommercialInvoiceHeaderCreateViewModel()
            {
                CIH_PK = Guid.NewGuid().ToString()
            };
            return commercialInvoiceHeader;
        }
        public bool SaveCommercialInvoiceHeader(CommercialInvoiceHeaderCreateViewModel mod)
        {
            if (mod != null)
            {
                using (var context = new CustomsEntities())
                {
                    if (Guid.TryParse(mod.CIH_PK, out Guid id))
                    {
                        var commercialInvoiceHeader = new CommercialInvoiceHeader()
                        {
                            CIH_PK = id,
                            CIH_Date = mod.CIH_Date,
                            CIH_Incoterm = mod.CIH_Incoterm,
                            CIH_Number = mod.CIH_Number,
                            CIH_AdditionalInformation = mod.CIH_AdditionalInformation,
                            CIH_MarksAndNumbers = mod.CIH_MarksAndNumbers
                        };
                        context.CommercialInvoiceHeaders.Add(commercialInvoiceHeader);
                        context.Entry(commercialInvoiceHeader).State = System.Data.Entity.EntityState.Modified;
                        context.SaveChanges();
                        return true;
                    }
                }
            }
            return false;
        }
        #endregion
    }
}
Controller:

namespace CargoWarp.Controllers
{
    public class CommercialInvoiceHeaderController : Controller
    {
        public ActionResult Index()
        {
            var repo = new CommercialInvoiceRepository();
            var commercialInvoiceHeaderList = repo.GetCommercialInvoiceHeader();
            return View(commercialInvoiceHeaderList);
        }
        public ActionResult Create()
        {
            var repo = new CommercialInvoiceRepository();
            var commercialInvoiceHeader = repo.CreateCommercialInvoiceHeader();
            return View(commercialInvoiceHeader);
        }
        [HttpPost]
        public ActionResult Create([Bind(Include = "CIH_PK, CIH_Number, CIH_Date, CIH_Incoterm, CIH_MarksAndNumbers, CIH_AdditionalInformation")]CommercialInvoiceHeaderCreateViewModel commercialInvoiceHeaderCreateViewModel)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var repo = new CommercialInvoiceRepository();
                    bool saved = repo.SaveCommercialInvoiceHeader(commercialInvoiceHeaderCreateViewModel);
                    if (saved)
                    {
                        return RedirectToAction("Index");
                    }
                }
                return View();
            }
            catch
            {

                return View();
            }
        }
    }
}
ViewModelForCreateView:

namespace CargoWarp.ViewModels
{
    public class CommercialInvoiceHeaderViewModel
    {
        public System.Guid CIH_PK { get; set; }
        [DisplayName("Number")]
        [Required]
        public string CIH_Number { get; set; }
        [DisplayName("Date")]
        [Required]
        public System.DateTime CIH_Date { get; set; }
        [DisplayName("Incoterm")]
        [Required]
        public string CIH_Incoterm { get; set; }
        [DisplayName("Marks & Numbers")]
        public string CIH_MarksAndNumbers { get; set; }
        [DisplayName("Additional Information")]
        public string CIH_AdditionalInformation { get; set; }
    }
}
Model:

namespace CargoWarp.Models
{
    using System.Collections.Generic;
    
    public partial class CommercialInvoiceHeader
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public CommercialInvoiceHeader()
        {
            this.CommercialInvoiceLines = new HashSet<CommercialInvoiceLine>();
        }
    
        public System.Guid CIH_PK { get; set; }
        public string CIH_Number { get; set; }
        public System.DateTime CIH_Date { get; set; }
        public string CIH_Incoterm { get; set; }
        public string CIH_MarksAndNumbers { get; set; }
        public string CIH_AdditionalInformation { get; set; }
    
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<CommercialInvoiceLine> CommercialInvoiceLines { get; set; }
    }
}
CreateView:

@model CargoWarp.ViewModels.CommercialInvoiceHeaderCreateViewModel

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>


@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()
    
<div class="form-horizontal">
    <h4>CommercialInvoiceHeader</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

    <div class="form-group">
        @Html.LabelFor(model => model.CIH_Number, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.CIH_PK, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.CIH_PK, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.CIH_Number, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.CIH_Number, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.CIH_Number, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.CIH_Date, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.CIH_Date, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.CIH_Date, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.CIH_Incoterm, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.CIH_Incoterm, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.CIH_Incoterm, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.CIH_MarksAndNumbers, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.CIH_MarksAndNumbers, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.CIH_MarksAndNumbers, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.CIH_AdditionalInformation, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.CIH_AdditionalInformation, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.CIH_AdditionalInformation, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

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