2016-06-20 12 views
0

AuditReportを自分の監査に設定して保存した後(デバッガでプロキシがいっぱいです)、まだデータベースにエントリがなく、アイデアがありません。ここでは、関連するクラスです:私はすでに述べたように DB内のsaveChangesの後にnullがあるEFでオブジェクトを作成する

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(); 
    } 
} 

を作成されることを新しいAUDITREPORTで

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; } 
} 

及び方法は、私はすでにそれをデバッグしてきたし、すべてが正常に見えます。

+0

dbcontextで '.Commit()'を呼び出していることを確認してください。 –

+0

私はトランザクションを実行していません。コミットはトランザクションのメソッドです – Dominik

+0

実際にエントリをコンテキストに追加するのではなく、ナビゲーションプロパティを設定するだけです。したがって、関連するエントリはコンテキストにありますが、変更されていない状態であるため、EFはこれに対するクエリを作成しません。コンテクストのDbSetに正しく含まれている場合、EntityStateをAddedに設定します。 – DevilSuichiro

答えて

0

[ForeignKey] atrributeが既に存在するため、IDの[Key]を削除してみてください。

+0

動作します。 IDENTITY_INSERTがOFFに設定されている場合、テーブル 'テーブル'のID列に明示的な値を挿入できません。 – Dominik

+0

いいですね。 –

関連する問題