如何将ASP.net身份移动到其他上下文

时间:2016-03-29 09:38:08

标签: c# asp.net asp.net-mvc-5 dbcontext asp.net-identity-2

目前我有两个数据库上下文,一个是我创建的,名为CompetentieContext,另一个仅由ASP.net的身份框架ApplicationDBContext使用。

我需要在相同的上下文中使用两者,但我不知道如何将CompetentieContext迁移到ApplicationDBContext,反之亦然。

我需要在相同的上下文中使用它们,因为我需要将ASP.net用户的GUID链接到我的数据库中的表。

这是我的上下文类的样子:

public class CompetentieContext : DbContext 
{
    public DbSet<Werknemer> Werknemer { get; set; }
    public DbSet<Competentie> Competentie { get; set; }
    public DbSet<CompetentieWerknemer> CompetentieWerknemer { get; set; }
    public DbSet<CompetentieWerknemerDetail> CompetentieWerknemerDetail { get; set; }
    public DbSet<Tag> Tag { get; set; }
    public DbSet<TagGroupTag> TagGroupTag { get; set; }
    public DbSet<TagGroup> TagGroup { get; set; }
    public DbSet<CompetentieTag> CompetentieTag { get; set; }

}

1 个答案:

答案 0 :(得分:1)

首先在您自己的数据库中创建一个名为WebUsers(或类似的东西)的表。它应该是这样的:

CREATE TABLE [dbo].[WebUsers](
    [Id] [uniqueidentifier] NOT NULL,
    [SomeColumnName] [nvarchar](255) NOT NULL,
    [FkSomethingInYourOwnDb] [uniqueidentifier] NULL,
    [WebUserId] [nvarchar](128) NOT NULL,
    ...
  CONSTRAINT [PK_WebUsers] PRIMARY KEY CLUSTERED ([Id] ASC) ON [PRIMARY]
) ON [PRIMARY]

注意映射到[WebUserId]主键列的[AspNetUsers]列。

现在,在更新EF模型/上下文后(这取决于您使用的approach),创建一个名为IWebUserContext的抽象概率及其实现HttpWebUserContext:< / p>

public interface IWebUserContext
{
    string Id { get; }
}

public class HttpWebUserContext : IWebUserContext
{
    public string Id => HttpContext.Current.User.Identity.GetUserId();
}

接下来,您可以创建自己的上下文抽象,让我们调用此ICompetentieUserContext

public interface ICompetentieUserContext
{
    WebUserModel CurrentUser { get; }
}

WebUserModel是我们刚创建的EF实体。

此抽象的实现完全取决于您,因为我不了解您的应用程序的体系结构。但是,您可以使用Dependency InjectionIWebUserContext注入ICompetentieUserContext的实施中。

您还可以将EF dbcontext直接注入到您的实现中(尽管我更喜欢使用某种Repository模式),并映射当前WebUserContext&#39; s {{ 1}}到数据库中的那个。