2012-11-03 26 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屬性始終爲空。

的UsersInRole實體具有映射該組合鍵:

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

我檢查了一遍又一遍的關係,據我可以告訴這應該是工作的罰款。 UserProfile id字段是Id,角色id字段是RoleId作爲關係狀態。現在我看不到樹木了!

任何想法,將不勝感激。

+0

如果你context.UsersInRoles.Include(UR => ur.UserProfile).INCLUDE(UR => ur.Role).ToList()是角色還是空? – Mones

+0

我找不到你所提到的具體方法,但我這樣做:'context.UsersInRoles.Include(「用戶配置」)包括(「角色」)ToList();現在填充'和角色屬性。!但是,用戶配置對象是代理,但作用是一個具體的對象... – Jammer

+0

對於方法的簽名我使用上面必須添加System.Data.Entity的「使用」的條款。 – Mones

回答

0

好像我犯了一個錯誤與角色對象定義。我現在已經解決了這個被定義的角色,一個外鍵的屬性對象,如:

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 }); 

從這裏就可以了,只是加載用戶配置現在可以根據需要正確填充角色對象。

相關問題