我有一个表在数据库中调用用户LINQ到SQL忽略唯一约束异常,并继续
Users ------ ID (PK, Identity) Username (Unique Index)
我已经安装上的用户名表的唯一索引,以防止重复。然后,我通过集合进行枚举,并在每个项目的数据库中创建一个新用户。
我想要做的只是插入一个新用户,并且如果违反了唯一键约束(因为在这种情况下显然是重复记录),则忽略该异常。这是为了避免必须制造不存在种类的查询。
首先,这是否会更有效率,或者我的插入代码应该检查重复吗?我更关注具有该逻辑的数据库,因为这可以防止任何其他类型的客户端插入重复数据。
我的其他问题与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();
}
}
然后我遍历集合,并插入新的用户,忽略任何例外:
TestRepo repo = new TestRepo();
foreach (var name in new string[] { "Tim", "Bob", "John" })
{
try
{
repo.Add(name);
repo.Save();
}
catch { }
}
第一次遇到这种运行,太好了,我有三个用户表。如果我删除第二个并再次运行此代码,则不会插入任何内容。我期望第一次插入失败,例外,第二次插入成功(因为我刚刚从数据库中删除了该项目),第三次失败。
看上去正在发生的是,一旦抛出SqlException(即使循环继续迭代),即使表中没有会导致唯一违规的行,所有下一次插入也会失败。
任何人都可以解释这一点吗?
P.S.我能找到的唯一解决方法是在insert之前每次都实例化repo,然后它的工作方式与例外完全一样 - 表明这与LINQ To SQL DataContext有关。
谢谢。
我误解你的代码写我以前的帖子的时候,所以我的答案是完全错误的,这就是为什么我删除了它。 – 2010-03-18 15:12:20