2014-12-08 7 views
3

Я хочу написать функцию, которая получает любой объект Entity и находит текущее значение с помощью автоматически определяемого первичного ключа и обновляет его.Получить столбец первичного ключа из dbSet

Не могли бы вы указать мне направление.

public void Update(object entity) 
{ 
    using (var _db = new MyEntities()) 
    { 
     var table = _db.Set(entity.GetType()); 
//Here we should somehow find the entity object which primary key coincides with the one of entity 
     var entityObj = table.FindObjectByPrimaryKey(entity); 
     entityObj.CopyDataFrom(entity); 
     _db.SaveChanges() 

    } 
} 

Возможно ли это?

ответ

4

вы можете найти первичные ключи сущности, как этого

ObjectContext objectContext = ((IObjectContextAdapter)_db).ObjectContext; 
ObjectSet<YourEntity> set = objectContext.CreateObjectSet<YourEntity>(); 
IEnumerable<string> keyNames = set.EntitySet.ElementType 
              .KeyMembers 
              .Select(k => k.Name); 

, а затем использовать отражение для доступа к их ценностям.

+0

У меня нет класса 'YourEnity'. Что я могу сделать, так это динамически получить тип экземпляра сущности: 'entity.GetType()'. – Vahagn

+0

@Vahagn Вы должны сделать свой метод общим для начала. –

+0

Добавление к решению врача, согласно https://michaelmairegger.wordpress.com/2013/03/30/find-primary-keys-from-entities-from-dbcontext/#comment-156, есть улучшения, которые необходимо предпринять (таких как производительность) к этому подходу. – Veverke

-2

Найден ответ.

public void Update(object entity) 
{ 
    using (var _db = new MyEntities()) 
    {   
     _db.Entry(entity).State = System.Data.Entity.EntityState.Modified;    
     _db.SaveChanges(); 

    } 
} 
+3

это действительно «Получить столбец первичного ключа из dbSet в C#»? – dotctor