我有两个实体具有相同的另一实体类型的两个不同的导航性能:如何使用属性
//The master table/entity
[TABLE("POSITIONS")]
public class Position{
[Key,Column("POSITIONID")]
public int PositionId{get;set;}
[Column("POSITIONNAME")]
public string PositionName{get;set;}
}
//The detail table/entity
[TABLE("SLAVE_POSITIONS")]
public class SlavePosition{
[Key,Column("MASTERPOSID",Order=0)]
public int MasterPosId{get;set;}
[KEY,Column("SLAVEPOSID",Order=1)]
public string SlavePosId{get;set;}
[ForeignKey("MasterPosId")]
public virtual Position MasterPosition {get;set;}
[ForeignKey("SlavePosId")]
public virtual Position SlavePosition {get;set;}
}
在SlavePosition,你可以看到,有两列在此实体是FK关系与位置。这种布局效果很好。现在,我还需要在此集合属性添加到位置的实体:
public virtual ICollection<SlavePosition> SlavePositions{get;set;}
但很显然,EF会很困惑,我得到{"ORA-00904: \"Extent1\".\"Position_PositionId\": invalid identifier"}
错误。 我若这样的:
[ForeignKey("SlavePositionId")]
public virtual ICollection<SlavePosition> SlavePositions { get; set; }
,然后取出用PositionId = 1这样的位置:
Position pos= dbContext.Positions.SingleOrDefault(x=>x.PositionId==1);
我没有错误,但我得到SlavePOsitions数0,当它应该是5因为在数据库中,我在细节表中有5行。我可以通过运行下面的代码来确认这一点:
IEnumerable<SlavePositions> slavePositions= dbcontext.SlavePositions.Where(x=>x.MasterPositionId==1);
我送五个SlavePosition。
该集合属性的正确属性是什么?