Get list from database in 3 layer model
Well, you were right to think you are wrong.  We shouldn't need to instantiate an object with an empty constructor to something like this.  This is exactly what the Shared keyword is for.

First, make your getAllPatientsInList function Shared:

Public Shared Function GetAllPatients() As List(Of Patient)
    ' method implementation
End Function


And now we can call the method without instantiating an instance of the class:

For Each item as Patient in Patient.GetAllPatients()
    ' do something with item
Next 


And once we've done this, arguably, we may want to eliminate the default, zero-argument constructor.