目标: 我有一个名为 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();