title: Proper method of navigation to generically-defined entity
body: <p><strong>New bounty 2017/10/31</strong></p>
  
  <p>The auto-accepted answer, unfortunately, does not work with my current entity model due to TPC limitations.  I am in dire need of finding a way to facilitate two-way navigation via interface or abstract class, so I am starting another bounty.</p>
  
  <p>Note that I must use existing model design, so refactoring is not an option.</p>
  
  <p><strong>Original question below</strong></p>
  
  <p>I have an parent entity that has a one-to-one relationship to multiple possible tables (FK is on child tables).  Because the navigation property to the child is defined by an interface, I have no navigation to the other end of the relationship.</p>
  
  <p>I understand that this is a natural limitation, but still seek a means to achieve two-way navigation while using abstract types or generics.  I've come across a number of questions similar to what I want to do, but they are either quite old or I don't think they are an exact match for what I am trying to achieve.  I seek a more current answer that's specific to my dilemma.</p>
  
  <p>This is my code and can easily be copied/pasted into a test app:</p>
  
  <p><strong>Edit</strong> (in response to Ivan Stoev's answer): When I tried implementing your solution, I got this error when trying to create migration:</p>
  
  <p><code>The association 'SoftwareApplicationData_CreatedBy' between entity types 'SoftwareApplicationData' and 'AppUser' is invalid. In a TPC hierarchy independent associations are only allowed on the most derived types.</code></p>
  
  <p>So it appears that I need to edit my original code to reflect the more complex model which I originally omitted for brevity. My apologies as I didn't think the additional code would be relevant until now.</p>
  
  <p>Notice that I made all entities now inherit from <code>MyEntity</code>.</p>
  
  <p><strong>End edit</strong></p>
  
  <pre><code>public abstract class MyEntity
  {
      public int Id { get; set; }
  
      public AppUser CreatedBy { get; set; }
  }
  
  public class AppUser : MyEntity { }
  
  public interface ISoftwareApplicationData
  {
      SoftwareApplicationBase Application { get; set; }
  }
  
  //Parent entity representing a system installation and the software installed on it.
  //The collection property is *not* the generic entity I mentioned earlier.
  public class SystemConfiguration : MyEntity
  {
      public ICollection&lt;SoftwareApplicationBase&gt; Applications { get; set; }
  }
  
  //Represents the software itself. Has other generic attributes that I've ommitted for brevity.
  //The Data property represents additional, application-specific attributes. I need to be able
  //to navigate from SoftwareApplicationBase to whatever may be on the other end
  public class SoftwareApplicationBase : MyEntity
  {
      public SystemConfiguration Configuration { get; set; }
  
      public string ApplicationName { get; set; }
  
      public ISoftwareApplicationData Data { get; set; }
  }
  
  //This is a generic, catch-all application class that follows a basic Application/Version
  //convention. Most software will use this class
  public class SoftwareApplication : MyEntity, ISoftwareApplicationData
  {
      public SoftwareApplicationBase Application { get; set; }
  
      public string Version { get; set; }
  }
  
  //Operating systems have special attributes, so they get their own class.
  public class OperatingSystem : MyEntity, ISoftwareApplicationData
  {
      public SoftwareApplicationBase Application { get; set; }
  
      public string Version { get; set; }
  
      public string ServicePack { get; set; }
  }
  
  //Yet another type of software with its own distinct attributes
  public class VideoGame : MyEntity, ISoftwareApplicationData
  {
      public SoftwareApplicationBase Application { get; set; }
  
      public string Publisher { get; set; }
  
      public string Genre { get; set; }
  }
  </code></pre>
  
  <p>One solution I have in mind is to create a method that will pass a GetById delegate to a collection of repos of entities that implement <code>ISoftwareApplicationData</code>.  I don't like the idea of doing a GetById within iterations, but there will probably only ever be five types for which I need to do this, so it's a tenable solution failing all else.</p>