2016-04-21 8 views
0

は、誰がどのように解決される問題を私に言うことができるレコードを正しく更新するには?</p> <p>私はデシベルで私の記録を更新したい:

internal static void ReleaseMachine(int idMachine) 
     { 
      Machine machine = GetByID(idMachine); 
      if (machine != null) 
       machine.idWorker = null; 
     } 

internal static Machine GetByID(int idMachine) 
    { 
     return (from m in Database.Current.Machines where m.idMachine == idMachine select m).FirstOrDefault(); 
    } 

しかし、私がしようとすると、プログラムは例外スロー:

システム。 Data.Linq.ForeignKeyReferenceAlreadyHasValueException、

オブジェクトの現在の状態のため、操作が無効です。

私はidWorkerが外部キーである推測している、とあなたは外部キーは、もはや参照内のレコードと一致しないだろうと許されないヌルへの外部キーを設定しているヘルプ

+0

EFオブジェクトは、返されたオブジェクトに対する変更を追跡できないため、EFオブジェクトの状態を指定する必要があります。 dbcontext.Entry(マシン).State = EntityState.Modified; dbcontext.SaveChanges(); – Hakunamatata

答えて

0

てくれてありがとう表。これにより、参照先の表に孤立したレコードが作成されます。外部キーを削除する前に、まずデータベースからWorkerを削除する必要があります。

データベース上のSQLクエリで同じことを直接試みると、idWorkerをnullに設定することはできません。データベース内でidWorkerをnullに直接設定できる場合は、エンティティを正しく設定していない可能性があります(エンティティ設定ではヌル入力可能な外部キー)。開いているファイルを保持したまま、それを比較:

+0

私はdbからワーカーを削除できません。ワーカーテーブルで何もしたくありません。 – Bortek23

+0

次に、Machineテーブル内の外部キーのプロパティidWorkerをnullable(データベースとエンティティ内)にするか、MachineをWorkerテーブルの外部キーにする必要があります。 – garethb

+0

私はすでにそれらの両方を持っています – Bortek23

0

は説明

dbcontext.Entry(machine).State = EntityState.Modified; 
dbcontext.SaveChanges(); 

を解決するため、これはフラッシュ/クローズの問題である、Hakunamatataに同意します。あなたはMachineテーブルにNULLを入れました。あなたはWritingのためにFrameworkのTableオブジェクトをオープンしましたが、Linqは同じテーブルからそのレコードをロードします。あなたが書き終わったことを知らないので、例外がスローされます。変更をデータベースに保存するだけです。その後、Linq式はテーブルを開いてそこから読み取ることができます。

+0

すべてがクリアですが、dbcontextにはEntry.Stateフィールドがありません。まだ私は問題を解決する方法を知らない – Bortek23

+0

さて、別の方法で問題を解決します。手伝ってくれてありがとう – Bortek23

関連する問題