Linq-to-sql插入已经存在的唯一行

本文关键字:唯一 存在 插入 Linq-to-sql | 更新日期: 2023-09-27 18:04:57

如果插入已经存在的具有唯一列的行,会发生什么?它是静默失败还是更新记录?如果它更新已存在的行,是否有办法使它失败?或者我是否使用select先检查行?

Linq-to-sql插入已经存在的唯一行

您将得到一个由后端sql server生成的异常。

//编辑:我更新了代码以适合您正在寻找的内容。在SQL Server中,请确保你的表主键列是一个标识列,种子和增量都设置为1。当你试图提交你的类时,不要添加主键。它会自动使用这个。

如果试图将一行插入到具有相同唯一ID的表中,将抛出异常。Linq-To-Sql的更新是棘手的…请参阅下面的代码。第一部分将失败,但将在try-catch中捕获。第二部分是如何进行更新。你得根据主键把它拉出来,修改字段,然后提交。请看这个博客:http://www.richardbushnell.net/2008/02/18/how-to-update-data-with-linq-to-sql/

class Program
{
    static void Main(string[] args)
    {
         DataClasses1DataContext ctx = new DataClasses1DataContext();
        try
        {
            for (int i = 0; i < 10; i++)
            {
                ctx.Table_1s.InsertOnSubmit(new Table_1
                {
                    Name = "John"
                });
                ctx.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict);
            }
            var list = from i in ctx.Table_1s
                       select i;
            foreach (var item in list)
            {
                Console.WriteLine(item.Name);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        //OUTPUT: "John"
        //        "John"
        //        "John" 
        //        "John"
        //        "John"
        //        "John"
        //        "John"
        //        "John"
        //        "John"
        //        "John"
        //        "John"

    }
}