C# 4.0 使用DbContext.FindBy时不使用PK
目标: 我有一个名为Publication的表,其中包含Id、RecordId、EntityType和其他几列。我从该表中选择所有需要发布到另一个数据库的记录。然后,我循环该集合以处理记录并将记录移动到另一个数据库 背景: EntityType列用于标识上下文需要检索的集合。我还使用反射来创建该类型的对象,以查看它是否实现了某种类型的接口。如果正在处理的记录实现了该接口,那么我知道发布表中该记录的RecordId不是Set()中的PK,而是FK 当我在查找不继承特定接口的EntityTypes的PK值时,此代码工作正常C# 4.0 使用DbContext.FindBy时不使用PK,c#-4.0,entity-framework-5,dbcontext,C# 4.0,Entity Framework 5,Dbcontext,目标: 我有一个名为Publication的表,其中包含Id、RecordId、EntityType和其他几列。我从该表中选择所有需要发布到另一个数据库的记录。然后,我循环该集合以处理记录并将记录移动到另一个数据库 背景: EntityType列用于标识上下文需要检索的集合。我还使用反射来创建该类型的对象,以查看它是否实现了某种类型的接口。如果正在处理的记录实现了该接口,那么我知道发布表中该记录的RecordId不是Set()中的PK,而是FK 当我在查找不继承特定接口的EntityTypes的
object authoringRecordVersion = PublishingFactory.AuthoringContext.Set(recordType.Entity.GetType()).Find(record.RecordId);
问题:
DbContext.Set(EntityType).Find(PK)在PrimaryKey值之后。既然不允许使用“Where”,我如何告诉Set()像这个sudo代码示例那样搜索
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();
确实有效。不知道为什么我没早点看到
.SqlQuery(sql).AsNoTracking();