2015-10-14 123 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因爲你可能需要外鍵是在現場表。