title: Code first migration adds addition field with underscore
body: <p>I have a database with two tables linked.  When I run the initial migration I am getting an additional <code>Analysis_Id</code> field added even though that is not in my model.</p>
  
  <p>My basic setup is that an Analysis will have a history of Checkouts over time (1 to many).  However at any one time it will only ever have 1 (represented by the CheckedOutById on Analysis table).</p>
  
  <pre><code>public class CheckOut
  {
      public int Id { get; set; }
  
      [ForeignKey("ByUser")]
      public int ByUserId { get; set; }        
      public virtual UserProfile ByUser { get; set; }
  
      public int AnalysisId { get; set; }
      [ForeignKey("AnalysisId")]
      public virtual Analysis Analysis { get; set; }
  
      public DateTime At { get; set; }
  }
  
  public class Analysis
  {
      public Analysis()
      {
          Revisions = new Collection&lt;AnalysisRevision&gt;();
      }
  
      public int Id { get; set; }
  
      public string Name { get; set; }
  
      public int SupplierSeasonId { get; set; }
      public virtual SupplierSeason SupplierSeason { get; set; }
  
      [ForeignKey("CheckedOutById")]
      public virtual CheckOut CheckedOutBy { get; set; }
      public int? CheckedOutById { get; set; }
  
      public DataState DataState { get; set; }
  
      public virtual ICollection&lt;CheckOut&gt; CheckOuts { get; set; } 
      public virtual ICollection&lt;AnalysisRevision&gt; Revisions { get; set; }
  
      [ForeignKey("SourceId")]
      public virtual AnalysisSource Source { get; set; }
      public int SourceId { get; set; }
  }
  </code></pre>
  
  <p>The generated migration</p>
  
  <pre><code>        CreateTable(
              "dbo.CheckOut",
              c =&gt; new
                  {
                      Id = c.Int(nullable: false, identity: true),
                      ByUserId = c.Int(nullable: false),
                      AnalysisId = c.Int(nullable: false),
                      At = c.DateTime(nullable: false),
                      Analysis_Id = c.Int(), // The rogue column
                  })
              .PrimaryKey(t =&gt; t.Id)
              .ForeignKey("dbo.Analysis", t =&gt; t.AnalysisId, cascadeDelete: true)
              .ForeignKey("dbo.UserProfile", t =&gt; t.ByUserId, cascadeDelete: true)
              .ForeignKey("dbo.Analysis", t =&gt; t.Analysis_Id)
              .Index(t =&gt; t.ByUserId)
              .Index(t =&gt; t.AnalysisId)
              .Index(t =&gt; t.Analysis_Id);
  </code></pre>
  
  <p>And the script for the Analysis table (Note the rogue Checkout_Id field)</p>
  
  <pre><code>                 CreateTable(
              "dbo.Analysis",
              c =&gt; new
                  {
                      Id = c.Int(nullable: false, identity: true),
                      Name = c.String(),
                      SupplierSeasonId = c.Int(nullable: false),
                      CheckedOutById = c.Int(),
                      DataState = c.Int(nullable: false),
                      SourceId = c.Int(nullable: false),
                  })
              .PrimaryKey(t =&gt; t.Id)
              .ForeignKey("dbo.SupplierSeason", t =&gt; t.SupplierSeasonId, cascadeDelete: true)
              .ForeignKey("dbo.CheckOut", t =&gt; t.CheckedOutById)
              .ForeignKey("dbo.AnalysisSource", t =&gt; t.SourceId, cascadeDelete: true)
              .Index(t =&gt; t.SupplierSeasonId)
              .Index(t =&gt; t.CheckedOutById)
              .Index(t =&gt; t.SourceId);
  </code></pre>