我想在没有先获取然后保存实体的情况下使用LLBLGen进行upmerge。 我已经发现有可能在没有首先获取实体的情况下进行更新,但后来我必须知道它已经存在。
更新条目的频率与插入新条目的频率相同。
是否有可能一步到位?
一步到位是否有意义?
事实:
答案 0 :(得分:1)
我知道我有点迟到了,但是我记得和LLBLGenPro一起工作时,它是完全有可能的,其中一个美女是可能的!
我没有我的样本,但我很确定你有一个名为UpdateEntitiesDirectly
的方法可以像这样使用:
// suppose we have Product and Order Entities
using (var daa = new DataAccessAdapter())
{
int numberOfUpdatedEntities =
daa.UpdateEntitiesDirectly(OrderFields.ProductId == 23 && OrderFields.Date > DateTime.Now.AddDays(-2));
}
当使用LLBLGenPro时,我们能够使用ORM框架完成所有可能的工作,这真是太棒了!
它还有一种方法可以执行名为DeleteEntitiesDirectly
的批量删除,在您需要删除etity并将其替换为另一个的场景中可能会有用。
希望这有用。
答案 1 :(得分:1)
我认为您可以使用EntityCollection实现您所需要的功能。首先通过DataAccessAdapter的FetchEntityCollection方法获取要更新的实体,然后在该集合中更改所需的任何内容,向其中插入新实体并使用DataAccessAdapter,SaveCollection方法保存它。这样就可以更新现有实体,并将新的实体插入数据库。例如,在您想要操纵指定产品订单的产品订单senario中,您可以使用以下内容:
int productId = 23;
var orders = new EntityCollection<OrderEntity>();
using (DataAccessAdapter daa = new DataAccessAdapter())
{
daa.FetchEntityCollection(orders, new RelationPredicateBucket(OrderFields.ProductId == productId))
foreach(var order in orders)
{
order.State = 1;
}
OrderEntity newOrder = new OrderEntity();
newOrder.ProductId == productId;
newOrder.State = 0;
orders.Add(newOrder);
daa.SaveEntityCollection(orders);
}
答案 2 :(得分:0)
据我所知,这是不可能的,也是不可能的。
如果您只是在未获取的实体上调用adapter.Save(entity),框架会认为它是新的。如果你考虑一下,框架怎么知道是发出UPDATE还是INSERT语句?无论如何,某些地方必须查询数据库以查看该行是否存在。
为单个实体(非递归)保存创建或多或少自动执行此操作的东西并不太难。步骤如下: