EF一对一关系不会创建

时间:2015-10-14 05:42:44

标签: entity-framework one-to-one ef-fluent-api

我尝试使用EF和Fluent API创建一对一关系。

头等舱:

public class Game
{
    public int Id { get; set; }
    public Guid Token { get; set; }
    public string Player { get; set; }
    public virtual Field Field { get; set; }
    public virtual ICollection<Move> Moves { get; set; }
    public GameStatus Status { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime? EndTime { get; set; }
    public PlayerCode Winner { get; set; }

    public Game()
    {
        Status = GameStatus.NoteDone;
        StartTime = DateTime.UtcNow;
        Winner = PlayerCode.None;
        Field = new Field {Game = this};
        Token = Guid.NewGuid();
    }
}

Secong class:

public class Field : IEntity
{
    public int Id { get; set; }
    public virtual Game Game { get; set; }
    public string CellsString { get; set; }
}

并在上下文中配置关系

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Game>()
        .HasRequired<Field>(g => g.Field)
        .WithRequiredDependent(f => f.Game);
    base.OnModelCreating(modelBuilder);
}

但是在DB中没有创建这种关系之后。表看起来像这样

Created tables

我尝试了很多Fluent配置,但没有人适合我。哪里我搞错了?

1 个答案:

答案 0 :(得分:1)

如果您不希望将外键添加为实体类的属性,则可以指定外键的映射。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Game>()
        .HasRequired(g => g.Field)
        .WithRequiredPrincipal(f => f.Game)
        .Map(m => m.MapKey("GameId"));
}

您可能需要WithRequiredPrincipal,而不是WithRequiredDependent,因为您可能希望该外键位于Field表中。