我有一个Member
课程:
public class Member
{
// key
public Guid UserId { get; set; }
// some other fields
}
此外,我的aspnet_Users
表格中包含UserId
主列。
我们可以:
1)。将其他属性MembershipUser
添加到Member
对象,并通过调用Membership.GetUser(this.UserId)
方法获取其值。
我也添加了
context.Database.ExecuteSqlCommand("ALTER TABLE [dbo].[Members] WITH CHECK ADD CONSTRAINT [FK_Members_aspnet_Users] FOREIGN KEY([UserId]) REFERENCES [dbo].[aspnet_Users] ([UserId])");
使用DataContext.Seed()
方法,确保在没有Member
帐户的情况下无法添加aspnet_Users
。
2)。在OnModelCreating
中使用流畅的API。如果这是一个很好的案例如何正确映射它们?
什么是最好的选择?有什么想法吗?
答案 0 :(得分:1)
无论我如何避免它,我发现最好的方法是implement my own MembershipProvider并使用我的模型,而不是试图将我的模型卖进内置的会员提供商。
如果您要沿着另一条路线走下去,则必须将ASP.NET成员资格表映射到您的域,并从ASP_User类派生您的Member类(如果您想确保您创建的所有用户都是成员,则反之亦然) 。最后,我发现虽然预计会有更多的努力,但实现MembershipProvider更容易。
答案 1 :(得分:0)
你没有。不要对aspnet_ *表添加外键约束。这是一个麻烦的秘诀。成员资格是插件式系统,您必须将其视为黑盒子。
只需使用MembershipUser.ProviderUserKey查找表中的数据即可。像这样:
from m in Member where UserID == (Guid)Membership.GetUser().ProviderUserKey select t;