Sql server EF迁移正在为聚合PK生成第二个索引
我正试图为我的项目创建一个新的迁移,但我遇到了一个尴尬的局面。。。我有我的聚合根实体:Sql server EF迁移正在为聚合PK生成第二个索引,sql-server,entity-framework,entity-framework-6,Sql Server,Entity Framework,Entity Framework 6,我正试图为我的项目创建一个新的迁移,但我遇到了一个尴尬的局面。。。我有我的聚合根实体: public class Classroom : Entity, IAggregateRoot { // PK public int ClassroomId { get; set; } // .... public virtual ClassroomStreaming Streaming { get; set; } } 及合计: public class Classroom
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);
}
}
这是正常的行为吗?看看它在SQL Server中的表现:
看起来您在两个EntityTypeConfiguration类中双重映射了您的关系。我认为你只需要在一个方向上定义关系 文档说明,对于一对零或一关系,请使用.HasOptional.WithRequired定义它,就像您在ClassroomMap中所做的那样。您应该能够删除ClassroomStreamingMap类中的.HasRequired.WithOptional
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);
}
}
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);
}