А если попробовать так?
public class Payment
{
[Key]
public int doc_number{ get; set; }
public int? parrent_doc_number{ get; set; }
public virtual Payment parrent { get; set; }
или
public virtual Payment parrent_ { get; set; }
public virtual ICollection ChildPayments { get; set; }
}
Как я помню, EF сперва ищет navigation property основываясь на имени типа и его pk
если не находит соответствия то смотрит на имя поля и опять же pk
в обоих случаях он соединяет имя navigation property и имя pk либо слитно, либо через нижнюю подчеркивающую черту...