2016-11-09 35 views
-1

實際上我試圖在Visual Studio中使用EntityFrameWrok 5將數據插入到MariaDB中。我在服務器本身上創建了數據庫,並在Visual Studio中導入了模型。即時通訊使用三個表格,並且它們已鏈接 一個drabe talbe,項目talbe和標籤表。 實體是:drawing(many --- 1)project(1 --- many)tag。 對於插入我使用下面的代碼。但是它拋出了一個DbUpdateEntityException,它告訴他他不能匹配繪圖和項目表之間的鍵,因爲兩個或更多的主鍵是相同的。我使用一個特定的主鍵進行數據繪圖,與表中的其他對象deffnetly不一樣。其他主鍵是AUTO_INCREMENT所以我想它試圖插入一個新的項目,但具有相同的項目編號,不工作,但我真的不明白它爲什麼這樣做。實體框架將數據添加到表

DateTime aktuellesDatum = DateTime.Now; 
using (DMSContext db = new DMSContext())  
{ 
    foreach (ZeichnungInDB zeichnungInDB in zeichnungen) 
    { 
     zeichnungInDB.Volante_Index = getVolCountByDrawingNumber(zeichnungInDB.Zeichnungsnummer) + 1; 
     var zeichnung = new zeichnung() 
     { 
      Zeichnung_ID = zeichnungInDB.Dateiname + "_" + zeichnungInDB.Index + "_VOL_" + zeichnungInDB.Volante_Index + "_" + aktuellesDatum.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 + aktuellesDatum, 
      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, 
     }; 

     db.zeichnungs.Add(zeichnung); 
     db.projekts.Add(projekt); 
     db.tags.Add(tag); 
    } 
    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; 
    } 
} 

也許有人有問題的想法或解決方案。 (其中「ZeichnungInDB」是一個自定義對象和「zeichnungen」是的ObservableCollection)

另一個問題我有是,我impletmented日期時間至極一個字段是CURRENT_TIMESTSAMP但它僅示出了0000-00-00 00 :00:00這是爲什麼?

乾杯,Only3lue

回答

0

你使用流利的API嗎?如果你是,你應該像例如身份標記的id屬性:

Property(p => p.DrawingId). 
      HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

或者你可以在你的實體類的實例的主鍵的註釋標記:

public class drawing { 

    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ind DrawingId {get; set;} 
    .... 

}

鏈接: http://www.opten.ch/blog/2014/03/5/configuring-entity-framework-with-fluent-api/

問候。

+0

我剛剛在heidiSQL-Tool中聲明瞭數據庫,並在Visual Studio中生成了模型,這就是我所做的。但我會測試你的tipp。 – Only3lue

相關問題