目前我有两个数据库上下文,一个是我创建的,名为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; }
}
答案 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 Injection将IWebUserContext
注入ICompetentieUserContext
的实施中。
您还可以将EF dbcontext直接注入到您的实现中(尽管我更喜欢使用某种Repository模式),并映射当前WebUserContext
&#39; s {{ 1}}到数据库中的那个。