我正在使用 asp.net mvc 制作网站。我有一张看起来像这样的桌子
Create Table Items(
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Colname] [nvarchar](20) NOT NULL
//OTHER UNIMPORTANT COLS HERE
)
ALTER TABLE Items ADD CONSTRAINT UN_Colanme UNIQUE(Colname)
在我的网站上,我经常尝试创建新项目,或从数据库中选择项目(使用实体框架)。这是它在 c# 中的样子
var item = db.Items.FirstOrDefault(i => i.Colname == "foo");
if(item == null)
{
item = new Item("foo");
db.Items.Add(item);
}
//some stuff with item
db.SaveChanges();
有时,2 个请求同时进入,都试图创建具有相同 colname 的项目。虽然唯一约束防止数据库存储任何错误值,但尝试保存更改会引发异常,因为违反了约束。
捕获此异常是处理此异常的正常方法吗?如果不是上面的 c# 代码,而是创建一个锁定表的存储过程,然后仅在允许的情况下插入一个新行,然后返回该行,我能否获得良好的性能?是常做的吗?