2017-04-25 18 views
0

2つのエンティティ間の関係に問題があります。INSERTステートメントがFOREIGN KEY制約と競合しました - Entity Framework

私のクラスは以下の通りです。私はその上に複数のオーバーヘッドを持つCISオブジェクトを保存しようとすると

public class Cis 
{ 
    [Key] 
    public int CisId { get; set; } 
    public int ProjectId { get; set; } 

    [ForeignKey("ProjectId")] 
    public virtual ICollection<Overhead> Overheads { get; set; } 

} 

public class Overhead 
{ 
    public int Id { get; set; }  
    public int ProjectId { get; set; } 
    public SecuredWorkType SecuredWorkType { get; set; } 
    public decimal? OverheadRecoveryTotalValue { get; set; } 
    public decimal? BudgetedFinancialResultValue { get; set; } 
    public decimal? SecuredValue { get; set; } 
    public decimal? OverheadRecoveryTotalPercentage { get; set; } 
} 

、私は私があるため、設計上の問題の私の外部キーとしてシスにCisIdを使用することはできません

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.Overhead_dbo.Cis_ProjectId". The conflict occurred in database "CisLatest", table "dbo.Cis", column 'CisId'.The statement has been terminated." 

次のエラーを取得します - 私がCisIdを外部キーとして使用していたとき、それは正常に機能しました。

私は子供の中に親エンティティを置くことを示していますが、ここでも同様の質問と回答を見ましたか?これがこの場合に該当するかどうかわからない

ありがとうございます。

+0

1. 'ProjectId'を試してみてください。 2.本当の関係は何ですか? '[ExternalKey(" ProjectId ")]'を作って 'オーバーヘッド 'に' [Key] 'を設定する必要があります –

+0

アプリケーションの構造は次のとおりです。 Cisの数が多く、オーバーヘッドが多いプロジェクト。 CISとオーバーヘッドの間に直接の関係は必要ありません。オーバーヘッドはプロジェクトごとでCISではなく、これは混乱しているかもしれません。 – Aeptitude

+1

データ構造を再考する必要があるようです。彼の意見では、あなたは、「プロジェクト」、「シス」、「オーバーヘッド」、「プロジェクト__Cis」、「プロジェクト_オーバーヘッド」が必要だと思います。突然、あなたのEDMを構築できるように見えます –

答えて

0

は、両方のモデルで

public class Cis 
{ 
    [Key] 
    public int CisId { get; set; } 
    [ForeignKey("ProjectId")] //here 
    public int ProjectId { get; set; } 


    public virtual ICollection<Overhead> Overheads { get; set; } 

} 
+0

あなたの返事、ありがとうございましたありがとうございます - CisクラスのprojectIdの外部キー属性を使用して移行を試みたときにこのエラーが発生しました。 "プロパティ" ProjectId "はナビゲーションプロパティとして設定することはできません。プロパティは有効なエンティティタイプでなければならず、プロパティには非抽象ゲッタとセッタが必要です。タイプ。" – Aeptitude

関連する問題