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

时间:2011-08-10 13:24:43

标签: c# .net linq linq-to-sql

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

2 个答案:

答案 0 :(得分:2)

您将收到后端sql server生成的异常。

答案 1 :(得分:2)

//编辑:我更新了代码以适应您的需求。在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"


    }
}