从dbSet获取主键列

时间:2014-12-08 08:44:28

标签: c# .net entity-framework dbset

我想编写一个函数,该函数接收任何Entity对象,并通过自动确定的主键查找当前值并更新它。

你能指点我的方向吗?

 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()

     }
}

这可能吗?

2 个答案:

答案 0 :(得分:4)

您可以找到像这样的实体的主键

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

然后使用反射来访问它们的值。

答案 1 :(得分:-2)

找到答案。

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

     }
 }