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; }
}
及び方法は、私はすでにそれをデバッグしてきたし、すべてが正常に見えます。
dbcontextで '.Commit()'を呼び出していることを確認してください。 –
私はトランザクションを実行していません。コミットはトランザクションのメソッドです – Dominik
実際にエントリをコンテキストに追加するのではなく、ナビゲーションプロパティを設定するだけです。したがって、関連するエントリはコンテキストにありますが、変更されていない状態であるため、EFはこれに対するクエリを作成しません。コンテクストのDbSetに正しく含まれている場合、EntityStateをAddedに設定します。 – DevilSuichiro