title: Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths
body: <p>I've looked around on this one and I thought I had done everything I needed to so as to fix this issue. Apparently not though.</p>
  
  <p>Basically I have a country, region, destination. Every region must belong to a country. Every destination must belong to a country. A destination MAY belong to a region.</p>
  
  <p>Country > region > destination
  or
  Country > destination</p>
  
  <p>When my code first thing creates the database I get the infamous:</p>
  
  <p>Introducing FOREIGN KEY constraint 'FK_Destinations_DestinationRegions_DestinationRegionID' on table 'Destinations' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
  Could not create constraint. See previous errors.</p>
  
  <p>This is all done using EF Code First.</p>
  
  <p>I have a Country class:</p>
  
  <pre><code>public class DestinationCountry
  {
      public int ID { get; set; }
      public bool Active { get; set; }
      [Required(ErrorMessage=" ")]
      [DisplayName("Country")]
      public string Name { get; set; }
  }
  </code></pre>
  
  <p>And a map:</p>
  
  <pre><code>public class DestinationCountryMap : EntityTypeConfiguration&lt;DestinationCountry&gt;
  {
      public DestinationCountryMap()
      {
          // Primary Key
          this.HasKey(t =&gt; t.ID);
  
          // Properties
          this.Property(t =&gt; t.Name)
              .IsRequired()
              .HasMaxLength(256);
  
          this.ToTable("DestinationCountry");
          this.Property(t =&gt; t.ID).HasColumnName("ID");
      }
  }
  </code></pre>
  
  <p>I have a region class:</p>
  
  <pre><code>public class DestinationRegion
  {
  
      public int ID { get; set; }
      [Required(ErrorMessage = " ")]
      [DisplayName("Country")]
      public int DestinationCountryID { get; set; }
      public string Name { get; set; }
      public virtual DestinationCountry DestinationCountry { get; set; }
  }
  </code></pre>
  
  <p>And a map:</p>
  
  <pre><code>public class DestinationRegionMap : EntityTypeConfiguration&lt;DestinationRegion&gt;
  {
      public DestinationRegionMap()
      {
          // Primary Key
          this.HasKey(t =&gt; t.ID);
  
          // Properties
          this.Property(t =&gt; t.Name)
              .IsRequired()
              .HasMaxLength(256);
  
          this.ToTable("DestinationRegion");
          this.Property(t =&gt; t.ID).HasColumnName("ID");
          this.Property(t =&gt; t.DestinationCountryID).HasColumnName("DestinationCountryID");
  
          // Relationships
          this.HasRequired(t =&gt; t.DestinationCountry)
              .WithRequiredPrincipal()
              .WillCascadeOnDelete(false);
  
      }
  }
  </code></pre>
  
  <p>I have a destination class:</p>
  
  <pre><code>public class Destination
  {
  
      public int ID { get; set; }
      [Required(ErrorMessage = " ")]
      [DisplayName("Country")]
      public int DestinationCountryID { get; set; }
      public int DestinationRegionID { get; set; }
      public string Name { get; set; }
      public virtual DestinationCountry DestinationCountry { get; set; }
      public virtual DestinationRegion DestinationRegion { get; set; }
  }
  </code></pre>
  
  <p>And a map:</p>
  
  <pre><code>public class DestinationMap : EntityTypeConfiguration&lt;Destination&gt;
  {
      public DestinationMap()
      {
          // Primary Key
          this.HasKey(t =&gt; t.ID);
  
          // Properties
          this.Property(t =&gt; t.Name)
              .IsRequired()
              .HasMaxLength(256);
  
          this.ToTable("Destination");
          this.Property(t =&gt; t.ID).HasColumnName("ID");
          this.Property(t =&gt; t.DestinationCountryID).HasColumnName("DestinationCountryID");
          this.Property(t =&gt; t.DestinationRegionID).HasColumnName("DestinationRegionID");
          this.Property(t =&gt; t.Name).HasColumnName("Name");
  
          // Relationships
          this.HasRequired(t =&gt; t.DestinationCountry)
              .WithRequiredPrincipal()
              .WillCascadeOnDelete(false);
  
          this.HasOptional(t =&gt; t.DestinationRegion)
              .WithOptionalPrincipal()
              .WillCascadeOnDelete(false);
      }
  }
  </code></pre>
  
  <p>Could someone please tell me how I am doing this wrong.</p>