С этими строками:
where TRelationship : RelationshipBase<TNode>, new()
Вы не говорите, что TRelationship = RelationshipBase, но TRelationship наследует от RelationshipBase.
Но вы не можете незаметно преобразовать базовый класс в его потомка.
Итак, вам действительно нужно это:
List<TRelationship>
или
List<RelationshipBase<TNode>>
тебе этого достаточно?
Или, может быть, смотрите ваш код:
почему бы вам не изменить эту строку:
var r = new RelationshipBase<TNode>();
с:
var r = new TRelationship();
??
EDIT:
как сказал AakashM, я предполагал, что вы имели в виду TNode, а не TKey