entity-framework - Entity Framework 4 POCO如何更新实体?

标签 entity-framework entity-framework-4

这是一种使用自跟踪实体添加/更新实体的方法,使用 POCO 的等效方法是什么?

        public Hero SaveHero(Hero hero)
        {
            using (WarEntities model = new WarEntities())
            {
                if (hero.ChangeTracker.State == ObjectState.Added)
                {
                    model.Heroes.AddObject(hero);
                    model.SaveChanges();
                    hero.AcceptChanges();
                    return hero;
                }
                else if (hero.ChangeTracker.State == ObjectState.Modified)
                {
                    model.Heroes.ApplyChanges(hero);
                    model.SaveChanges();
                    return hero;
                }
                else
                    return null;
            }
        }

最佳答案

更新实体最直接的方法是通过 Id 获取它,重写所有属性并调用 SaveChanges():

public Hero SaveHero(Hero hero)
{
    using (WarEntities model = new WarEntities())
    {
        Hero dbHero = model.Heroes.FirstOrDefault(h => h.Id == hero.Id);
        if (dbHero != null)
        {
            dbHero.Name = hero.Name;
            dbHero.OtherProperties = hero.OtherProperties;
            ...
            model.SaveChanges();
            return dbHero;
        }
        else
        {
            model.Heroes.AddObject(hero);
            model.SaveChanges();
            return hero;
        }
    }

但是,您可以通过附加 POCO 实体并将其状态更改为 Modified 来避免从数据库获取实体:

public Hero SaveHero(Hero hero)
{
    using (WarEntities model = new WarEntities())
    {
        model.Heroes.Attach(hero);
        var heroEntry = model.ObjectStateManager.GetObjectStateEntry(hero);
        heroEntry.ChangeState(EntityState.Modified);
        model.SaveChanges();
        return hero;
    }

请注意,只有当数据库中已经有这个“英雄”并且正在更新现有条目时,此方法才有效。您将需要一个单独的方法来添加新的“英雄”。

关于entity-framework - Entity Framework 4 POCO如何更新实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3382871/

相关文章:

c# - 存储用于 SQL 和 C# 的常量

wpf - 带有 Entity Framework 项目结构的 MVVM

c# - 如何使用 Entity Framework 中的 Where 计算关联实体

c# - 如何使用将 DBcontext 对象传递给继承 GenericRepository<T> 抽象类的实体的构造函数

c# - Visual C# 和 SQL Server 无法一起正常工作//文件已在使用中

mysql - 无法使用 MySql 运行代码优先迁移 - RenameColumn

asp.net-mvc-3 - LINQ to Entities 仅支持转换 EDM 基元或枚举类型

c# - .Take() 的位置对生成的 SQL 没有影响

c# - 保存更新模型后删除实体注释

c# - 使用 Linq 创建对象列表与创建字典的性能比较?