Как обновить базу данных новой информацией - PullRequest
5 голосов
/ 27 мая 2011

У меня ужасно с базами данных, поэтому, пожалуйста, потерпите меня.

У меня есть программа, которая получает некоторую информацию о пользователе и добавляет ее в таблицу базы данных.Затем мне нужно получить больше информации для этой таблицы и обновить ее.Для этого я попытался сделать это:

    public static void updateInfo(string ID, string email, bool pub)
    {
        try
        {
            //Get new data context
            MyDataDataContext db = GetNewDataContext(); //Creates a new data context

            //Table used to get user information
            User user = db.Users.SingleOrDefault(x => x.UserId == long.Parse(ID));

            //Checks to see if we have a match
            if (user != null)
            {
                //Add values
                user.Email = email;
                user.Publish = publish;
            }

            //Prep to submit changes
            db.Users.InsertOnSubmit(user);
            //Submit changes
            db.SubmitChanges();
        }
        catch (Exception ex)
        {
            //Log error
            Log(ex.ToString());
        }
    }

Но я получаю эту ошибку:

System.InvalidOperationException: Невозможно добавить сущность, которая уже существует.

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

Почему это не работает?Не будут ли изменения в текущем элементе обновлять этот элемент и не создавать новый?

1 Ответ

7 голосов
/ 27 мая 2011

Проблема

//Prep to submit changes
db.Users.InsertOnSubmit(user);

Поскольку вы уже получили пользователя из БД, вам не нужно повторно связывать его с контекстом.

Прокомментируйте это, и вы готовы идти.

Просто комментарий по стилю / использованию. Вы должны избавиться от контекста:

public static void updateInfo(string ID, string email, bool pub)
{
    try
    {
        using (MyDataDataContext db = GetNewDataContext()) 
        {
            User user = db.Users.SingleOrDefault(x => x.UserId == long.Parse(ID));

            if (user != null)
            {
                user.Email = email;
                user.Publish = publish;
            }

            db.SubmitChanges();
        }
    }
    catch (Exception ex)
    {
        //Log error
        Log(ex.ToString());

        // TODO: Consider adding throw or telling the user of the error.
        // throw;

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