У меня есть две сущности:Как иметь два различных навигационных свойств одного и того же другого типа объекта с использованием атрибутов
//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);
я не получаю ошибку, но я получаю подсчитывать 0 SlavePOsitions, когда оно должно быть 5, потому что в базе данных у меня есть 5 строк в таблице подробностей. Я могу подтвердить это, выполнив приведенный ниже код:
IEnumerable<SlavePositions> slavePositions= dbcontext.SlavePositions.Where(x=>x.MasterPositionId==1);
Я получаю пять SlavePosition.
Что должно быть правильным атрибутом для этого свойства коллекции?