2017-03-03 45 views
1

我正在用Entity Framework 6.1.3开发asp.net mvc web应用程序。 默认情况下出现的asp.net标识对我来说似乎很好,直到我的老板说我们不能对数据库表(用户,用户角色)进行任何更改以符合aspnet标识,因为它是一个传统分贝。这里:https://www.youtube.com/watch?v=elfqejow5hM删除或修改AspNet Identity的选项

那么,我现在有哪些选择? 我可以完全删除aspnet身份吗?怎么样? 我可以告诉我的identitycontext,我的表名和列是不同的,也改变了rolemanager的行为?

在这一切之上,我的数据库是MySQL数据库干杯:)

回答

2

默认的ASP.NET MVC项目,单个用户帐户,附带了一个名为Owin中间件,这在短期让很多认证CONFIGS为您的应用程序,如:

  • 饼干认证
  • 饼干外部Auth
  • 双因素签到(例如,通过手机短信密码+代码在移动)
  • Facebook验证
  • 的OAuth承载令牌
  • 等...

同时,身份是专为混合各种老会员库,从而使您可以与许多ASP.NET框架,如ASP工作.NET MVC,WebForms等。此外,它还内置了一个实现,它也可以作为owin功能的提供者。虽然,身份都是基于接口,所以开发人员可以轻松定制任何内容,如插拔功能。这只是一个简短的描述。

那么,我现在有哪些选择?

  1. 使用Identity内置的引擎,它会创建新表本身(包括AspNetUsers和AspNetRoles),您不会混合与您现有的表。在Models文件夹中,有一个IdentityModels.cs文件,其中ApplicationDbContext类继承IdentityDbContext。为您的模型带上现有的DbSet(包括现有的用户和角色)。您可以创建ApplicationUser(默认情况下带有一个全新项目,代表IdentityUser)与现有用户之间的关系。所以你根本不会影响你现有的表格。
  2. 你可以自己实现所有Identity的接口(并不难,但需要一些时间才能理解),那么你可以使现有的UserRole分别实现IUserIRole与Identity结合。
  3. 您可以使现有型号UserRole只继承IdentityUserIdentityRole。在此之后,当然你的ApplicationDbContext想插入/更新表格中的某些列以适合IdentityUserIdentityRole模型(因为你的类现在从它们继承),那么你可能想要配置它以避免改变你现有的表格。

我可以完全删除aspnet身份吗?

当然可以。如果你根本不需要Owin的所有功能,为了简单起见,你甚至可能不会使用它。

怎么样?

你可以只创建窗体身份验证而不是个人用户帐户一个新的项目,并实现自定义RoleProvider与您现有的Role互动。为表单身份验证实现自定义RoleProvider有点容易。你可以让你的提供者通过查询你的表来检查角色,或者使用一个web服务,这取决于你。

我可以告诉我的identitycontext我的表名和列是 不同,并且还改变了rolemanager中的行为吗?

当然。覆盖ApplicationDbContext中的OnModelCreating方法(与继承IdentityDbContext的同一个方法)以在生成/更新数据库时更改其所有默认行为。您可能不会拨打base.OnModelCreating(modelBuilder);,因为这会为您的表格创建大量配置。


我建议你开始阅读有关ASP.NET Identity也许Using MySQL Storage with an MySQL EF Provider,这样你就可以决定是否保留身份,对其进行自定义,删除等

+0

谢谢!这就是我一直在寻找的......我将与“建立ApplicationUser和现有用户之间的关系”。选项。我已经覆盖onmodelbuilder方法来调整......在完全不同的说明中,我可以告诉我的代码只添加标识表和迁移表,如果它们不存在于现有数据库中的话?而不是丢弃数据库并重新创建它 – Samra

+0

@Samra EF默认不会这样做。如果您使用“DropCreateDatabaseIfModelChanges”设置初始化程序,EF6会执行此操作。在整个项目中寻找这个词。如果你找到它,你可能想要删除它。 – Alisson

+0

我使用customDBinitialzer“MySqlInitialzer”,我有一个现有的数据库,所以EF尝试在第一次登录/注册时发现该数据库中的aspnetusers表,它没有,我不想删除整个数据库,并说context.Database.Create( );所以我现在手动创建这些表,并想知道如果我可以告诉EF创建唯一的身份表,而不是触及其他表 – Samra