Я подозреваю, что при открытии BlockReference открывается и соответствующая ему BlockTableRecord для чтения каких-то данных для BlockReference. И как раз на этом и происходит сбой.
Правильно подозреваешь. И возможно причина вылетов в этом.
Как писал ранее Александр Ривилис:
Кстати, BlockReference.Name открывает соответствующий BlockTableRecord и уже оттуда берёт Name.
Недавно наткнулся, что BlockReference.Name работает, если существует тот самый BlockTableRecord, а если имя брать неоткуда, то происходит вылет.
Возможно ты расчленяешь свои объекты, добавляешь в базу данных и запрашиваешь имя в одной транзакции. Возможно надо поэтапно, и возможно не только Name.
Для того, чтобы не было вылетов, при запросе имени не используй BlockReference.Name напрямую, попробуй такой подход для обхода и поиска проблемы:
ObjectId idRef = br.BlockTableRecord;//ну или AnonymousBlockTableRecord, DynamicBlockTableRecord смотря что надо
if (idRef.IsValid)
{
BlockTableRecord block = tr.GetObject(idRef, OpenMode.ForRead) as BlockTableRecord;
if (block != null)
{
string name = block.Name;
}
}