我正在开发Intranet应用程序并已成功与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与客户数据一起存储在数据库中。
但是,我不确定如何在我的模型中设置外键约束,因为我加入的表位于Active Directory中。
我是否需要在数据库中创建单独的Employee表并同步所需的字段,或者是否有简化的方法来执行此操作?
答案 0 :(得分:1)
我从来没有这样做,但一些快速的研究使它看起来成为可能。
您可以将Guid保存给您的顾客。 AD Guid可以进入Guid数据类型。 You should be able to query individual users by using this method:
UserPrincipal user = UserPrincipal.FindByIdentity(pc,yourUsersGuidAsAString);
不利的一面是,每当您需要客户顾问的信息(例如他们的姓名或电子邮件地址)时,您都必须对AD进行单独查询。更难使用ORM。
在我的应用程序中,我有一个不同的用例,但我还将我的应用程序与AD集成。我采取的路线是将这些信息保存在我自己的数据库中,而不是每次都按下AD。很大程度上是因为我的架构很难以同样的方式进入AD。另外,使用ORM(比如我的实体框架)更容易引入我想要的信息。这样做的缺点是,您需要确保数据库中的信息与AD中的信息保持一致。
您必须判断哪种方法对您的架构/用例最有意义。
希望有所帮助。