0
我們有如下表在實體框架獲取鍵/ ID如果行存在其他插入行和拿到鑰匙
TABLE [dbo].[SoftwareItems](
[SoftwareItemId] [int] IDENTITY(1,1) NOT NULL,
[Type] [varchar](32) NOT NULL,
[SoftwareItem] [varchar](100) NOT NULL)
什麼是最有效的方式來獲得行的關鍵,如果它存在,或插入新行並返回新行的關鍵字。下面是我到目前爲止:
var ctx = new Entities();
var si = ctx.SoftwareItems.FirstOrDefault(s => s.SoftwareItem1.Equals(SoftwareItem) && string.Compare(s.Type, SoftwareItemType) == 0);
if (si != null)
return si.SoftwareItemId;
else
{
si = new SoftwareItem();
si.SoftwareItem1 = SoftwareItem;
si.Type = SoftwareItemType;
ctx.SoftwareItems.Add(si);
ctx.SaveChanges();
return si.SoftwareItemId;
}
威爾併發性是一個問題,或僅將一個客戶端一次訪問基礎持久性?你的方式很好,但沒有一個TransactionScope,如果多個客戶端試圖調用你的代碼,它可能容易重複條目。 – MutantNinjaCodeMonkey
好點。併發性是一個問題,如果我們在很短的時間內有兩個請求,那麼我們最終可能會得到兩行具有相同數據的行,但現在我們可以接受。感謝您指出。 – ziddarth