我在名为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唯一的解决办法我能找到的插入之前每次实例化回购,那么它工作完全一样除外 - …