2012-11-03 3 views
0

저는 여러 시간 동안 여러 가지 해결책을 시도해 왔지만 지금은 이해할 수 없습니다. 이 모든 테이블복합 키가로드되지 않음 모든 관련 엔티티

public class UsersInRole 
{ 
    [Key] 
    public long UserId { get; set; } 

    [Required] 
    public UserProfile UserProfile { get; set; } 

    [Key] 
    public long RoleId { get; set; } 

    [Required] 
    public webpages_Role Role { get; set; } 
} 

때 내가 스크립트 아웃 올바른 것 :

CREATE TABLE [dbo].[UsersInRoles](
[UserId] [bigint] NOT NULL, 
[RoleId] [bigint] NOT NULL, 
CONSTRAINT [PK_dbo.UsersInRoles] PRIMARY KEY CLUSTERED 
(
[UserId] ASC, 
[RoleId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[UsersInRoles] WITH CHECK ADD CONSTRAINT [FK_dbo.UsersInRoles_dbo.UserProfile_UserId] FOREIGN KEY([UserId]) 
REFERENCES [dbo].[UserProfile] ([Id]) 
ON DELETE CASCADE 
GO 

ALTER TABLE [dbo].[UsersInRoles] CHECK CONSTRAINT [FK_dbo.UsersInRoles_dbo.UserProfile_UserId] 
GO 

ALTER TABLE [dbo].[UsersInRoles] WITH CHECK ADD CONSTRAINT [FK_dbo.UsersInRoles_dbo.Roles_RoleId] FOREIGN KEY([RoleId]) 
REFERENCES [dbo].[Roles] ([RoleId]) 
ON DELETE CASCADE 
GO 

ALTER TABLE [dbo].[UsersInRoles] CHECK CONSTRAINT [FK_dbo.UsersInRoles_dbo.Roles_RoleId] 
GO 

이상한 행동을 나는 그래서 역할 테이블은 다음과 같이 첫 번째 코드를 사용하여 정의가 시스템에서 사용자 지정 멤버 자격 공급자를 사용하고 있습니다 UserProfile 속성 만 채워집니다. 컨텍스트를 통해 직접 UsersInRole 객체를로드하면 동일한 동작이 나타납니다.

var userInRoles = context.UsersInRoles.ToList(); 

UserProfile 속성은로드되었지만 Role 속성은 항상 null입니다.

HasKey(compKey => new { compKey.UserId, compKey.RoleId }); 

나는 지금까지 내가이 잘 작동해야한다 말할 수있는 이상 확인하고 관계 이상 및했습니다

UsersInRole 엔티티 매핑이 복합 키가 있습니다. UserProfile id 필드는 Id이고 역할 ID 필드는 Relationship 상태로 RoleId입니다. 나는 지금 나무를위한 나무를 볼 수 없다!

모든 아이디어를 얻을 수 있습니다.

+0

만약 당신이 context.UsersInRoles.Include (ur => ur.UserProfile) .Include (ur => ur.Role) .ToList() 역할을 여전히 null입니까? – Mones

+0

정확한 방법을 찾을 수 없지만 이렇게했습니다 : 'context.UsersInRoles.Include ("UserProfile"). Include ("Role") .ToList(); 그리고 이제 Role 속성이 채워집니다! 그러나 UserProfile 개체는 프록시이지만 역할은 구체적인 개체입니다 ... – Jammer

+0

위의 메서드의 서명에 대해 System.Data.Entity 'using'절을 추가해야합니다. – Mones

답변

0

나는 Roles 객체 정의로 실수 한 것처럼 보입니다. 지금은이 역할에 외래 키 속성을 정의 할 고정과 같은 객체를 한 :

public class webpages_UsersInRole 
{ 
    public long UserId { get; set; } 

    public virtual UserProfile UserProfile { get; set; } 

    public long RoleId { get; set; } 

    [ForeignKey("RoleId")] 
    public virtual webpages_Role Role { get; set; } 
} 

이 클래스는 또한 같은 복합 키로 구성되어있다 : 여기에에서

HasKey(compKey => new { compKey.UserId, compKey.RoleId }); 

, 단지 사용자 프로필을로드 원하는대로 역할 개체가 올바르게 채워집니다.