在我的代码中,我有几行代码,如下所示:
Insertions["sale"] = (modelEntities, entity) => modelEntities.AddToSale((Sale) entity);
当数据库中没有这样的实体时,它工作正常。但是我想在实体已经在数据库中时更新它。它可以通过Find
方法和字段分配来完成,但我想保留一个漂亮的代码并使用构造函数或Insert-or-Update
.
我怎样才能做到这一点?
在我的代码中,我有几行代码,如下所示:
Insertions["sale"] = (modelEntities, entity) => modelEntities.AddToSale((Sale) entity);
当数据库中没有这样的实体时,它工作正常。但是我想在实体已经在数据库中时更新它。它可以通过Find
方法和字段分配来完成,但我想保留一个漂亮的代码并使用构造函数或Insert-or-Update
.
我怎样才能做到这一点?
我个人认为用 add/insert 方法委托构建字典是没有用的。这是很多重复的代码。上下文具有插入或更新任何实体对象的通用方法。您甚至可以创建一种方法,例如(基于ObjectContext
):
public static void Upsert<T>(this ObjectContext context, T entity, int key)
where T : EntityObject
{
if (entity != null)
{
ObjectSet<T> objectSet = context.CreateObjectSet<T>();
if (key > 0)
{
if (entity.EntityState == EntityState.Detached)
{
objectSet.Attach(entity);
context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
}
}
else
{
objectSet.AddObject(entity);
}
}
}
如果您愿意,您甚至可以key
通过从 EF 模型中获取关键字段并对entity
.
请注意,Attached
此方法会忽略持久对象:假定它将由其已属于的上下文保存。