What is the difference between a property with a omitted setter and a property with a private setter?
public string Foo { get; private set; }
The private setter is - well - a private set method you can use from inside your class only.
private
The omitted setter makes the property readonly. So you can only set the value of this property in your constructor(s) or via a static initialization.
readonly