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表中的密钥。