Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 使用Entity Framework 5附加和更新属性的最佳方法_Entity Framework - Fatal编程技术网

Entity framework 使用Entity Framework 5附加和更新属性的最佳方法

Entity framework 使用Entity Framework 5附加和更新属性的最佳方法,entity-framework,Entity Framework,我有一个操作方法,它接收包含更新值的项目列表,问题是我只想更新几个字段(电子邮件或电话),而不是完整记录。下面的代码似乎满足了我的需要,但有没有更好的或更新的方法来使用EF5实现这一点?我有时看到人们使用.Find而不是Attach等 public ActionResult Update(IEnumerable<GenericTable> items) { using (var gEntities = new genericEn

我有一个操作方法,它接收包含更新值的项目列表,问题是我只想更新几个字段(电子邮件或电话),而不是完整记录。下面的代码似乎满足了我的需要,但有没有更好的或更新的方法来使用EF5实现这一点?我有时看到人们使用.Find而不是Attach等

        public ActionResult Update(IEnumerable<GenericTable> items)
        {
            using (var gEntities = new genericEntities())
            {
                foreach (var GenericTable in items)
                {
                gEntities.GenericTable.Attach(GenericTable);
                gEntities.Entry(GenericTable).Property(x => x.EmailAddress).IsModified = true;
                gEntities.Entry(GenericTable).Property(x => x.PhoneNumber).IsModified = true;


            }
            gEntities.SaveChanges();

        }
public ActionResult更新(IEnumerable items)
{
使用(var genties=new genericenties())
{
foreach(项目中的var GenericTable)
{
绅士。可泛化。附加(可泛化);
gentites.Entry(GenericTable).Property(x=>x.EmailAddress).IsModified=true;
gEntities.Entry(GenericTable).Property(x=>x.PhoneNumber).IsModified=true;
}
绅士。保存变化();
}
在这里,我明确地告诉EF,电子邮件地址和电话号码每次都会被修改,但实际上会有一个或另一个,有没有办法只检测修改的列/属性


感谢

附加对于您的目的来说是很好的,除非您在上下文中已经有了其中一个通用项,在这种情况下,它将抛出异常。 Find在上下文中搜索条目,如果没有找到,它会在数据库中查询该条目并返回它(从而在流程中附加它)

我为整个表设置修改标志,如下所示:

foreach (var table in items)
{
    gEntities.GenericTable.Attach(table);
    gEntities.Entry<GenericTable>(table).State = EntityState.Modified;
}
foreach(项目中的变量表)
{
绅士。通用。附(表);
gentites.Entry(table).State=EntityState.Modified;
}
当您调用SaveChanges()时,EF将检查哪个属性被修改并相应更新