Asp.net mvc 3 EF 4.1代码优先和成员资格

Asp.net mvc 3 EF 4.1代码优先和成员资格,asp.net-mvc-3,entity-framework-4.1,ef-code-first,Asp.net Mvc 3,Entity Framework 4.1,Ef Code First,我确实看过类似的问题,大多数都是非常过时的,因为所有的新开发都是首先使用EF代码的。我正在寻找一些想法或方法来绕过这个EF代码优先的“绊脚石” 在EF代码优先项目中使用内置的asp会员制是否可行?一个常见的代码第一个示例是Blog、Post和类似这样的评论(from:): 首先想到的是更改Account controller中的Register操作,这样当用户注册时,他们的Guid(可能还有用户名)也会首先添加到由EF代码创建的UserProfile表中。我想这个表将是我的EF Code Fir

我确实看过类似的问题,大多数都是非常过时的,因为所有的新开发都是首先使用EF代码的。我正在寻找一些想法或方法来绕过这个EF代码优先的“绊脚石”

在EF代码优先项目中使用内置的asp会员制是否可行?一个常见的代码第一个示例是Blog、Post和类似这样的评论(from:):

首先想到的是更改Account controller中的Register操作,这样当用户注册时,他们的Guid(可能还有用户名)也会首先添加到由EF代码创建的UserProfile表中。我想这个表将是我的EF Code First表和asp.net成员表之间的桥梁


这种方法有意义吗?有什么优点/缺点,还有更好的选择吗?

将aspnet成员资格项目安装到数据库中。然后,您将不会在这些实体上使用CodeFirst。但是,您只需从MembershipProvider中读取用户是谁。如果需要,可以直接查询这些表(但成员资格API应提供所需的信息) 您还可以从entity framework power tools运行“反向工程”工具,以直接提供要使用的实体

您可以在此处获得有关安装到数据库的更多信息。

在将表添加到数据库后,power tools可将表反向工程为代码优先实体:


是的,这是一种方法。另一个是,您实际上不需要访问成员资格,只需要用户名,当用户通过FormsAuthentication登录时,用户名将填充IPrincipal

var username = User.Identity.Name;

您可能需要的任何其他信息都可以从成员资格API访问

MembershipUser user = Membership.GetUser(User.Identity.Name);

不要试图将ASP.NET成员资格表映射到数据模型中,因为这将导致默认成员资格提供程序出现问题。只需使用会员API即可获得您所需的任何信息。

我很受诱惑,但我克服了它=)目前可用的最佳方法似乎是使用第二个表,我通常使用它来跟踪aspnet会员无法跟踪的用户信息。这可能是另一个问题,但是否有一个属性或某种方式将我的POCO中的属性标记为必需但不是自动生成的?我想你的意思是作为键,但不是自动生成的。必需并不意味着任何类型的自动生成。不,您不希望将其设置为键,最多可以将数据库中的字段设置为非null,并对其应用唯一约束。您可能需要一个身份栏(UsRePrReIID),考虑用户名可以更改,我会考虑由提供者ID代替用户名称来链接它(取决于您的系统允许删除或停用用户)。@AdamTuliper-我从未见过一个系统,您可以在创建用户名后更改它。但是,对于一个简单的博客来说,这并不重要。@MystereMan我觉得这很难相信。你从来没有使用过windows、live id,几乎我使用过的任何主要站点—SID存储在你的帐户后面,名称可以随时更改。在默认成员资格提供程序中,id也存储在后台,您可以更改名称。此外,许多系统都基于电子邮件登录名,几乎在任何主要网站上都可以更改。支持这一点的网站随处可见。
var username = User.Identity.Name;
HttpContext.Current.User.Identity.Name;
MembershipUser user = Membership.GetUser(User.Identity.Name);