将数据保存到多个表

时间:2014-10-14 08:07:55

标签: c# asp.net asp.net-mvc

我想将数据保存到数据库中的2个表中。我可以访问我的数据库并将数据保存到一个表。 但是2,它不再起作用了。我认为这是因为数据来自一个表单,但数据分为两部分:表单和一个或多个表行都必须从用户填写。

这是我的控制器代码:

    [HttpPost]
    public ActionResult saveIndex(VersandformularModel xModel)
    {
        using (var ctx = new Versandformular_DEVEntities())
        {
            Formular lFormular = new Formular();
            {
                lFormular.Absender_Firma = xModel.ccFirma[0];
                lFormular.Ansprechpartner = xModel.ccAnsprechpartner;


                lFormular.Empfänger_Firma = xModel.ccEmpfängerFirma;
                lFormular.Empfänger_Name = xModel.ccVorname + xModel.ccNachname;
                lFormular.Empfänger_Straße = xModel.ccStraße;
                lFormular.Empfänger_Land = xModel.ccLand;
                lFormular.Empfänger_PLZ_Ort = xModel.ccPLZ;
                lFormular.Empfänger_Bundesstaat = xModel.ccBundesstaat[0];
                lFormular.Empfänger_Telefon = xModel.ccTelefonNr;

                lFormular.Paketdienst = xModel.ccPaketdienst[0];
                lFormular.Versand_Bemerkung = xModel.ccBemerkungVersand;
                lFormular.Nächste_Lieferung = xModel.ccNächsteLieferung;
                lFormular.Warenkosten = xModel.ccWarenkosten;
                lFormular.Versandkosten = xModel.ccVersandkosten;
                lFormular.Kostenstelle = xModel.ccKostenstelle;

            };
            ctx.Formular.Add(lFormular);

            Artikel lArtikel = new Artikel();
            {
                foreach (var iiArtikel in xModel.ccTabelle)
                {
                    lArtikel.ArtikelNr = iiArtikel.ccArtikelNr;
                    lArtikel.WarentarifNr = iiArtikel.ccWarentarifNr;
                    lArtikel.Anzahl = iiArtikel.ccAnzahl;
                    lArtikel.Einzelpreis = iiArtikel.ccEinzelpreis;
                    lArtikel.Gesamtpreis = iiArtikel.ccAnzahl * iiArtikel.ccEinzelpreis;
                    lArtikel.Anzahl_Pakete = iiArtikel.ccAnzahlPakete;
                    lArtikel.Fertig_verpackt = iiArtikel.ccFertigVerpackt;
                    lArtikel.Inhaltsbeschreibung = iiArtikel.ccInhaltsbeschreibung;
                    lArtikel.Inhalt_Bemerkung = iiArtikel.ccBemerkungInhalt;

                    ctx.Artikel.Add(lArtikel);
                }

            }




            ctx.SaveChanges();
        }

        return Content("Hallo Welt");
    }

当我发送数据时,我总是得到一个DbEntityValidationException

这里是实体:

namespace Versandformular.Entity
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public partial class Versandformular_DEVEntities : DbContext
    {
        public Versandformular_DEVEntities()
            : base("name=Versandformular_DEVEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<Artikel> Artikel { get; set; }
        public virtual DbSet<Formular> Formular { get; set; }
    }
  }

1 个答案:

答案 0 :(得分:0)

您可以覆盖 SaveChanges 以查找DbEntityValidationException的改进验证消息。

1.在与EDMX所在地相同的位置创建一个新的部分类。

2.使用以下C#代码覆盖SaveChanges实现。

public partial class NorthwindEntities
{
public override int SaveChanges()
{
    try
    {
        return base.SaveChanges();
    }
    catch (DbEntityValidationException ex)
    {
        // Retrieve the error messages as a list of strings.
        var errorMessages = ex.EntityValidationErrors
                .SelectMany(x => x.ValidationErrors)
                .Select(x => x.ErrorMessage);

        // Join the list to a single string.
        var fullErrorMessage = string.Join("; ", errorMessages);

        // Combine the original exception message with the new one.
        var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);

        // Throw a new DbEntityValidationException with the improved exception message.
        throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
    }
}
}

请参阅此链接以获取更多详细信息: http://devillers.nl/improving-dbentityvalidationexception/