小编Mar*_*tin的帖子

LINQ To SQL忽略唯一约束异常并继续

我在名为Users的数据库中有一个表

Users
------
ID (PK, Identity)
Username (Unique Index)

我在Username表上设置了一个唯一索引,以防止重复.然后,我将通过集合枚举并在数据库中为每个项目创建新用户.

我想要做的只是插入一个新用户并在违反唯一键约束时忽略异常(因为在这种情况下它显然是重复记录).这是为了避免在不存在某种查询的情况下进行工艺.

首先,这会更高效还是我的插入代码应该检查重复项?我更多地了解具有该逻辑的数据库,因为这可以防止任何其他类型的客户端插入重复数据.

我的另一个问题与LINQ To SQL有关.我有以下代码:

public class TestRepo
{
    DatabaseDataContext database = new DatabaseDataContext();

    public void Add(string username)
    {
        database.Users.InsertOnSubmit(new User() { Username = username });
    }

    public void Save()
    {
        database.SubmitChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我迭代一个集合并插入新用户,忽略任何异常:

TestRepo repo = new TestRepo();

foreach (var name in new string[] { "Tim", "Bob", "John" })
{
    try
    {
        repo.Add(name);
        repo.Save();
    }
    catch {  }
}
Run Code Online (Sandbox Code Playgroud)

这是第一次运行,我在表中有三个用户.如果我删除第二个并再次运行此代码,则不会插入任何内容.我期望第一个插入失败,异常,第二个成功(因为我刚从数据库中删除该项),第三个插入失败.

什么似乎是发生的事情是,一旦抛出SQLException(即使继续循环迭代),所有后续插入失败 - 即使没有在表中的行会导致一个独特的冲突.

有谁能解释一下?

PS唯一的解决办法我能找到的插入之前每次实例化回购,那么它工作完全一样除外 - …

c# sql-server caching linq-to-sql

5
推荐指数
1
解决办法
2604
查看次数

标签 统计

c# ×1

caching ×1

linq-to-sql ×1

sql-server ×1