我想用流畅的api定义以下模型。
所以我写了这个模型
public class Entity1
{
public int Id { get; set; }
public virtual Entity2 Entity2 { get; set; }
}
public class Entity2
{
public int Id { get; set; }
public virtual Entity1 Entity1 { get; set; }
}
这个映射
public class Entity1Map : EntityTypeConfiguration<Entity1>
{
public Entity1Map()
{
// Primary Key
this.HasKey(t => t.Id);
// Properties
// Table & Column Mappings
this.ToTable("Entity1");
this.Property(t => t.Id).HasColumnName("Id");
}
}
public class Entity2Map : EntityTypeConfiguration<Entity2>
{
public Entity2Map()
{
// Primary Key
this.HasKey(t => t.Id);
// Properties
// Table & Column Mappings
this.ToTable("Entity2");
this.Property(t => t.Id).HasColumnName("Id");
// Relationships
this.HasRequired(t => t.Entity1)
.WithOptional(t => t.Entity2);
}
}
非常直接。然后,我使用Add-Migration
命令生成迁移。
这是我感到困惑的地方。导致生成的表看起来不像我预期的那样。
CreateTable(
"dbo.Entity1",
c => new
{
Id = c.Int(nullable: false, identity: true),
})
.PrimaryKey(t => t.Id);
CreateTable(
"dbo.Entity2",
c => new
{
Id = c.Int(nullable: false),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.Entity1", t => t.Id)
.Index(t => t.Id);
首先,我希望Entity1中有一个可以为空的外键。但是这个.ForeignKey("dbo.Entity1", t => t.Id)
对我来说没什么意义,它用Entity1
从它自己的表中定义Id
的外键。这不是一个自我引用吗?
另一个问题是我似乎无法将.HasForeignKey()
放在关系上。如果我想在模型中表示外键,就像它与One-to-Many关系一样。