Проблему решил добавление атрибута [InverseProperty].
В итоге все выглядит так:
public class Message
{
public int Id { get; set; }
public string Text { get; set; }
public int CreatedById { get; set; }
public int ? UpdatedById { get; set; }
[InverseProperty("CreatedMessages")]
[ForeignKey("CreatedById")]
public virtual UserProfile CreatedBy { get; set; }
[InverseProperty("UpdatedMessages")]
[ForeignKey("UpdatedById")]
public virtual UserProfile UpdatedBy {get;set;}
}
public class UserProfile
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Message> CreatedMessages {get;set;}
public virtual ICollection<Message> UpdatedMessages {get;set;}
}