如何强制实体框架使用我的比较器

时间:2014-11-07 13:13:07

标签: c# entity-framework

我有以下问题。

我需要从数据库上下文项中删除相关对象。 (对象构建具有属性列表)

我有一个旧数据库对象的列表,就像这样创建:

List<Building> oldContext = db.Buildings.Include(o => o.Rooms).ToList();

然后是来自Web服务的新对象列表

List<Building> newContext = CallService();

然后我设置了两个变量 - 我想从db中删除的建筑物:

BuildingToDelete1 = oldContext.FirstOrDefault(o => new BuildingComparer().Equals(o, newContext[0]))

BuildingToDelete2 = newContext[0]

但是我这样做了:

db.Buildings.Attach(BuildingToDelete1);
db.Buildings.Remove(BuildingToDelete1);
db.SaveChanges();

它工作得很好......问题是当我尝试使用变量BuildingToDelete2做同样的事情时 - 它会抛出异常,但两个变量的内容几乎相同(例如ID不同)

我的问题是如何强制实体框架比较objecst和我的BuildingComparer()。

感谢您的回答

1 个答案:

答案 0 :(得分:0)

完全没有。 EF只能使用可以进入数据库的构造 - 即转换为LINQ。你的比较器不能。

在没有它们的情况下拉,然后切换到LINQ到对象 - 通过使EF查询AsEnumreable()。在您的流程中进行处理后,SQL转换要求不适用。