1

イントラネット アプリケーションを開発しており、Active Directory との統合に成功しました。

新しい顧客を追加するときに、ドロップダウン リストからカスタマー アドバイザーを割り当てたいと考えています。

次を使用してドロップダウンリストにデータを入力できます

PrincipalContext pc = new PrincipalContext(ContextType.Domain, "DOMAIN", "dc=domain,dc=org");
GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, "customerAdvisors");
ViewBag.Guid = new SelectList(group.Members, "Guid", "DisplayName");

次に、選択したユーザーの Guid を Customer データと共にデータベースに保存したいと思います。

ただし、参加しようとしているテーブルが Active Directory 内にあるため、モデルに外部キー制約を設定する方法がわかりません。

DB 内に別の Employee テーブルを作成し、必要なフィールドを同期する必要がありますか、またはこれを行う簡単な方法はありますか?

4

1 に答える 1

1

私はこれをやったことがありませんが、いくつかの簡単な調査で可能に見えます。

アドバイザーの Guid を Customer に保存するだけです。AD Guid は、Guid データ型に入ることができます。 このメソッドを使用して、個々のユーザーにクエリを実行できるはずです

UserPrincipal ユーザー = UserPrincipal.FindByIdentity(pc, yourUsersGuidAsAString);

欠点は、顧客アドバイザーの情報 (名前や電子メール アドレスなど) が必要になるたびに、AD に個別のクエリを実行する必要があることです。ORM の使用が難しくなります。

私のアプリケーションには別のユース ケースがありますが、アプリケーションも AD と統合しています。私が取ったルートは、毎回ADを押すのではなく、この情報を自分のDBに保存することでした. 主な理由は、私のアーキテクチャでは、AD に到達するのと同じ方法で到達するのが困難だからです。また、必要な情報を取得するために ORM (私の場合はエンティティ フレームワークなど) を使用する方が簡単です。これの欠点は、データベースにある情報がADの内容と合理的に最新であることを確認する必要があることです。

どのアプローチがアーキテクチャ/ユースケースに最も適しているかを判断する必要があります。

それが役立つことを願っています。

于 2013-01-03T13:36:23.590 に答える