.NET 4.5、EF 5 和 MembershipProvider

4

有没有人知道是否会创建一个默认的MembershipProvider来与EF 5一起使用(例如SqlMembershipProvider和ActiveDirectoryMembershipProvider),还是我们仍然需要创建自定义的(当然是针对Code First)?


1
你不应该将成员资格提供程序和EF组合在一起。成员资格提供程序有其自己的逻辑封装在存储过程中 - 只需按原样使用它,否则您可能会破坏其安全实现!对于您拥有的类,请使用EF而不是系统类。 - Ladislav Mrnka
据我所知和MSDN告诉我的,MembershipProvider是一个抽象类,可以继承它来实现自定义的成员资格提供程序。此外,在MSDN中还指出,如果您使用Oracle等数据库,您将需要实现自己的提供程序。也许您指的是SqlMembershipProvider,它是一个具体的实现,带有自己的数据库(aspnetdb)并使用存储过程。 - Unknown
我知道,当你需要存储用户凭据时,最好实现自己的提供程序,继承自 MembershipProvider 而不是随意发明自己的逻辑。 - Unknown
是的,我正在指SqlMembershipProvider。如果您想存储自己实现的用户凭据,您需要发明自己的逻辑,因为MembershipProvider API依赖于固定的类(如MembershipUser),这些类不能由EF Code First映射。 - Ladislav Mrnka
谢谢,我早就预料到了,但我真的希望他们会做些什么,特别是在CodePlex、CodeProject和其他地方有那么多项目之后。 - Unknown
显示剩余2条评论
2个回答

7
实际上,在长篇注释和解释之后,结果表明EF将会有一个默认的MembershipProvider,你猜它叫什么?EFMembershipProvider。这里是链接。现在这真是太酷了,因为不再需要第三方实现的MembershipProvider(或者相应的手动实现——对于小项目来说,这太大而过度了)。 更新 目前似乎没有这个提供程序。我不知道它是否会在未来开发并包含在其中。
既然我们被鼓励在使用EF Code First时使用SimpleMembershipProvider和迁移,那就是我现在正在做的事情。您还可以实现ExtendedMembershipProvider,这需要一点更多的努力。
对我来说,现在最好的解决方案是继承SimpleMembershipProvider并仅修改我需要的内容(我正在使用以前实现的MembershipProvider中的大部分代码),例如使用电子邮件或用户名进行日志记录。

我猜它仍需要一些工作才能与不同的数据库一起使用。我认为它不会使用Code First,因为Code First不是.NET的一部分,但这个类看起来像是.NET的一部分。因此,每个其他的数据库服务器都需要用自己的EDMX替换它。 - Ladislav Mrnka
这种情况肯定是可能的,特别是在他们将EF与.NET分离之后。然而,这表明他们正在努力开发EF及其与框架的集成 - 也许在未来我们会看到这样的高级功能。 - Unknown
我目前正在尝试使用EF Providers和Code First创建一个非常简单的项目,我将会看看它最终会在周一左右完成(因为周六和周日是我的休息时间)。 - Unknown
你有进展吗?我很想看看它。 - Martin

1
我已经在我的Silversite CMS ASP.NET库中实现了一个CodeFirst MembershipProvider和Role,可以在silversite.codeplex.com找到。该库还支持多个CodeFirst数据库的DbContext。 据我所知,目前实现已经出现问题,但我还没有时间修复它。此外,Profile和Session提供程序仍然缺失。但是,我已经从MySql提供程序中获取了代码,应该不难移植。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接