2012-02-21 6 views
0

Ordersという名前のテーブルには、作成時にランダムに生成する文字列を格納するOrderCodeという名前の列があります。ASP.NET MVCアプリケーション内のテーブル内の単一列の文字列を検索

テーブルに保存する前に、この文字列(OrderCode)が一意であることを確認します。 - しかし、私はない文字列を検索する必要が午前

 bool isUnique = false; 
     var order = new Order(); 
     var code = RandomCode.Generate(); 
     while (isUnique == false) // checks to see if the code we generated is unique among all generated codes, if not, will generate another code 
     { 
      var activeOrders = storeDB.Orders.Find("OrderCode", code); 
      if (activeOrders == null) 
      { 
       isUnique = true; 
      } 
      else 
      { 
       code = RandomCode.Generate(); 
      } 
     } 

     order.OrderCode = code; 

問題がDbSet<TEntity>.Find方法が実際に主キーを検索するために使用されていることのように見える:私はこれを行うことを試みてきた方法

主キー。

この状況にはどのような正しいアプローチがありますか?

+0

GuidをOrderCodeに使用しないでください。これは、一意であることをかなり保証していますか? –

+0

Guidを使用して7文字の長いコードを作成できますか? – Ecnalyr

+0

Guidは、base64エンコーディングを使用して22文字まで取得できます。 7つの文字は一意のコードを保証するのがかなり難しいです。人間が扱えるものが欲しいという理由でこれが小さければ、10文字にすることをお勧めします。人々は電話番号を覚えることができます。 –

答えて

0
if (context.Orders.Any(o => o.OrderCode == code)) 
{ 
    // key found 
} 

if (context.Orders.FirstOrDefault(o => o.OrderCode == code) != null) 
{ 
    // key found 
} 

あなただけSystem.Guidかかわら使用していない理由を私は聞いても(Guid.NewGuid()を。ToString())?これにより事実上この種の問題は解消されます。

+0

私は同意します... GUIDは、このユニークな文字列の問題のための最良のソリューションです – Avi

+0

私はそれを使用して7文字列を作成することはできませんでしたか? – Ecnalyr

+0

@miscusermandude:なぜVARCHAR(7)をキーとして使用していますか?あなたはあなた自身のものか他人のものの制約を受けていますか?代わりにint/uniqueカラムを使うことにします。 –

関連する問題