コードワイドのEntity Framework 6.2を使用しています。したがって、各エージェントは、オフィス(そして唯一の事務所)に所属Entity Frameworkが親オブジェクトの前に子オブジェクトを保存しているようです
public class Agent
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int? AgentId { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
public int OfficeId { get; set; }
[ForeignKey("OfficeId")]
public virtual Office Office { get; set; }
}
と
public class Office
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int OfficeId { get; set; }
public string Agency { get; set; }
public string Branch { get; set; }
[InverseProperty("Office")]
public virtual ICollection<Agent> Agents { get; set; }
}
:私はこれらの2つのクラスを持っています。逆に、オフィスには多くのエージェントが含まれています。
私のアプリはWeb APIに接続し、エージェントとオフィスでXMLデータを送ります(これはXDocumentです)。 DbContextにこれらのオブジェクトを設定し、dbContext.SaveChanges();を呼び出します。その時点で
、私はこのエラーを取得する:
"Cannot add or update a child row: a foreign key constraint fails (
fusion
.agent
, CONSTRAINTFK_agent_office_OfficeId
FOREIGN KEY (OfficeId
) REFERENCESoffice
(OfficeId
) ON DELETE CASCADE ON UPDATE CASCADE)"
EFはオフィスの前にエージェントを保存しようとしているようですが、私に聞こえます。したがって、最初のエージェントをデータベースに書き込むときに、対応するオフィスは存在せず、トランザクションは失敗します。私は、EFが物事の正しい順序を(ナビゲーション特性に基づいて)把握し、正しい順序で物事を保存すると思いますか?
私のアプリがDbContextにエージェントとオフィスを追加したときに、まずエージェントとオフィスを追加したことを指摘する必要があります。これはEFがその同じ順序。申し訳ありませんが、私のアプリケーションがWeb APIを呼び出すと、APIは私にエージェントを使ってXMLデータを送信し、後でオフィスに送信します。
エージェントの前にEFでオフィスを保存するにはどうすればよいですか?
エージェントテーブルがOfficeテーブルの主キーを参照している場合、EFは最初にOffice行を作成して、そのIDを新しいエージェント行に挿入できるようにします。 EFは、ナビゲーション特性だけでなく、dbマッピングから推測される方法も見ています。 –
コンテキストに追加するコードを追加できますか? – Mats391
新しい「エージェントとオフィス」を追加する場合や、エージェントだけを追加する場合は、この問題がありますか? –