EF Code First 4.1:如何将Member.UserId映射到aspnet_Users.UserId?

时间:2011-12-19 15:23:06

标签: asp.net-mvc asp.net-membership ef-code-first

我有一个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。如果这是一个很好的案例如何正确映射它们?

什么是最好的选择?有什么想法吗?

2 个答案:

答案 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;