Entity Framework 4 POCO, как обновить сущность? - PullRequest
2 голосов
/ 01 августа 2010

Это метод для добавления / обновления сущности с использованием самопроверяемых сущностей, что эквивалентно использованию 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;
            }
        }

1 Ответ

4 голосов
/ 02 августа 2010

Самый простой способ обновить сущность - извлечь ее по идентификатору, переписать все свойства и вызвать 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;
    }

Обратите внимание, что этот метод будет работать, только если у вас уже есть этот «герой» в БД и вы обновляете существующую запись.Вам понадобится отдельный метод для добавления нового «героя».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...