我正在使用Entity Framework 6.1.3开发asp.net mvc Web应用程序。 默认情况下出现的asp.net身份对我来说似乎不错,直到我的老板说我们无法对数据库表(用户,用户角色)进行任何更改以适应aspnet身份,因为它是遗留数据库..这里描述:https://www.youtube.com/watch?v=elfqejow5hM
那么,我现在的选择是什么? 我可以完全删除aspnet身份吗?怎么样? 我可以告诉我的identitycontext我的表名和列是不同的,并且还改变了rolemanager中的行为吗?
除此之外,我的数据库是一个mysql db干杯:)
答案 0 :(得分:2)
带有个人用户帐户的默认ASP.NET MVC项目,附带一个名为Owin的中间件,简而言之,它为您的应用程序提供了大量身份验证配置,例如:
同时,Identity是一个用于混合各种旧成员资格的库,因此允许您使用许多ASP.NET框架,例如ASP.NET MVC,WebForms等。此外,它还带有内置实现,它也可以作为owin功能的提供者。虽然,Identity都基于接口,因此开发人员可以轻松地自定义任何内容,例如插入/拔出功能。这只是一个简短的描述。
那么,我现在的选择是什么?
Models
文件夹中,有一个IdentityModels.cs
文件,其中包含ApplicationDbContext
类,继承IdentityDbContext
。为您的模型带来现有DbSet
(包括现有用户和角色)。您可以在ApplicationUser
(默认情况下带有代表IdentityUser
的全新项目)和现有用户之间创建关系。因此,您根本不会影响现有的表格。User
和Role
实现{ {1}}和IUser
与身份相结合。IRole
和User
的现有模型继承Role
和IdentityUser
。在此之后,您的IdentityRole
自然希望在表格中插入/更新某些列以适应ApplicationDbContext
和IdentityUser
模型(因为您的类现在继承自它们),那么您可能希望配置它以避免更改现有表。我可以完全删除aspnet标识吗?
当然可以。如果您根本不需要Owin的所有功能,为简单起见,您甚至可能不会使用它。
如何?
您可以使用表单身份验证而不是个人用户帐户创建新项目,并实现自定义IdentityRole
以与现有{{1}进行交互}}。为表单身份验证实现自定义RoleProvider
很容易。您可以通过查询表格或使用Web服务来让提供商检查角色,这取决于您。
我可以告诉我的identitycontext我的表名和列是什么 不同并且还会改变rolemanager中的行为吗?
不确定。覆盖Role
中的RoleProvider
方法(继承OnModelCreating
的方法),以在生成/更新数据库时更改其所有默认行为。您可能不会调用ApplicationDbContext
,因为这会为您的表创建大量配置。
我建议您开始阅读ASP.NET Identity和Using MySQL Storage with an MySQL EF Provider,这样您就可以决定是保留身份,自定义身份,删除身份等等。