2016-12-29 33 views
2

データベースへの変更は正常にコミットされましたが、オブジェクトコンテキストの更新中にエラーが発生しました。 ObjectContextが矛盾した状態になっている可能性があります。内部例外メッセージ:Evalv.Services.employedetailデータベースへの変更が正常にコミットされました... ObjectContextが矛盾した状態になる可能性があります

ログインおよび従業員

public partial class login 
{ 
    public string password { get; set; } 
    public string status { get; set; } 
    public bool active { get; set; } 
    public string emailId { get; set; } 
    public int employeeId { get; set; } 
} 

public partial class employedetail 
{ 
    public employedetail() 
    { 
     this.logins = new HashSet<login>(); 
    } 

    public int employeeId { get; set; } 
    public string firstName { get; set; } 
    public string middleName { get; set; } 
    public string lastName { get; set; }  
    public string emailId { get; set; }    

    public virtual ICollection<login> logins { get; set; } 
} 

方法について

エンティティフレームワーククラスは、データ

//employedetail e and login l are entity objects with data passed to below method. 

public string RegisterUser(employedetail e , login l) 
      { 
       try 
       { 
        using (EvalvEntities context = new EvalvEntities()) 
        { 
         context.employedetails.Add(e); 
         context.logins.Add(l); 
         if (context.SaveChanges() > 0) 
         { 
          return "Registered"; 
         } 
         else 
         { 
          return "Not Registered"; 
         } 
        } 
       } 
       catch(Exception ex) 
       { 
        return "Error :" + ex; 
       } 

      } 
を保存するエンティティタイプのフィールド/プロパティログインを設定することができません。

注::同じ例外についての他のいくつかの投稿は、これがプリマの不在のためである可能性があると主張したキーを押します。しかし、私はemployedetailloginテーブルの両方にプライマリキーの&の外部キーを持っています。何がうまくいかないか分かりません。エンティティオブジェクトをコンテキストに追加するたびにcontext.SaveChanges()と呼びますか?例えば

context.employedetails.Add(e); 
context.SaveChanges(); 
context.logins.Add(l); 
context.SaveChanges(); 

またはこれを行うに任意のより良い方法はありますか? 何か助けていただければ幸いです。

UPDATE:私は、クエリに&例外を以下のGOT)(context.savechangesために生成されたクエリをログを

INSERT [dbo].[employedetails]([employeeId], [firstName], [middleName], [lastName], [emailId]) 
VALUES (@0, @1, NULL, @2, @3,) 
-- @0: '4567' (Type = Int32) 
-- @1: 'sam' (Type = String, Size = 255) 
-- @2: 'anderson' (Type = String, Size = 255) 
-- @3: '[email protected]' (Type = String, Size = 255) 
-- Executing at 30-12-2016 12:17:27 AM +05:3 
-- Completed in 1 ms with result: 1 


INSERT [dbo].[login]([employeeId], [emailId], [password], [status], [active]) 
VALUES (@0, @1, @2, NULL, @3) 
-- @0: '4567' (Type = Int32) 
-- @1: '[email protected]' (Type = String, Size = 255) 
-- @2: '123456' (Type = String, Size = 255) 
-- @3: 'False' (Type = Boolean) 
-- Executing at 30-12-2016 12:17:28 AM +05:30 
-- Completed in 2 ms with result: 1 

例外スロー:EntityFramework.SqlServer.dll

に 'System.InvalidOperationExceptionが'

更新2:ログイン用マッピングありの画像 enter image description here

+0

ログインオブジェクト 'l'を保存するときの正確な内容は? Esp。その 'employeeId'の価値は面白いです。 –

+0

@GertArnoldログインオブジェクトlのいくつかの内容は、employetailsから派生します。object.i.e - adoptetails&loginは、両方とも同じemployeeId、emailId **を挿入時に持ちます。 – sujai

+0

'login'は主キーを持っていないようです。マッピングを表示できますか? –

答えて

0

ログインクラスとEmployeeDetailクラスに1対多のリレーションシップを使用している場合は、ログインクラスにpublic virtual employedetail employeedetail {get; set;}がありません。 。

あなたのログインクラスでこの行を追加してください(。このため、あなたはこの問題を得ている)

public partial class login 
{ 
    public string password { get; set; } 
    public string status { get; set; } 
    public bool active { get; set; } 
    public string emailId { get; set; } 
    public int employeeId { get; set; } 
    public virtual employedetail employeedetail {get; set;} //Add this in your class 
} 

注: - クラス名の最初の文字が資本金になるとEmployeeDetailにemployedetailのスペルを修正する必要がありますあなたのクラス名で。

+0

私はすでに上記の行を出していましたが、いつか削除しましたが、help.anyの提案はありませんでしたか? – sujai

+0

次に、コードをデバッグし、生成されたクエリを追加します。 – Rajput

関連する問題