2016-03-29 11 views
1

現在、私はCompetentieContextという2つのDBコンテキストを作成しました。もう1つはApplicationDBContextというASP.netのIdentityフレームワークのみで使用しています。ASP.net IDを他のコンテキストに移動する方法

同じコンテキストで両方を使用する必要がありますが、を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

最初は:これはEF問題です - 2番目:GUIDを使用するには同じデータベース/コンテキストに両方を持って行く必要はありません – Carsten

答えて

1

まずテーブルを作成し、独自のデータベース内WebUsers(または類似したもの)と呼ばれます。 [AspNetUsers]主キー列にマップ

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]コラム:それはこのようなものでなければなりません。

今すぐあなたのEFモデル/コンテキストを更新した後、IWebUserContextのようなものと呼ばれる抽象化を作成します(これはどのapproach、使用に依存します)、それが実装​​です:

public interface IWebUserContext 
{ 
    string Id { get; } 
} 

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

次はあなたがあなた自身のコンテキストの抽象化を作成することができ、のは、このICompetentieUserContextを呼び出してみましょう:

WebUserModelは、先ほど作成したEFのエンティティである
public interface ICompetentieUserContext 
{ 
    WebUserModel CurrentUser { get; } 
} 

この抽象化の実装は、アプリケーションのアーキテクチャがわからないため、完全にあなた次第です。しかし、をICompetentieUserContextの実装に注入するには、たとえばDependency Injectionを使用します。

Repositoryパターンを使用することをお勧めしますが、実装にEF dbcontextを直接注入して、現在のWebUserContextIdをデータベースにマップすることもできます。

+1

DIコンテナについては、[Simple Injector](https: //simpleinjector.org/index.html)。また、[こちら](https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91)と[this](https://cuttingedge.it/blogs/steven/pivot/entry。 php?id = 92)あなたのアーキテクチャに役立つかもしれません? – QuantumHive

関連する問題