私はこれに対するさまざまな解決策を数時間試してきましたが、理解できません。システムでカスタム メンバーシップ プロバイダーを使用しているため、最初に次のようなコードを使用してロール テーブルを定義します。
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 です。木には木が見えない!!
どんなアイデアでも大歓迎です。