1

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

背景: EntityType 列用于标识上下文需要检索的 Set。我还使用反射来创建该类型的对象,以查看它是否实现了某种类型的接口。如果正在处理的记录确实实现了该接口,那么我知道发布表中该记录的 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();
4

1 回答 1

0
.SqlQuery(sql).AsNoTracking(); 

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

于 2013-04-10T18:34:28.080 回答