title: EF multiple properties referencing same type
body: <p>I'm trying to link a list of subs and a main sub for a video object with cascade on delete.</p>
  
  <p>I found some pages explaining how to do this for 2 single objects to the same type. But not for a list and a single object.<br/>
  <a href="https://stackoverflow.com/questions/4429103/how-can-i-set-up-two-navigation-properties-of-the-same-type-in-entity-framework">How can I set up two navigation properties of the same type in Entity Framework</a></p>
  
  <p>Here is my code:</p>
  
  <pre class="lang-c# prettyprint-override"><code>using System.Collections.Generic;
  using System.Data.Entity;
  using System.Data.Entity.Infrastructure;
  
  namespace DataAccess
  {
      public class SimpleVideo
      {
          public string Name { get; set; }
          public int SimpleVideoId { get; set; }
          public virtual List&lt;Sub&gt; Subs { get; set; }
          public Sub MainSub { get; set; }
      }
  
      public class Sub
      {
          public int SubId { get; set; }
          public string Language { get; set; }
      }
  
      class VideoContext : DbContext
      {
          public DbSet&lt;SimpleVideo&gt; SimpleVideos { get; set; }
          public DbSet&lt;Sub&gt; Subs { get; set; }
  
          protected override void OnModelCreating(DbModelBuilder modelBuilder)
          {
              Database.SetInitializer(new DropCreateDatabaseAlways&lt;VideoContext&gt;());
  
              modelBuilder.Entity&lt;SimpleVideo&gt;().HasMany(v =&gt; v.Subs).WithOptional().WillCascadeOnDelete(true);
              modelBuilder.Entity&lt;SimpleVideo&gt;().HasOptional(v =&gt; v.MainSub).WithRequired().WillCascadeOnDelete(true);
  
              base.OnModelCreating(modelBuilder);
          }
      }
  }
  </code></pre>
  
  <p>I can't get this to work.
  when i enable just one of the modelBuilder lines, it works.
  How do i get both of them to work at the same time?</p>
  
  <pre><code>System.Data.SqlServerCe.SqlCeException was unhandled
    HResult=-2147467259
    Message=The referential relationship will result in a cyclical reference that is not allowed. [ Constraint name = FK_dbo.Subs_dbo.SimpleVideos_SubId ]
    Source=SQL Server Compact ADO.NET Data Provider
    ErrorCode=-2147467259
    NativeError=25083
    StackTrace:
         at System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr)
         at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommandText(IntPtr&amp; pCursor, Boolean&amp; isBaseTableCursor)
         at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options)
         at System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery()
         at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement)
         at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement)
         at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements)
         at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements)
         at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable`1 operations, Boolean downgrading, Boolean auto)
         at System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, XDocument sourceModel, XDocument targetModel, Boolean downgrading)
         at System.Data.Entity.Migrations.Infrastructure.MigratorBase.AutoMigrate(String migrationId, XDocument sourceModel, XDocument targetModel, Boolean downgrading)
         at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
         at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
         at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
         at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update()
         at System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func`3 createMigrator, ObjectContext objectContext)
         at System.Data.Entity.Internal.InternalContext.CreateDatabase(ObjectContext objectContext)
         at System.Data.Entity.Database.Create(Boolean skipExistsCheck)
         at System.Data.Entity.Database.Create()
         at System.Data.Entity.DropCreateDatabaseAlways`1.InitializeDatabase(TContext context)
         at System.Data.Entity.Database.&lt;&gt;c__DisplayClass2`1.&lt;SetInitializerInternal&gt;b__0(DbContext c)
         at System.Data.Entity.Internal.InternalContext.&lt;&gt;c__DisplayClass8.&lt;PerformDatabaseInitialization&gt;b__6()
         at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)
         at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
         at System.Data.Entity.Internal.LazyInternalContext.&lt;InitializeDatabase&gt;b__4(InternalContext c)
         at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input)
         at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action)
         at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
         at System.Data.Entity.Internal.InternalContext.Initialize()
         at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
         at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
         at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
         at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
         at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity)
         at System.Data.Entity.DbSet`1.Add(TEntity entity)
         at DataAccess.Program.Main() in c:\MMProject\TestProjects\DataAccess\Program.cs:line 63
         at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
         at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
         at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
         at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
         at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
         at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
         at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
         at System.Threading.ThreadHelper.ThreadStart()
    InnerException: 
  </code></pre>