我目前正在学习MVC3,EF4.1并且非常喜欢Code First方法。
但是,我想使用内置的.NET Memembership Provider和生成的数据库。
我无法解决的问题是,如何编写域名链接到成员资格数据库,以及如何通过EF生成数据库。我可以运行适当的脚本来生成数据库但是这不起作用,无论如何都感觉不对。
我不希望得到完整的答案,我真的需要指向一个解释如何实现这一目标的教程。
如果唯一的答案是实现我自己的会员提供商那么好,但又一次 - 考虑到MVC附带的所有实现都已经开箱即用,感觉就像很多不必要的工作一样?
此致
韦恩
答案 0 :(得分:0)
如果您的成员资格表与您的域表位于不同的数据库中,那么您不能在EF中使用单个DbContext。你可以在这里做的是你可以为每个数据库创建两个上下文,分别说SecurityContext和DomainContext。但是,您将无法通过加入驻留在每个上下文中的实体进行查询,并且两个上下文在更新数据库时都不会使用相同的事务(即,不是单个工作单元)。
我建议您在数据库中创建这些成员资格表,而不是两个数据库。然后,您可以在此处使用单个DbContext(如果它们完全独立,则可以使用事件2)。如果您正确建模了所有表,列和关系,则可以使用EF生成完整数据库。但是如果我没记错SqlMembershipProvider使用存储过程。如果是这样,您将无法创建整个数据库。
如果您可以提供更多信息,则可以更轻松地提供更具体的解决方案。
答案 1 :(得分:0)
我所做的是使用Microsoft设置的规则创建自定义MembershipProvider(http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx);但是,我使用模型第一副代码首先接近自己。我自己在设计器中创建了表,然后以这种方式生成了我的数据库。在我的结构完好之后,我创建了MembershipProvider,在我需要它时只实现了我需要的函数,几乎为那些我没用过的函数抛出异常。
如果这对您不起作用,那么您可以在@ Eranga的答案中使用类似于第2段的内容,但可能使用此处使用的数据库准备步骤:http://www.brianhawkinstech.com/development/120-preparing-your-ms-sql-database-for-use-with-aspnet-membership-provider。这将创建SqlMemberhipProvider所需的存储过程。我知道它可以使用数据库第一种方法,但不知道如何使用代码优先方法。
使用上述第2段中的方法的复杂性是我使用自定义成员资格方法的原因。这种方法的一个好处是,您可以在自己的未来项目中重用代码,但当然是一种耗时的方法。
答案 2 :(得分:0)
如果你想实现你自己的会员和角色提供者,我将推荐,那么这是一个很棒的教程: http://www.brianlegg.com/post/2011/05/09/Implementing-your-own-RoleProvider-and-MembershipProvider-in-MVC-3.aspx