1

我有两张表要加入游戏和详细信息。游戏有一个细节

问题是我无法正确绑定表格。我得到的错误是

“实体类型‘游戏’和‘详细信息’不能共享表‘详细信息’,因为它们不在同一类型层次结构中,或者它们之间没有有效的一对一外键关系和匹配的主键。”

这是我的实现

public class Game
{
    [Key]
    [ForeignKey("GameDetails")]
    public int GameId { get; set; }

    public string GameName { get; set; }

    //Navigation prop
    public virtual Details GameDetails { get; set; }
    public virtual ICollection<Details> DetailsId { get; set; }
}

public class Details
{
    [Key]
    public int DetailsId { get; set; }

    public int GameId { get; set; }
    public int RatingId { get; set; }

    public int Grade { get; set; }

    //Navigation prop
    [ForeignKey("DetailsId")]
    public virtual Game GameDetails { get; set; }
    public virtual RatingCompany RatingCompany { get; set; }
}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Game>().HasKey(f => f.GameId);
        modelBuilder.Entity<Game>()
            .Map(m =>
                     {
                         m.Properties(b => new {b.GameId});
                         m.ToTable("Details");
                     });
    }

我怎样才能正确地将它与 1-1 关系绑定?

4

3 回答 3

0

您不应该使用Map来配置一对一的关系。请改用 fluent API 的关系方法。

看看http://msdn.microsoft.com/en-us/data/jj591620.aspx#RequiredToRequired

于 2013-04-21T10:06:33.200 回答
0

如果你覆盖 OnModelCreating 你不应该有属性属性。

于 2013-04-21T11:23:04.960 回答
0

好的,您也可以使用数据注释属性来做到这一点:

  • 首先你不需要在两个实体中指定外键,你只需要在依赖实体中指定它。
  • 同样在 Principal 类中,即使您想引用它,也不需要存储依赖实体的 id。
  • 此外,由于它是 1-1 关系,因此您不需要此行: public virtual ICollection DetailsId { get; 放; }
    • 从您所说的来看,Game 是主要实体,Detail 是依赖实体。

代码可能如下所示:

public class Game
{
    [Key]
    public int GameId { get; set; }

    public string GameName { get; set; }

    //Navigation prop
    public virtual Details GameDetails { get; set; }
}

public class Details
{
   [Key]
   [ForeignKey("Game")]
   public int GameId { get; set; }

   public int RatingId { get; set; }

   public int Grade { get; set; }

   //Navigation prop
   public virtual Game Game{ get; set; }
   public virtual RatingCompany RatingCompany { get; set; }
}
于 2014-06-15T17:42:24.193 回答