Entity Framework: общий тип сравнения без идентификатора? - PullRequest
1 голос
/ 21 января 2012

Можно ли вообще сделать сравнение между объектами на равенство вообще без объектов, имеющих идентификатор?

Я пытаюсь сделать типичное общее обновление, для которого я видел много примеров онлайн, но все они обычно выглядят примерно так:

public void Update(TClass entity)
{
    TClass oldEntity = _context.Set<TClass>().Find(entity.Id);
    foreach (var prop in typeof(TClass).GetProperties())
    {
        prop.SetValue(oldEntity, prop.GetValue(entity, null), null);
    }
}

или что-то подобное.в моей системе не у каждого класса есть свойство с именем Id, в зависимости от класса Id может быть ClassnameId.Так есть ли у меня возможность проверить существование и вернуть такую ​​сущность через LINQ без предоставления каких-либо общих свойств?

1 Ответ

1 голос
/ 21 января 2012

Попробуйте

public void Update(TClass entity)
{
    var oldEntry = _context.Entry<TClass>(oldEntity);

    if (oldEntry.State == EntityState.Detached)
    {
         _context.Set<TClass>().Attach(oldEntity);
    }

    oldEntry.CurrentValues.SetValues(entity);
    oldEntry.State = EntityState.Modified;
}
...