通过流畅的API实现一对一或零关系

时间:2014-02-13 12:58:37

标签: c# entity-framework ef-code-first entity-relationship fluent

我想用流畅的api定义以下模型。

enter image description here

所以我写了这个模型

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关系一样。

0 个答案:

没有答案