Существуют многочисленные сообщения о поиске «не в», чтобы найти записи типа a, которые не имеют ассоциаций с типом записи b.
Я хочу расширить это в моем сценарии. У меня есть тип записи базы данных иТип записи обновления сервера с N: N между ними.(между базой данных и сервером есть N: N, но это не является частью этого запроса)
Я хочу найти все записи базы данных, которые еще не связаны с конкретным обновлением сервера, над которым я работаю.Мои попытки терпят неудачу, потому что база данных может быть связана с другими записями обновления сервера
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true" >
<entity name="dsg_databases" >
<attribute name="dsg_databasesid" />
<filter type="and" >
<condition entityname="ae" attribute="dsg_serverupgradeid" operator="neq" value="25dbe565-f435-e911-a976-000d3a2bcd97" />
</filter>
<link-entity name="dsg_dsg_serverupgrade_dsg_databases" from="dsg_databasesid" to="dsg_databasesid" link-type="outer" intersect="true" >
<link-entity name="dsg_serverupgrade" from="dsg_serverupgradeid" to="dsg_serverupgradeid" link-type="outer" alias="ae" />
</link-entity>
</entity>
</fetch>
Причина в том, что в плагине я затем связываю эти базы данных с записью обновления сервера, но получаю ошибку Cannot insert duplicate key
, если ониуже связаны.
Для справки, и в случае, если есть лучший способ, я беру коллекцию сущностей, возвращаемую FetchXML, преобразую в коллекцию EntityReferenceCollection ercDatabases
и использую service.Associate(targetEntity.LogicalName, targetEntity.Id, relationship, ercDatabases);
Редактировать - я пытаюсьчтобы не перебирать каждую возвращенную запись базы данных и проверять, связаны ли они.Я бы предпочел сделать это в одном запросе на производительность.