linq-to-sql вставка уникальной строки, которая уже существует? - PullRequest
0 голосов
/ 10 августа 2011

Если вы вставите строку, которая уже существует с уникальным столбцом, что произойдет?Он молча терпит неудачу или обновляет запись?Если он обновляет существующую строку, есть ли способ сделать так, чтобы она потерпела неудачу?Или я застрял с помощью выбора, чтобы сначала проверить строку?

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

// РЕДАКТИРОВАТЬ: я обновил код, чтобы соответствовать тому, что вы ищете. В SQL Server убедитесь, что ваш столбец первичного ключа таблицы является столбцом идентификаторов, для которого начальное значение и значение приращения установлены в 1. Когда вы пытаетесь отправить свой класс, НЕ ДОБАВЛЯЙТЕ первичный ключ. Он будет использовать это автоматически.

Исключение будет выдано, если вы попытаетесь вставить строку в таблицу с тем же уникальным идентификатором. Обновления в 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"


    }
}
2 голосов
/ 10 августа 2011

Вы получите исключение, сгенерированное внутренним сервером sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...