目的: 我有一个名为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();
答案 0 :(得分:0)
.SqlQuery(sql).AsNoTracking();
确实有效。不知道为什么我之前没有看到这个。