Bidirectional 1-1 relation

The bidirectional relationship between a Person and its PhoneNumbers clearly is an 1:m relationship, as indicated by the PhoneNumbers property's type – ObjectList<PhoneNumber>. Bidirectional 1:1 relationships are declared more or less in the same way, with one important difference. You must specify which of the two ends , or tables, holds the foreign key. Here is a 1:1 relationship between a company and its president. Note the ContainsKey parameter in the Company's [ DBBidirectionalRelation ] attribute:

public class Company : DomainObject 
{
  // The 'Company' table will hold the foreign key
  [DBBidirectionalRelation ("PresidentOf", ContainsKey = true)]
  [Mandatory]
  public virtual Person President { get; set; } 
} 

public class Person : DomainObject 
{
  [DBBidirectionalRelation ("President")]
  [Mandatory]
  public virtual Company PresidentOf { get; set; } 
}