使用DbContext.FindBy不使用PK

时间:2013-04-09 20:17:51

标签: c#-4.0 entity-framework-5 dbcontext

目的: 我有一个名为Publication的表,其中包含Id,RecordId,EntityType和其他几列。我选择需要从该表发布到另一个数据库的所有记录。然后我循环该集合来处理记录并将记录移动到另一个数据库。

背景 EntityType列用于标识上下文需要检索的Set。我还使用反射来创建该类型的对象,以查看它是否实现了某种类型的接口。如果正在处理的记录确实实现了该接口,那么我知道Publication表中该记录的RecordId不是Set()中的PK而是FK。

当我处理不继承特定接口的EntityTypes的PK值时,此代码正常工作。

object authoringRecordVersion = PublishingFactory.AuthoringContext.Set(recordType.Entity.GetType()).Find(record.RecordId);

问题:

DbContext.Set(EntityType).Find(PK)在PrimaryKey值之后。我怎么能告诉Set()像这个sudo代码示例一样搜索,因为'Where'是不允许的

object authoringRecordVersion = PublishingFactory.AuthoringContext.Set(recordType.Entity.GetType()).Where(c => c.HeaderRecordId == record.RecordId)

更新

我正致力于实施以下内容。明天会告知结果

var sql = "SELECT * from " + record.Entity + " WHERE HeaderRecordId = '" + record.RecordId + "'";
authoringRecordVersion = PublishingFactory.AuthoringContext.Set(recordType.Entity.GetType()).SqlQuery(sql).AsNoTracking();

1 个答案:

答案 0 :(得分:0)

.SqlQuery(sql).AsNoTracking(); 

确实有效。不知道为什么我之前没有看到这个。