如何检查唯一键约束

时间:2014-07-16 06:47:49

标签: c# sql sql-server entity-framework

我想检查唯一键约束,但我不知道使用哪种方法。 哪种方法更好? 我使用c#,EF,SQL Server

第一种方法:

    bool contactExists = _db.Contacts.Any(contact => contact.ContactName.Equals(ContactName));

if (contactExists)
{
    return -1;
}
else
{
    _db.Contacts.Add(myContact);
    _db.SaveChanges();
    return myContact.ContactID;
}

第二种方法:

Handle in exception.

第三种方法: 用T-SQL检查

If  Exists  (
    Select  Name
        From    dbo.ContentPage
        Where   Name    = RTRIM(LTRIM(N'page 1'))
    )

开始     选择' True' 结束 其他 开始     选择“假”' 端

4 个答案:

答案 0 :(得分:3)

我很少检查代码中的唯一键约束。事实上,如果多个客户端可以同时更新数据,那实际上是浪费时间。假设您检查以确保您可以添加员工#Saeid Mirzaei'并发现密钥未被使用。所以你添加它。如果其他人在此期间输入了密钥问题,您仍然可以获得密钥问题,并且最终无法获得异常。您可以在TSQL或C#中处理异常,但您几乎需要使用异常处理来实现健壮的代码。

答案 1 :(得分:1)

这取决于您的要求,但通常在异常中处理是最佳选择。这将是最有效和最可靠的。我假设你的意思是由于唯一约束而抛出的异常。

答案 2 :(得分:0)

我更喜欢方法1,检查代码并在列中添加UNIQUE约束。

答案 3 :(得分:0)

我建议你在SQL Server的Name列上创建Unique索引,而不是在表上保存RTRIM(LTRIM(Inserted.name))列而不是name列的插入触发器。

此外,您可以使用客户端控制来减少与数据库的网络连接。