【问题标题】:Updating using code first in Entity Framework 5 with detached entities在具有分离实体的 Entity Framework 5 中首先使用代码进行更新
【发布时间】:2013-08-07 16:18:50
【问题描述】:

我正在开发一个带有分离实体的 n 层应用程序 (Visual Studio 2010)。我没有包含类定义,因为它们似乎与逻辑无关。

下面的代码 sn-p 可以正常工作,并且嵌入在using dbContext中。

dbContext.Entry(Case).State = Case.CaseID == 0 ? EntityState.Added : EntityState.Modified;
dbContext.Entry(Case.Woman).State = Case.Woman.CaseID == 0 ? EntityState.Added : EntityState.Modified;
dbContext.Entry(Case.Summary).State = Case.Summary.CaseID == 0 ? EntityState.Added : EntityState.Modified;

dbContext.SaveChanges();

我已将集合 ICollection<Cause> Causes 添加到 Summary 类。

我想做的是:

  • 检查新的Cause 是否与最近保存的Cause 相同,如果是,则更改保存的Cause 中的标志值
  • 将新的Cause 插入dbContext

Cause 类中有一个标志 IsCurrent;只有一条记录设置为true;如果新的Cause 与此不同,则需要将其设置为false

我欢迎使用基于代码优先的方式来执行此操作。

【问题讨论】:

  • 当考虑到数据库表的多个用户时,如何定义最近保存的Cause?是该用户最近一次保存,最近一次保存在这个工作单元的范围内,最近一次保存在这个正在运行的应用程序或服务实例的范围内,还是最近一次从任何地方保存到数据库中?跨度>
  • 我已更新问题以反映这一点。
  • Cause 类的自然键是什么?换句话说,给定两个或多个Causes,哪些属性定义了它们是相同的还是不同的。

标签: c# entity-framework code-first


【解决方案1】:

这样的事情应该可以工作:

using (...)
{
    Cause c = db.Causes.FirstOrDefault(ce => ce.IsCurrent == true);
    if (cause.Title != c.Title)
    {
        c.IsCurrent = false;
        cause.IsCurrent = true;        
    }

    //
    // other codes ...
    //
}

【讨论】:

  • 我使用不同的方法解决了这个问题,而不是我只使用最近记录的集合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多