2017-12-08 9 views
0

以下のクエリは、フォルダレコードが存在するかどうかを確認します。そうでなければ、新しいレコードを作成します。 Folderテーブルには、自動的にインクリメントされるIDというプライマリキーがあることに注意してください。 IDが作成されたか既に存在していたレコードのIDであるかを調べる必要があります。効率的なやり方が必要です。現在私はそれを見つけるために長い道のりをしています。LINQ - 既存または作成されたレコードのIDを取得する必要があります

// Checks to see if record exist 
var record = (from pl in db.Folders 
       where pl.FolderSystem == "OP" 
       && pl.OrgID == orgID 
       select pl).FirstOrDefault(); 

// If does not exist create the record 
if (record == null) 
{ 
    db.Folders.Add(
      new Folders 
      { 
       OrgID = orgID, 
       FolderSystem = "OP",      
       CreatedUserID = 1, 
       CreatedDate = DateTime.UtcNow, 
       }); 

      db.SaveChanges(); 
} 

ここで、作成する必要があったレコードのIDを見つける必要があります。 Need Folder.ID。それを見つけるより効率的な方法がありますか?私は、クエリを再構築するために開いています。

+0

は 'ID列をOrgID'ていますか?もしそうなら、なぜあなたはそれを作るのを気にしていますか? (EFを使用してID列のためにそれを行うことは、実際には厄介なものです...) – DavidG

+0

OrgIDはID列ではありません。それは単に組織のIDです。 ID列はIDと呼ばれます。 –

答えて

0

に任意のシナリオはあなたが唯一のレコードは、データベースからエンティティ全体を引っ張っする必要はありませんが存在するかどうかを知りたい場合は、次の

var exists = db.Folders.Any(f => f.FolderSystem == "OP" 
           && f.OrgID == orgID); 

これは安いEXISTSクエリを実行し、booleanを返します。 。それが得られるほどの軽さについて。まだ

var id = db.Folders.Where(f => f.FolderSystem == "OP" 
          && f.OrgID == orgID) 
        .Select(f => f.ID).FirstOrDefault(); 

これが唯一の整数値(またはnull)を照会し、データベースから、:

あなたが(何らかの理由で)既存のレコードのIDを知りたい場合は、別の軽量のパターンがありますエンティティ全体ではありません。だから、idはどちらか検索し(既存の)値または新しい値になります

if(!id.HasValue) 
{ 
    // Use an explicit variable for the new entity 
    var record = new Folders 
     { 
      OrgID = orgID, 
      FolderSystem = "OP",      
      CreatedUserID = 1, 
      CreatedDate = DateTime.UtcNow, 
      }); 
    db.Folders.Add(record); 
    db.SaveChanges(); 
    id = record.ID; 
} 

今、あなたはで進めることができます。

あなたの場合、あなたはまだ森の外に出ていないことに注意してください。最初のクエリと挿入の間に、同じIDを2番目のユーザーが挿入する可能性が常にあります。ユニークな制約の例外を常に捕まえなければなりません。

0

でsaveChanges後、Idはあなたのモデルに更新されます。

if (record == null) 
{ 
    var record = 
     new Folders 
     { 
      OrgID = orgID, 
      FolderSystem = "OP",      
      CreatedUserID = 1, 
      CreatedDate = DateTime.UtcNow, 
      }); 
    db.Folders.Add(record); 

    db.SaveChanges(); 
} 
record.Id is the id 
関連する問題