2014-10-14 2 views
0

Я хочу сохранить данные в 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

Можете ли вы добавить код для юридических лиц? Исключение, которое вы получаете, вызвано правилами проверки, поэтому мы должны иметь возможность видеть соответствующий код. – elolos

+0

Не уверен, что это вызывает ошибку, но вы добавляете в контекст один и тот же «Artikel» несколько раз. Вы должны переместить 'Artikel lArtikel = new Artikel();' внутри 'foreach' – Rhumborl

+0

@Rhumborl просто попробовал и не работал ... спасибо в любом случае – xFlowDev

ответ

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/

Смежные вопросы