我想将数据保存到数据库中的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; }
}
}
答案 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/