Я хочу определить следующую модель с помощью свободного 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()
в отношение. На случай, если я захочу, чтобы внешний ключ был представлен в модели, как это делается с отношениями «один ко многим».