我有一些代碼,能夠檢索包含特定關係的所有實體,像這樣:如何使用LLBLGen Pro過濾出不是多對多關係的實體?
var bucket = new RelationPredicateBucket();
bucket.Relations.Add(MessageEntity.Relations.MessageTemplateReferenceEntityUsingMessageId);
var messageEntities = new EntityCollection<MessageEntity>();
using (var myAdapter = PersistenceLayer.GetDataAccessAdapter())
{
myAdapter.FetchEntityCollection(messageEntities, bucket);
}
的偉大工程。現在,我想要獲取Message表中沒有對應行的所有實體。也就是說,MessageEntity.Relations.MessageTemplateReferenceEntityUsingMessageId爲null/false /不存在。
這是一個驚人的黑客工具,我的一個隊友做,使這項工作在幾年前(上面的代碼中的實體集合是templatedMessages以下):
bucket.PredicateExpression.Add(MessageFields.Id
!= templatedMessages.Select(m =>
m.Id).ToArray());
這實際工作,直到最近,當數表中的模板消息增長超過2100年,並且該方法開始拋出以下異常:
傳入的表格數據流(TDS)遠程過程調用(RPC)協議流不正確。此RPC請求中提供的參數太多。最大值爲2100.
很明顯,將SQL傳遞給它應該避免的完整ID列表並不是非常有效。在LLBLGen中做這件事的最好方法是什麼?在SQL我會做這樣的事情:
SELECT m.* FROM Message m
WHERE NOT EXISTS (SELECT 1 FROM MessageTemplate mt WHERE mt.MessageID = m.ID)
我可以在LLBLGen中做到這一點?