实体框架更新记录不起作用

cha*_*ara 8 linq asp.net-mvc entity-framework asp.net-mvc-4

我是Entity Framework的新手.我正在尝试更新记录并保存对数据库的更改.

public void SaveEdit(Gate gate)
        {
            try
            {
                using (dc = new GateEntities())
                {
                    var query = (from tbsite in dc.tblSites
                                 where tbsite.ID == gate.ID
                                 select tbsite).FirstOrDefault();

                    query.CalledInAt = gate.CalledInAt;
                    query.CallerRequest = gate.CallerRequest;
                    query.ContactPersonOnSite = gate.ContactPersonOnSite;
                    query.Email = gate.Email;
                    query.EmailSitePerson = gate.EmailSitePerson;

                    dc.SaveChanges();
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }



        }
Run Code Online (Sandbox Code Playgroud)

它没有异常或错误消息,但它不会保存对数据库的更改.为什么它没有更新记录?

Ale*_*voi 11

修改query对象后,您应该Modified在调用之前将其状态更改为context.SaveChanges().您的上下文对象应该知道您修改的实体.假设dc是您的上下文对象:

query.CalledInAt = gate.CalledInAt;
//change other properties ..
dc.Entry(query).State = EntityState.Modified;
dc.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这应该适合你.

  • 我相信这是现在 EF6 中的首选用法(带 Entry)。 (2认同)

Mil*_*ahi 5

您必须使用entityframework选择对象,这样结果对象才是可跟踪的,因此请尝试此操作

            using (var dc = new GateEntities())
            {
                var gate = dc.tblSites.Where(g => g.ID == date.ID).FirstOrDefault();

                gate.CalledInAt = gate.CalledInAt;
                gate.CallerRequest = gate.CallerRequest;
                gate.ContactPersonOnSite = gate.ContactPersonOnSite;
                gate.Email = gate.Email;
                gate.EmailSitePerson = gate.EmailSitePerson;

                dc.SaveChanges();
            }
Run Code Online (Sandbox Code Playgroud)