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 です。

UsersInRole エンティティには、次の複合キーがマップされています。

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

私は関係を何度もチェックしましたが、私が知る限り、これはうまくいくはずです. 関係の状態として、UserProfile id フィールドは Id で、ロール ID フィールドは RoleId です。木には木が見えない!!

どんなアイデアでも大歓迎です。

4

1 に答える 1