2015-09-24 6 views
0

Я пытаюсь создать новую миграцию для моего проекта, и я просто depared с неловкой ситуацией ... У меня есть совокупный корневой объект:EF Migration генерирует второй индекс для агрегатного PK

public class Classroom : Entity, IAggregateRoot 
{ 
    // PK 
    public int ClassroomId { get; set; } 

    // .... 
    public virtual ClassroomStreaming Streaming { get; set; } 
} 

и агрегат:

public class ClassroomStreaming : Entity 
{ 
    // PK 
    public int ClassroomId { get; set; } 
    public virtual Classroom Classroom { get; set; } 

    // Fields 
    public string EmbedCode { get; set; } 

    // ... 
} 

отображения являются:

public class ClassroomMap : EntityTypeConfiguration<Classroom> 
{ 
    public ClassroomMap() 
    { 
     this.HasKey(t => t.ClassroomId); 
     this.ToTable("Classroom"); 
     // .... 

     // One to One 
     this.HasOptional(t => t.Streaming) 
      .WithRequired(p => p.Classroom); 
    } 
} 

и:

public class ClassroomStreamingMap: EntityTypeConfiguration<ClassroomStreaming> 
{ 
    public ClassroomStreamingMap() 
    { 
     // Primary Key 
     this.HasKey(t => new { t.ClassroomId }); 

     // Table & Column Mappings 
     this.ToTable("ClassroomStreaming"); 

     this.Property(t => t.ClassroomId) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

     // Relationships 
     this.HasRequired(t => t.Classroom) 
      .WithOptional(p => p.Streaming) 
      .WillCascadeOnDelete(true); 
    } 
} 

Когда я произвожу миграцию, я получаю следующую ситуацию, в которой он создает PK и также не кластерный индекс для одной и той же колонки:

public override void Up() 
{ 
    CreateTable(
     "dbo.ClassroomStreaming", 
     c => new 
      { 
       ClassroomId = c.Int(nullable: false), 
       // .... 
      }) 
     .PrimaryKey(t => t.ClassroomId) 
     .ForeignKey("dbo.Classroom", t => t.ClassroomId, cascadeDelete: true) 
     .Index(t => t.ClassroomId); 
} 

ли это нормальное поведение? Посмотрите, как это в SQL Server:

Awkward

ответ

0

Похоже, у вас есть на основе «двойной отображенные» ваши отношения в двух EntityTypeConfiguration<T> классов. Я думаю, вам нужно только определить отношения в одном направлении.

В документации Entity Framework Fluent API указано, что для отношений «один-к-одному-одному» определите ее с помощью .HasOptional().WithRequired(), как вы это делали в ClassroomMap. Вы должны убрать .HasRequired().WithOptional() в классе ClassroomStreamingMap.