/// <summary>
 /// Equality method between two objects of the same type.
 /// Because the Equals method is strongly typed by generic constraints,
 /// it is not necessary to test for the correct object type.
 /// For safety we just want to match on business key value - in this case the fields
 /// that cannot be different between the two objects if they are supposedly equal.
 /// </summary>
 /// <param name="obj">The other object of this type that we are testing equality with</param>
 /// <returns></returns>
 public virtual bool Equals(ApplicationInformation <TIdType> obj)
 {
     if (obj != null)
     {
         // Transient objects are not considered as equal
         if (IsTransient() && obj.IsTransient())
         {
             return(false);
         }
         else
         {
             // For safe equality we need to match on business key equality.
             // Base domain entities are functionally equal if their key and metadata and tags are equal.
             // Subclasses should extend to include their own enhanced equality checks, as required.
             if (TenantId != null)
             {
                 return(Id.Equals(obj.Id) &&
                        Culture.Equals(obj.Culture) &&
                        ApplicationKey.Equals(obj.ApplicationKey) &&
                        Name.Equals(obj.Name));
             }
             else
             {
                 return(Id.Equals(obj.Id) &&
                        Culture.Equals(obj.Culture) &&
                        ApplicationKey.Equals(obj.ApplicationKey) &&
                        Name.Equals(obj.Name) &&
                        TenantId.Equals(obj.TenantId));
             }
         }
     }
     return(false);
 }
 public LaunchPadApplication(int?tenantId) : base()
 {
     TenantId   = tenantId;
     AppInfo    = new ApplicationInformation <TIdType>(tenantId);
     TenantInfo = new List <TenantInformation <TIdType> >();
     Modules    = new List <Module <TIdType, TEntityIdType> >();
 }
 /// <summary>
 /// Comparison method between two objects of the same type, used for sorting.
 /// Because the CompareTo method is strongly typed by generic constraints,
 /// it is not necessary to test for the correct object type.
 /// </summary>
 /// <param name="other">The other object of this type we are comparing to</param>
 /// <returns></returns>
 public virtual int CompareTo(ApplicationInformation <TIdType> other)
 {
     return(other == null ? 1 : String.Compare(Name, other.Name, StringComparison.InvariantCulture));
 }
 public LaunchPadApplication(int?tenantId, TIdType id, string cultureName) : base(id, cultureName)
 {
     AppInfo    = new ApplicationInformation <TIdType>(tenantId);
     TenantInfo = new List <TenantInformation <TIdType> >();
     Modules    = new List <Module <TIdType, TEntityIdType> >();
 }