【问题标题】:Entity framework, changes not saved实体框架,未保存更改
【发布时间】:2014-03-17 08:27:42
【问题描述】:

我遇到了一个我从未见过的问题。从今天开始,一切都运行良好,我的代码没有保存一些更新。

我的代码在 t_inscription.cs 中

public void emailsent(t_inscriptions inscription = null)
{
    if (inscription == null)
    {
        inscription = this;
    }

    inscription.id_etat_inscription = 5;
    db.AcceptAllChanges();
    db.SaveChanges();
}

当我调试时,应用程序通过此代码,对象铭文不为空且正确加载,其 id_etat_inscription 变为 5,我没有收到错误消息。

但是当我去我的数据库时,我在 5 时没有这个 id_etat_inscription 的铭文。

请注意,它是与包含 1 到 6 id 的表“t_etats_inscriptions”链接的外键。

我错过了什么吗?

非常感谢=)

【问题讨论】:

  • inscription 对象是否通过 db 对象加载?
  • 你创建了数据库对象吗??还是交易??
  • 检查连接字符串是否使用正确的数据库

标签: c# asp.net database entity-framework


【解决方案1】:

试试这个

db.Entry<t_inscriptions >(inscription ).State = EntityState.Modified;
db.SaveChanges();  

db.Entry(t_inscriptions).State = EntityState.Modified;
db.SaveChanges(); 

【讨论】:

  • 我试过 db.ObjectStateManager.ChangeObjectState(inscription, EntityState.Modified);但它说 ObjectStateManager 不包含 ObjectStateEntry 引用类型为“System.Data.Entity.DynamicProxies.t_inscriptions_7B7AED742874F1E74B514E55EEECC8C05213A5ED63B2C663B170C554262C4252”的对象,所以我想我必须用 db.t_inscriptions.Attach(inscription但它看起来像“inscirption”对象已经附加到另一个上下文(我不理解这个上下文的概念)
  • 当我尝试你的代码时,它说我的 db.不包含条目的定义
  • 如果您的实体已经附加到某个其他上下文,这意味着您将这个t_inscription 对象传递给emailsent 方法的其他方法正在持有引用。你能显示调用这个方法的方法吗?
  • 调用此方法的方法仅访问来自铭文的值。问题必须来自这个,因为在我的方法中,当我做 public void emailsent(t_inscriptions inscription = null) {if (inscription == null) {inscription = this; } t_inscriptions inscription2 = db.t_inscriptions.FirstOrDefault(x => x.id == inscription.id); inscription2.id_etat_inscription = 5; inscription.id_etat_inscription = 5; db.ObjectStateManager.ChangeObjectState(inscription2, EntityState.Modified);db.SaveChanges(); }它有效
【解决方案2】:

我会把它放在这里,因为它是“解决问题的方法”,

当我用

替换我的代码时
public void emailsent(t_inscriptions inscription = null)
{
    if (inscription == null)
    {
        inscription = this;
    }

    t_inscriptions inscription2 = db.t_inscriptions.FirstOrDefault(x => x.id == inscription.id);
    inscription2.id_etat_inscription = 5;

    inscription.id_etat_inscription = 5;
   //db.Entry<t_inscriptions>(inscription).State = EntityState.Modified;
 //   db.t_inscriptions.Attach(inscription);
   db.ObjectStateManager.ChangeObjectState(inscription2, EntityState.Modified);
  //  db.AcceptAllChanges();
    db.SaveChanges();
}

它的工作原理:/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2017-12-10
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    相关资源
    最近更新 更多