从dbSet获取主键列

3

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

您能给我指个方向吗?

 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个回答

4

您可以通过以下方式找到实体的主键

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

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


我这里没有 YourEntity 类。我可以动态获取实体实例的类型:entity.GetType() - Vahagn
@Vahagn 你应该首先将你的方法泛型化。 - Gert Arnold
根据医生的建议,在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
这真的是指在C#中从dbSet获取主键列吗? - Hamid Pourjam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接