2016-11-09 116 views
0

我當前的項目我想添加來自ObservableCollection的新數據。 Collection包含一個包含我使用的三個表的所有屬性的大對象。我在Visual Studio 2015中使用了Entity Framework 5.0,MariaDB的最新版本和最新版本的mysql連接器。 不幸的是我沒有找到多個表的例子;只爲一個。 所以,我想這一點,但它總是拋出在EntityFramework.dll的DbEntityValidationException:實體框架將數據添加到多表表格

foreach(ZeichnungInDB zeichnungInDB in zeichnungen) 
     { 
      zeichnungInDB.Volante_Index = getVolCountByDrawingNumber(zeichnungInDB.Zeichnungsnummer)+1; 
      using (DMSContext db = new DMSContext()) 
      { 
       var zeichnung = new zeichnung() 
       { 
        Zeichnung_ID = zeichnungInDB.Dateiname + "_" + zeichnungInDB.Index + "_VOL_" + zeichnungInDB.Volante_Index + "_" + new DateTime().ToShortDateString(), 
        Baugruppe = zeichnungInDB.Baugruppe, 
        Baugruppe_Hauptzeichnung = zeichnungInDB.Baugruppe_Hauptzeichnung, 
        Zeichnungsnummer = zeichnungInDB.Zeichnungsnummer, 
        Index = zeichnungInDB.Index, 
        Dateiname_Org = zeichnungInDB.Dateiname, 
        Aenderung_Ext = zeichnungInDB.Aenderung_Ext, 
        Aenderung_Int = "AE_" + zeichnungInDB.Projektnummer + new DateTime(), 
        Dokumententyp = zeichnungInDB.DokumentenTyp, 
        Dateiendung = zeichnungInDB.Extension, 
        Volante_Index = zeichnungInDB.Volante_Index, 
        MMS_Sachmerkmal = zeichnungInDB.Mms_Sachmerkmal, 
        Status = zeichnungInDB.Status, 
        Aenderung_Bemerkung_Txt = zeichnungInDB.Aenderung_Bemerkung_Text, 
        Einzel_Bemerkung_Txt = zeichnungInDB.Einzel_Bemerkung, 
        Ahang_Link = zeichnungInDB.Anhang_Link, 
        Einzel_Link = zeichnungInDB.Einzel_Link, 
       }; 

       var projekt = new projekt() 
       { 
        Projektnummer = zeichnungInDB.Projektnummer, 
       }; 

       var tag = new tag() 
       { 
        Tag1 = zeichnungInDB.Tag, 
       }; 

       //var zeichnung = new zeichnung(); 
       //zeichnung. 

       db.zeichnungs.Add(zeichnung); 
       db.projekts.Add(projekt); 
       db.tags.Add(tag); 
       db.SaveChanges(); 
      } 
     } 

我知道這些代碼是不是高性能。但我只是希望它能起作用。最好的辦法就是給數據庫集中一步,或者如何將新數據插入到一個數據庫訪問中,但是我不知道這樣做,因爲我在完成我的教育三年後辭掉了我的工作。 如果有人對我的問題有回答,這將是非常有幫助的。

乾杯, Only3lue

+0

什麼是確切的例外呢?請添加堆棧。 –

+0

可以顯示模型代碼嗎? – Sampath

+0

okey我在數據庫中發現了錯誤。但我可以編碼這更多的perfomant然後它是現在? – Only3lue

回答

1

你應該嘗試趕上DbEntityValidationException,看看哪個輸入拋出異常:

try 
{ 
    db.SaveChanges(); 
} 
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx) 
{ 
    Exception raise = dbEx; 
    foreach (var validationErrors in dbEx.EntityValidationErrors) 
    { 
     foreach (var validationError in validationErrors.ValidationErrors) 
     { 
      string message = string.Format("{0}:{1}", 
      validationErrors.Entry.Entity.ToString(), 
      validationError.ErrorMessage); 
      // raise a new exception nesting 
      // the current instance as InnerException 
      raise = new InvalidOperationException(message, raise); 
     } 
    } 
    throw raise; 
} 
+0

okey,它本身引發InvalidOperationException。 但我不知道你是否可以閱讀德語它告訴: MMS.zeichnung:Das Feld「Zeichnung_ID」muss ein Zeichenfolgen- oder Arraytyp mit einer maximalenLängevon 50 sein。 – Only3lue

+0

@ Only3lue將stacktrace添加到您的問題。這是一個英文平臺。 –

+0

看起來像「Zeichnung_ID」應該是一個字符串限制爲50個字符 – Yanga

相關問題