C # EntityFramework сохранение 1-1 отношения - PullRequest
1 голос
/ 06 сентября 2011

У меня есть отношение один к одному между объектами Employee и EmployeePermission со свойствами навигации PermissionTo и Employee соответственно.Я могу нормально загружать свойства навигации, но проблема в том, что когда я изменяю свойства связанной сущности EmployeePermission, присоединяю сущность Employee к контексту базы данных и вызываю метод SaveChanges(), изменения всущность EmployeePermission не сохраняется в базе данных, но изменения в сущности Employee:

Вот как выглядит моя модель:

Model

Вот как выглядит моя функция сохранения:

public static void SaveEntities(List<TEntity> entities)
{
    using(var db = GetContext())
    {
        ObjectSet<TEntity> table = db.CreateObjectSet<TEntity>();
        foreach(TEntity entity in entities)
        {
            if (entity.IsNew())
                table.AddObject(entity);
            else
            {
                table.Attach(entity);
                EntityState state = (entity.EntityKey.IsTemporary) ? EntityState.Added : EntityState.Modified;
                table.Context.ObjectStateManager.ChangeObjectState(entity, state);
            }
        }
        db.SaveChanges();
    }
}

IsNew() - это метод расширения, который я добавил в класс EntityObject, чтобы проверить, нужно ли добавлять или присоединять сущность к EntitySet.

/// <summary>
/// Returns a value indicating if the entity object is new.
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public static bool IsNew(this EntityObject entity)
{
    return (entity.EntityKey == null || entity.EntityKey.IsTemporary);
}

Я загружаю сотрудника и связываю его свойства с формой, меняю их и вызываю метод SaveEntities().Все изменения в сущности Employee сохраняются в базе данных, но изменения в сущности EmployeePermission не сохраняются в базе данных, и я еще не дошел до других сущностей.

IЯ не уверен, что я делаю не так и искал часами.Я ценю всю помощь, спасибо заранее.

1 Ответ

1 голос
/ 06 сентября 2011

Не похоже, что вы изменили запись EmployeePermission с тех пор, как добавили ее в контекст. Поскольку EF не знает, что он модифицирован, он не знает, что есть что-то, что можно сохранить. Вы также можете вызвать ChangeObjectState для этого объекта, если хотите.

...