在我的代码中,我有几行代码,如下所示:
Insertions["sale"] = (modelEntities, entity) => modelEntities.AddToSale((Sale) entity);
当数据库中没有这样的实体时,它工作正常。但是我想更新实体已经在数据库中。它可以通过Find
方法和字段分配来完成,但我想保留一个漂亮的代码,并使用像构造函数或Insert-or-Update
初始化的东西。
我该怎么做?
答案 0 :(得分:1)
我个人认为用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);
}
}
}
如果你想要,你甚至可以通过从EF模型获取关键字段并对key
进行一些反思来分解entity
参数,但这可能会显着减慢过程。
请注意,此方法会忽略Attached
持久化对象:假设它将由其已属于的上下文保存。