2017-02-15 6 views
0

コードワイドの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 , CONSTRAINT FK_agent_office_OfficeId FOREIGN KEY (OfficeId) REFERENCES office (OfficeId) ON DELETE CASCADE ON UPDATE CASCADE)"

EFはオフィスの前にエージェントを保存しようとしているようですが、私に聞こえます。したがって、最初のエージェントをデータベースに書き込むときに、対応するオフィスは存在せず、トランザクションは失敗します。私は、EFが物事の正しい順序を(ナビゲーション特性に基づいて)把握し、正しい順序で物事を保存すると思いますか?

私のアプリがDbContextにエージェントとオフィスを追加したときに、まずエージェントとオフィスを追加したことを指摘する必要があります。これはEFがその同じ順序。申し訳ありませんが、私のアプリケーションがWeb APIを呼び出すと、APIは私にエージェントを使ってXMLデータを送信し、後でオフィスに送信します。

エージェントの前にEFでオフィスを保存するにはどうすればよいですか?

+0

エージェントテーブルがOfficeテーブルの主キーを参照している場合、EFは最初にOffice行を作成して、そのIDを新しいエージェント行に挿入できるようにします。 EFは、ナビゲーション特性だけでなく、dbマッピングから推測される方法も見ています。 –

+0

コンテキストに追加するコードを追加できますか? – Mats391

+0

新しい「エージェントとオフィス」を追加する場合や、エージェントだけを追加する場合は、この問題がありますか? –

答えて

1

EFはナビゲーションプロパティに基づいて正しい順序を決定します。他の何かが間違っています。いくつか問題があるかもしれません。

なぜあなたは[DatabaseGenerated(DatabaseGeneratedOption.None)]を使用していますか?あなたはIDを作成して維持していますか、それともデータベースですか?そのデータベースは[DatabaseGenerated(DatabaseGeneratedOption.Identity)]がほしいと思わない?

また、エージェントのNull可能な主キー?あれは正しいですか?主キーはヌル値にできません。

普通の1対多の関係には、[InverseProperty("Office")]を設定する必要はありません。これはEFを混乱させるかもしれません。

+0

Garethありがとうございました、あなたの返事は正しい方向に私を指摘しました – user1900799

関連する問題