Entity Framework 4.1 Отображение отношений путем установки внешних ключей - PullRequest
2 голосов
/ 03 мая 2011

Как можно сказать кровавому Entity Framework отображать отношения с нужными столбцами!

У меня есть 1 таблица:

     public class ShedPart
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public int GroupId { get; set; }
        public int ParentGroupId { get; set; }
        public string GroupName { get; set; }           

        [ForeignKey("GroupId")]
        [InverseProperty("ParentGroupId")]
        public ICollection<Part> ParentParts { get; set; }
    }

Каждая часть может иметь несколько ParentParts ...

SQL генерируется так:

 SELECT
`Project1`.`Id`, 
`Project1`.`Name`, 
`Project1`.`GroupId`, 
`Project1`.`ParentGroupId`, 
`Project1`.`GroupName`,
`Project1`.`C1`, 
`Project1`.`Id1`, 
`Project1`.`Name1`, 
`Project1`.`GroupId1`, 
`Project1`.`ParentGroupId1`, 
`Project1`.`GroupName1`
FROM (SELECT
`Extent1`.`Id`, 
`Extent1`.`Name`, 
`Extent1`.`GroupId`, 
`Extent1`.`ParentGroupId`, 
`Extent1`.`GroupName`, 
`Extent2`.`Id` AS `Id1`, 
`Extent2`.`Name` AS `Name1`, 
`Extent2`.`GroupId` AS `GroupId1`, 
`Extent2`.`ParentGroupId` AS `ParentGroupId1`, 
`Extent2`.`GroupName` AS `GroupName1`
CASE WHEN (`Extent2`.`Id` IS  NULL) THEN (NULL)  ELSE (1) END AS `C1`
FROM `Parts` AS `Extent1` LEFT OUTER JOIN `Parts` AS `Extent2` ON `Extent1`.`Id` = `Extent2`.`GroupId`) AS `Project1`
 ORDER BY 
`Id` ASC, 
`C1` ASC}

Как вы можете видеть, это неправильно, так как это соединение таблиц с Id => GroupId, когда я пытаюсь присоединиться с помощью ParentGroupId => GroupId.

Итак, я пытаюсь это:

            modelBuilder.Entity<Part>()
            .HasMany(s => s.ParentParts)
            .WithMany()
            .Map(m =>
                     {
                         m.ToTable("parts");
                         m.MapLeftKey("GroupId");
                         m.MapRightKey("ParentGroupId");
                     });

Делает то же самое ..... Кажется, Entity Framework будет отображаться только в ключевой столбец! Как заставить это связать столбцы, которые я хочу?

1 Ответ

0 голосов
/ 03 мая 2011

Вы пытались извлечь

[Key]
public int GroupId { get; set; }        
public int ParentGroupId { get; set; } 

к групповой таблице, которая имеет самостоятельное соединение? таким образом, вы можете иметь свойство навигации для Part -> Group.

Группа

будет содержать набор частей и родительскую группу.

GroupId будет первичным ключом, и вы можете самостоятельно ссылаться на ParentGroupId

...