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

Asp.net mvc EF Code First 4.1:如何将Member.UserId映射到aspnet_Users.UserId?,asp.net-mvc,asp.net-membership,ef-code-first,Asp.net Mvc,Asp.net Membership,Ef Code First,我有一个会员班级: public class Member { // key public Guid UserId { get; set; } // some other fields } 我还有一个aspnet\u Users表,其中包含UserId主列 我们可以: 1) 。将附加属性MembershipUser添加到Member对象中,并通过调用Membership.GetUser(this.UserId)方法获取其值 我还补充说 context.Databas

我有一个
会员
班级:

public class Member
{
    // key 
    public Guid UserId { get; set; }

    // some other fields
}
我还有一个
aspnet\u 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()
方法,以确保在没有
aspnet\u用户
帐户的情况下无法添加
成员

2) 。在模型创建中使用fluent API。如果这是一个很好的例子,如何正确地映射它们


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

无论我如何试图避免它,我发现最好的方法是让它使用我的模型,而不是试图将我的模型硬塞进内置的成员资格提供程序中


如果要走另一条路线,则必须将ASP.NET成员资格表映射到域,并从ASP_用户类派生成员类(如果要确保创建的所有用户都是成员,则反之亦然)。最后,我发现,尽管前面看起来需要更多的努力,但实现MembershipProvider是更容易的方法。

你不需要。不要对aspnet_*表添加外键约束。这是制造麻烦的方法。成员资格是插件式系统,您必须将其视为黑盒

只需使用MembershipUser.ProviderUserKey作为值查找表中的数据即可。大概是这样的:

from m in Member where UserID == (Guid)Membership.GetUser().ProviderUserKey select t;

在ASP.Net成员资格表中添加这样的引用约束时要小心。因为现在,当您向成员表添加用户时,您必须知道要添加的ASPNet成员。您不希望使用EF从ASPNet成员资格表中插入/更新/删除。这最终会造成一些困难。此外,理想情况下,这将是一对一的关系。但是你会在一个我认为不是你的主键的领域之外建立关系。谢谢你的提及。我认为应该是一对一的关系,用户ID应该是关键。这里讨论了这种情况:但是如果用户被删除(可能是由于某人的错误)会发生什么?如何使现有数据与新创建(重新创建)的用户ID同步?@Azat-您只需将新的ProviderUserKey设置为users表中的密钥。