【问题标题】:How to update a database with new information如何使用新信息更新数据库
【发布时间】:2011-05-27 16:27:15
【问题描述】:

我的数据库很糟糕,所以请多多包涵。

我有一个程序可以获取一些用户信息并将其添加到数据库表中。然后,我稍后需要获取该表的更多信息,并对其进行更新。为此,我尝试过这样做:

    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:无法添加已存在的实体。

我知道这是因为我已经在表格中有一个条目,但是我不知道如何编辑代码来更新,而不是尝试制作一个新的?

为什么这不起作用?提交对当前项目的更改不会更新该项目而不是创建一个新项目吗?

【问题讨论】:

    标签: c# database linq linq-to-sql


    【解决方案1】:

    问题是

    //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;
    
        }
    }
    

    【讨论】:

    • 是的,做到了。感谢您的帮助
    猜你喜欢
    • 2022-01-02
    • 2011-09-27
    • 2014-12-17
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2017-01-29
    相关资源
    最近更新 更多