Entity framework 实体框架代码首先不拉导航属性

Entity framework 实体框架代码首先不拉导航属性,entity-framework,ef-code-first,Entity Framework,Ef Code First,我有一个导航属性未加载的问题。我对所有其他实体都有相同的设置,但这使用的属性不是自然的FK(数字)并且不会层叠,它将由触发器处理 Expression<Func<DivisionBracketGameParticipant, object>>[] includes2 = { q => q.Div

我有一个导航属性未加载的问题。我对所有其他实体都有相同的设置,但这使用的属性不是自然的FK(数字)并且不会层叠,它将由触发器处理

Expression<Func<DivisionBracketGameParticipant, object>>[] includes2 = {
                                                                                       q => q.DivisionWinnerBracketGame,
                                                                                       q => q.DivisionLoserBracketGame
                                                                                   };
            var test = _divisionBracketGameParticipantsRepository.GetMany(includes2,
                                                                      q =>
                                                                      q.DivisionBracketGame.DivisionBracket.Division.
                                                                          EventId == eventId);
实体

[Table("DivisionBracketGame", Schema = "GrassrootsHoops")]
    public class DivisionBracketGame : BaseEntity
    {
        public int Id{ get; set; }
        public int Number { get; set; }

        [InverseProperty("DivisionBracketGame")]
        public virtual ICollection<DivisionBracketGameParticipant> DivisionBracketGameParticipants { get; set; }

        [InverseProperty("DivisionWinnerBracketGame")]
        public virtual ICollection<DivisionBracketGameParticipant> DivisionWinnerBracketGameParticipants { get; set; }

        [InverseProperty("DivisionLoserBracketGame")]
        public virtual ICollection<DivisionBracketGameParticipant> DivisionLoserBracketGameParticipants { get; set; }
    }

[Table("DivisionBracketGameParticipant", Schema = "GrassrootsHoops")]
public class DivisionBracketGameParticipant : BaseEntity
    {
        public int Id{ get; set; }
        public virtual int DivisionBracketGameId { get; set; }
        public virtual int? DivisionWinnerBracketGameNumber { get; set; }
        public virtual int? DivisionLoserBracketGameNumber { get; set; }

        [ForeignKey("DivisionBracketGameId")]
        public virtual DivisionBracketGame DivisionBracketGame { get; set; }

        [ForeignKey("DivisionWinnerBracketGameNumber")]
        public virtual DivisionBracketGame DivisionWinnerBracketGame { get; set; }

        [ForeignKey("DivisionLoserBracketGameNumber")]
        public virtual DivisionBracketGame DivisionLoserBracketGame { get; set; }
    }
[表(“DivisionBracketGame”,Schema=“GrassrootsHoops”)]
公共类BracketGame:BaseEntity
{
公共int Id{get;set;}
公共整数{get;set;}
[反向属性(“分割括号游戏”)]
公共虚拟ICollection分区BracketGameParticipants{get;set;}
[反向属性(“部门WinnerBracketName”)]
公共虚拟ICollection分区WinnerBracketGameParticipants{get;set;}
[反向财产(“部门损失资产”)]
公共虚拟ICollection分区LoserbracketgameParticipants{get;set;}
}
[表(“DivisionBracketGameParticipant”,Schema=“GrassrootsHoops”)]
公共类DivisionBracketGameParticipant:BaseEntity
{
公共int Id{get;set;}
公共虚拟int DivisionBracketGameId{get;set;}
公共虚拟整数?分区WinnerBracketGamenumber{get;set;}
公共虚拟整数?DivisionLoserBracketGameNumber{get;set;}
[ForeignKey(“DivisionBracketGameId”)]
公共虚拟分区BracketGame分区BracketGame{get;set;}
[外键(“部门WinnerBracketGamenumber”)]
公共虚拟分区BracketGame分区WinnerBracketName{get;set;}
[外键(“部门代码”)]
公共虚拟分区BracketGame分区LoserBracketName{get;set;}
}

EF不会创建与编号的关系,因为它不是主键。主键是您的
division bracketGame
Id
,因此
division WinnerBracketName
division LoserBracketName
都以
Id
为目标(而不是
Number

一对多关系要求主体表中的列是唯一的-在您的情况下,该列应该是一个
数字
。在数据库中,可以使用主体表中的主键,也可以对该列使用唯一索引。EF不支持唯一索引/候选键,因此在EF中构建一对多关系的唯一方法是通过主体表的主键


FK值用于获取相关值,因此目前它可能会查找具有错误值的记录,因为它使用了错误的列。

即使我明确告诉它外键是什么?您可以告诉EF什么属性是导航属性的外键,但不能告诉EF没有针对中的主键定义关系principal table.Ladislav,我能从您的语句中推断出导航属性将只为指向主键的外键而不是唯一键生成吗?我问这个。
[Table("DivisionBracketGame", Schema = "GrassrootsHoops")]
    public class DivisionBracketGame : BaseEntity
    {
        public int Id{ get; set; }
        public int Number { get; set; }

        [InverseProperty("DivisionBracketGame")]
        public virtual ICollection<DivisionBracketGameParticipant> DivisionBracketGameParticipants { get; set; }

        [InverseProperty("DivisionWinnerBracketGame")]
        public virtual ICollection<DivisionBracketGameParticipant> DivisionWinnerBracketGameParticipants { get; set; }

        [InverseProperty("DivisionLoserBracketGame")]
        public virtual ICollection<DivisionBracketGameParticipant> DivisionLoserBracketGameParticipants { get; set; }
    }

[Table("DivisionBracketGameParticipant", Schema = "GrassrootsHoops")]
public class DivisionBracketGameParticipant : BaseEntity
    {
        public int Id{ get; set; }
        public virtual int DivisionBracketGameId { get; set; }
        public virtual int? DivisionWinnerBracketGameNumber { get; set; }
        public virtual int? DivisionLoserBracketGameNumber { get; set; }

        [ForeignKey("DivisionBracketGameId")]
        public virtual DivisionBracketGame DivisionBracketGame { get; set; }

        [ForeignKey("DivisionWinnerBracketGameNumber")]
        public virtual DivisionBracketGame DivisionWinnerBracketGame { get; set; }

        [ForeignKey("DivisionLoserBracketGameNumber")]
        public virtual DivisionBracketGame DivisionLoserBracketGame { get; set; }
    }