2016-06-20 48 views
0

我設置我的審計AuditReport並保存它(在調試器中填充代理)後,仍然沒有在數據庫中的條目,我不知道爲什麼。下面是相關的類:在EF中創建對象,其中saveChanges後在DB

public class AuditReport 
{ 
    [Key] 
    [ForeignKey("Audit")] 
    [Column("AuditReport_ID")] 
    public int ID { get; set; } 

    [Required] 
    public virtual Audit Audit { get; set; } 
} 

public class Audit 
{ 
    [Key] 
    public int GeneratedID { get; set; } 

    [Index("Audit_ID", IsUnique = true)] 
    public int Audit_ID { get; set; } 
    public virtual AuditReport AuditReport { get; set; } 
} 

而且方法,新AuditReport創建

public async override Task SaveChangesAsync() 
{ 
    using (var dbAccess = new DatabaseAccess()) 
    { 
     var foundAudit = dbAccess.Audits.Include("AuditReport").Include("AuditReport.Stellungnahmen").SingleOrDefault(_ => _.Audit_ID == Audit.Audit_ID); 
     if (foundAudit != null) 
     { 
      if (foundAudit.AuditReport == null) 
      { 
       foundAudit.AuditReport = dbAccess.AuditReports.Create(); 
       foundAudit.AuditReport.Audit = foundAudit; 
      }      
      else 
      foundAudit.AuditReport.Stellungnahmen.ToList().ForEach(_ => dbAccess.Entry(_).State = EntityState.Deleted); 

      foreach (var item in Stellungnahmen.Where(_ => _.IsChecked == true)) 
        foundAudit.AuditReport.Stellungnahmen.Add(dbAccess.Stellungnahmen.SingleOrDefault(_ => _.KeyWord == item.KeyWord)); 
      } 
     await dbAccess.SaveChangesAsync(); 
    } 
} 

正如我已經說過,我已經調試它,一切都看起來很好。

+0

確保你在你的dbcontext中調用'.Commit()'。 –

+0

我沒有交易正在運行。提交是一種事務方法 – Dominik

+0

您實際上並未將條目添加到上下文,但僅設置導航屬性。因此,您的相關條目位於上下文中,但處於未更改的狀態,因此EF不會爲此創建任何查詢。如果它們在上下文的DbSet中正確,則將它們的EntityState設置爲Added。 – DevilSuichiro

回答

0

嘗試從ID刪除[Key],因爲您已經有[ForeignKey] atrribute。

+0

Works。之後,我查看了一個問題的正確位置:異常是'''當IDENTITY_INSERT設置爲OFF時,無法在表'table'中爲標識列插入顯式值。 – Dominik

+0

聽起來對我很好。 –