Продолжая тему удаления неиспользуемого:
Как правильно удалить неиспользуемые и не найденные Data Extraction?
Database.DataLinkManager, насколько я понял, является только частью механизма.
Например, такой код превращает Data Extraction из Unreferenced в Unresolved, но не удаляет. Да и то это не всегда происходит.
[CommandMethod("rdx")]
public void RemoveDataExtractions()
{
Database db = HostApplicationServices.WorkingDatabase;
DataLinkManager dlm = db.DataLinkManager;
if (dlm == null)
return;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
int count = 0;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
ed.WriteMessage("Найдено {0} dataextraction", db.DataLinkManager.DataLinkCount);
foreach (var item in
db
.DataLinkManager
.GetDataLink().Cast<ObjectId>()
.Select(id => (DataLink)tr.GetObject(id, OpenMode.ForRead)))
{
ObjectIdCollection coll = item.GetTargets();
if (coll.Count == 0)
{
db.DataLinkManager.RemoveDataLink(item.ObjectId);
count++;
}
}
tr.Commit();
}
ed.WriteMessage("\nУдалено {0} dataextraction", count);
}
db.Purge() по DataLinkDictionaryId тоже даёт неправильные результаты.