// create object from entity protected internal virtual TObject CreateBusinessObject <TObject, TEntry, TKey>(BusinessObjectFactory <TObject, TEntry, TKey> factory, TEntry entry) where TObject : BusinessObject <TEntry, TKey> where TEntry : class { if (factory is null) { throw new ArgumentNullException(nameof(factory)); } if (entry is null) { throw new ArgumentNullException(nameof(entry)); } return((TObject)_entries.GetOrAdd(entry, k => factory.CreateInstance(this, entry))); }