2015-10-14 108 views
0

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

第一类:

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类:

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

我尝试流利配置许多变化,但没有人对我的作品。我在哪里犯错?

+0

我已经问过在1-1所需的关系之前,它也使用表的主键作为外键。你是否检查过表格上的实际约束,而不仅仅是列? – Vlad274

+0

@ Vlad274谢谢,我检查我的约束,看到EF使用PK作为FK –

回答

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因为你可能需要外键是在现场表。