如何怎么删除已经建立的数据库菜单:获取数据-连接数据库的现有连接?


项目
11/20/2023
在本教程中,将了解如何从本地网络中存在的关系数据库中刷新 Power BI 数据集。 具体而言,本教程使用示例 SQL Server 数据库,Power BI 必须通过本地数据网关访问该数据库。在本教程中,将完成以下步骤:创建和发布 Power BI Desktop .pbix 文件,它用于导入本地 SQL Server 数据库中的数据。
通过数据网关在 Power BI for SQL Server 连接中配置数据源和数据集设置。
配置刷新计划,确保 Power BI 数据集包含最新数据。
执行数据集的按需刷新。
查看刷新历史记录,分析过去刷新周期的结果。
通过删除本教程中创建的项来清理资源。
先决条件如果你还没有,请在开始之前注册 Power BI 免费试用版。
在本地计算机上安装 Power BI Desktop。
在本地计算机上安装 SQL Server,并还原来自备份的 AdventureWorksDW2017 示例数据库。 有关 AdventureWorks 示例数据库的详细信息,请参阅 AdventureWorks 安装和配置。
安装 SQL Server Management Studio (SSMS)。
在 SQL Server 所在的本地计算机上安装本地数据网关。 在生产环境中,网关通常位于不同的计算机上。
注意如果你不是网关管理员,或者不想自己安装网关,请让组织中的网关管理员创建所需的数据源定义,以将数据集连接到 SQL Server 数据库。创建并发布 Power BI Desktop 文件按照以下过程创建使用 AdventureWorksDW2017 示例数据库的基本 Power BI 报表。 将报表发布至 Power BI 服务来获取 Power BI 数据集,你可在后续步骤中配置和刷新该数据集。在 Power BI Desktop 的“主页”选项卡上,选择“获取数据”>“SQL Server”。
在“SQL Server 数据库”对话框中,输入“服务器”和“数据库(可选)”名称,确保“数据连接模式”设置为“导入”。
注意如果计划使用存储过程,则数据连接模式必须是“导入”。
(可选)在“高级选项”下,可指定 SQL 语句并设置其他选项,例如使用 SQL Server 故障转移。
选择“确定”。
在下一个屏幕上,验证凭据,然后选择“连接”。
注意如果身份验证失败,请确保已选择正确的身份验证方法并使用了具有数据库访问权限的帐户。 在测试环境中,可使用具有显式用户名和密码的数据库身份验证。 在生产环境中,通常使用 Windows 身份验证。 有关更多帮助,请参阅排查刷新方案问题,或者联系数据库管理员。
如果出现“加密支持”对话框,请选择“确定”。
在“导航器”对话框中,选择“DimProduct”表,然后选择“加载”。
在 Power BI Desktop“报表”视图的“可视化效果”窗格中,选择“堆积柱形图”。
在报表画布中选择新的柱形图后,在“字段”窗格中选择“EnglishProductName”和“ListPrice”字段。
将 EndDate 从“字段”窗格拖到“此页上的筛选器”窗格,然后在“基本筛选”下,选中“(空白)”对应的复选框。
此时,可视化效果应如下图所示:
请注意,Road-250 Red 产品与其他 Road-250 产品的标价相同。 在稍后更新数据和刷新报表时,此价格将出现变化。
使用名称“AdventureWorksProducts.pbix”保存报表。
在“主页”选项卡上,选择“发布” 。
在“发布到 Power BI”屏幕上,选择“我的工作区”,然后选中“选择”。 如有必要,请登录到 Power BI 服务。
出现“成功”消息时,选择[在 Power BI 中打开“AdventureWorksProducts.pbix”]。
将数据集连接到 SQL Server 数据库在 Power BI Desktop 中,你已直接连接到本地 SQL Server 数据库。 在 Power BI 服务中,你需要数据网关充当云和本地网络之间的桥梁。 按照以下步骤将本地 SQL Server 数据库作为数据源添加到网关,然后将数据集连接到此数据源。在 Power BI 服务中,在屏幕的右上角选择设置齿轮图标,然后选择“设置”。
选择“语义模型”选项卡,然后从语义模型列表中选择 AdventureWorksProducts 语义模型。
展开网关连接,并验证是否至少列出了一个网关。 如果没有看到网关,请确保按照说明安装本地数据网关。
选择“操作”下的箭头切换来展开数据源,然后选择数据源旁边的“添加到网关”链接。
在选择了“本地”的“新建连接”屏幕上,填写或验证以下字段。 大多数字段已填充。
网关群集名称:验证或输入网关群集名称。
连接名称:输入新连接的名称,例如 AdventureWorksProducts。
连接类型:选择“SQL Server”(如果尚未选择)。
服务器:验证或输入你的 SQL Server 实例名称。 必须与在 Power BI Desktop 中指定的相同。
数据库:验证或输入你的 SQL Server 数据库名称,例如 AdventureWorksDW2017。 必须与在 Power BI Desktop 中指定的相同。
在“身份验证”下:
身份验证方法:选择“Windows”、“基本”或“OAuth2”,通常为“Windows”。
用户名和密码:输入用于连接到 SQL Server 的凭据。
选择创建。
返回“设置”屏幕,展开“网关连接”部分,并验证配置的数据网关现在是否显示“正在安装它的计算机上运行”状态。 选择“应用”。
配置刷新计划现在,你已通过数据网关将 Power BI 数据集连接到 SQL Server 本地数据库,接下来请按照以下步骤配置刷新计划。 按计划刷新数据集有助于确保报表和仪表板具有最新数据。在左侧导航窗格中,展开“我的工作区”。
在“语义模型”部分,指向 AdventureWorksProducts 语义模型,选择“打开”菜单(三个垂直点图标),然后选择“计划刷新”。
提示请确保指向 AdventureWorksProducts 数据集,而不是具有相同名称的报表,该报表没有“计划刷新”选项。
在“计划刷新”部分的“不断更新数据”下,将刷新设置为“开”。
在“刷新频率”下,为此示例选择“每日”,然后在“ 时间”下选择“添加其他时间”。
对于此示例,请指定“早上 6:00”,然后选择“添加另一个时间”并指定“下午 6:00”。
注意如果数据集位于共享容量上,则最多可配置 8 个每日时段;如果位于 Power BI Premium 上,则可配置 48 个时段。
保留“发送刷新失败通知至”下的复选框设置为“语义模型所有者”,然后选择“应用”。
你现已配置刷新计划,Power BI 会在下一计划时间(15 分钟内)刷新数据集。执行按需刷新若要随时刷新数据来执行网关和数据源配置测试等操作,可使用左侧窗格“语义模型”菜单中的“立即刷新”选项进行按需刷新。 按需刷新不会影响下一计划的刷新时间。为了说明按需刷新,请先使用 SSMS 更改示例数据来更新 AdventureWorksDW2017 数据库中的 DimProduct 表,如下所示:
UPDATE [AdventureWorksDW2017].[dbo].[DimProduct]
SET ListPrice = 5000
WHERE EnglishProductName ='Road-250 Red, 58'
按照以下步骤操作,使更新后的数据可通过网关连接传输到数据集并进入 Power BI 报表:在 Power BI 服务的左侧导航窗格中,选择“我的工作区”。
在“语义模型”部分,将鼠标悬停在 AdventureWorksProducts 语义模型上,选择“打开”菜单(三个垂直点图标),然后选择“立即刷新”。
右上角会显示“准备刷新”消息。
在“我的工作区”的“报表”部分中,选择“AdventureWorksProducts”。 查看更新后的数据如何传输到报表中,现标价最高的产品是“Road-250 Red, 58”。
查看刷新历史记录最好定期使用刷新历史记录来查看既往刷新周期的结果。 数据库凭据可能已过期,或者所选网关在计划刷新到期时可能已脱机。 按照以下步骤检查刷新历史记录并检查问题。在 Power BI 屏幕的右上角,选择“设置”齿轮图标,然后选择“设置”。
在“语义模型”选项卡上,选择要检查的语义模型,例如 AdventureWorksProducts。
选择“刷新历史记录”链接。
在“刷新历史记录”对话框的“计划”选项卡上,请注意过去的计划和按需刷新及其开始时间和结束时间。 如果状态为“已完成”,则表示 Power BI 已成功刷新。 对于失败的刷新,可看到错误消息并检查错误详细信息。
注意OneDrive 选项卡仅与连接到 OneDrive 或 SharePoint Online 上的 Power BI Desktop 文件、Excel 工作簿或 CSV 文件的数据集相关。 有关详细信息,请参阅 Power BI 中的数据刷新。
清理资源按照以下说明清理为本教程创建的资源:如果不想再使用示例数据,请使用 SSMS 删除数据库。
如果你不想使用 SQL Server 数据源,请从数据网关中删除该数据源。 如果安装数据网关仅为完成本教程,还请考虑卸载它。
还请删除在你发布 AdventureWorksProducts.pbix 文件时 Power BI 创建的 AdventureWorksProducts 数据集和报表。
后续步骤本教程探讨了如何:将数据从本地 SQL Server 数据库导入 Power BI 数据集。
按计划按需刷新 Power BI 数据集,来更新使用该数据集的报表和仪表板。
接下来,你可详细了解 Power BI 数据刷新,详细学习如何管理数据网关和数据源。管理本地数据网关
管理数据源 - 导入/计划刷新
Power BI 中的数据刷新

项目
07/13/2023
由 Web Camp 团队下载 Web Camp 培训工具包本动手实验室假定你具备 ASP.NET MVC 的基础知识。 如果之前未使用 过 MVC ASP.NET ,我们建议你 ASP.NET MVC 4 基础知识 动手实验室。本实验室将指导你完成前面所述的增强功能和新功能,这些增强功能通过对源文件夹中提供的示例 Web 应用程序应用小更改。在 ASP.NET MVC 基础知识 动手实验室中,你已将硬编码数据从控制器传递到视图模板。 但是,为了生成真正的 Web 应用程序,可能需要使用真正的数据库。本动手实验室将介绍如何使用数据库引擎来存储和检索音乐应用商店应用程序所需的数据。 为此,需要从现有数据库开始,并从该数据库创建实体数据模型。 在本实验室中,你将了解 Database First 方法和 Code First 方法。但是,也可以使用 Model First 方法,使用工具创建相同的模型,然后从该模型生成数据库。Database First 与 Model First生成模型后,将在 StoreController 中做出适当的调整,以便为存储视图提供从数据库获取的数据,而不是使用硬编码数据。 无需对视图模板进行任何更改,因为 StoreController 会将相同的 ViewModel 返回到视图模板,不过这次数据将来自数据库。代码优先方法Code First 方法允许我们从代码中定义模型,而无需生成通常与框架耦合的类。首先,在代码中,模型对象是使用 POCO“普通旧 CLR 对象”定义的。 POCO 是没有继承且不实现接口的简单普通类。 我们可以从它们自动生成数据库,也可以使用现有数据库并通过代码生成类映射。使用此方法的好处是模型独立于持久性框架 (在本例中实体框架) ,因为 POCO 类不与映射框架耦合。注意此实验室基于 ASP.NET MVC 4 和音乐商店示例应用程序的一个版本,已自定义并最小化以仅适合本Hands-On实验室中显示的功能。如果想要浏览整个 音乐商店 教程应用程序,可以在 MVC-Music-Store 中找到它。先决条件必须具有以下项才能完成此实验室:Microsoft Visual Studio Express 2012 for Web 或高级 (请参阅附录 A,了解如何) 安装它。
设置安装代码片段为方便起见,你将在本实验室中管理的大部分代码都以 Visual Studio 代码片段的形式提供。 若要安装代码片段,请运行 .\Source\Setup\CodeSnippets.vsi 文件。如果不熟悉Visual Studio Code代码段,并想要了解如何使用它们,可以参考本文档“附录 C:使用代码片段”中的附录。练习本动手实验室由以下练习组成:练习 1:添加数据库
练习 2:使用 Code First 创建数据库
练习 3:使用参数查询数据库
注意每个练习都附带一个 End 文件夹,其中包含在完成练习后应获得的结果解决方案。 如果需要其他帮助完成练习,可以使用此解决方案作为指导。完成本实验室的估计时间: 35 分钟。练习 1:添加数据库在本练习中,你将了解如何将包含 MusicStore 应用程序表的数据库添加到解决方案中,以便使用其数据。 使用模型生成数据库并将其添加到解决方案后,你将修改 StoreController 类,以便为 View 模板提供从数据库获取的数据,而不是使用硬编码值。任务 1 - 添加数据库在此任务中,将向解决方案添加已创建的数据库,其中包含 MusicStore 应用程序的main表。打开 Source/Ex1-AddingADatabaseDBFirst/Begin/ 文件夹中的 Begin 解决方案。
在继续之前,需要下载一些缺少的 NuGet 包。 为此,请单击“ 项目 ”菜单,然后选择“ 管理 NuGet 包”。
在 “管理 NuGet 包 ”对话框中,单击“ 还原 ”以下载缺少的包。
最后,单击“生成
解决方案”生成解决方案。
注意使用 NuGet 的优点之一是,无需交付项目中的所有库,从而减小了项目大小。 使用 NuGet Power Tools,通过在 Packages.config 文件中指定包版本,你将能够在首次运行项目时下载所有必需的库。 这就是在从本实验室打开现有解决方案后必须运行这些步骤的原因。
添加 MvcMusicStore 数据库文件。 在本动手实验室中,你将使用已创建的名为 MvcMusicStore.mdf 的数据库。 为此,请右键单击 “App_Data 文件夹”,指向 “添加 ”,然后单击“ 现有项”。 浏览到 \Source\Assets 并选择 MvcMusicStore.mdf 文件。
添加现有项
MvcMusicStore.mdf 数据库文件
数据库已添加到项目中。 即使数据库位于解决方案中,也可以查询和更新它,因为它托管在不同的数据库服务器中。
解决方案资源管理器 中的 MvcMusicStore 数据库
验证与数据库的连接。 为此,请双击“ MvcMusicStore.mdf ”建立连接。
连接到 MvcMusicStore.mdf
任务 2 - 创建数据模型在此任务中,你将创建一个数据模型,以便与上一个任务中添加的数据库进行交互。创建表示数据库的数据模型。 为此,请在解决方案资源管理器右键单击“模型”文件夹,指向“添加”,然后单击“新建项”。 在“ 添加新项 ”对话框中,选择“ 数据 模板”,然后选择 “ADO.NET 实体数据模型 ”项。 将数据模型名称更改为 StoreDB.edmx ,然后单击“ 添加”。
添加 StoreDB ADO.NET 实体数据模型
将显示 实体数据模型向导 。 此向导将指导你完成模型层的创建过程。 由于应基于最近添加的现有数据库创建模型,因此请选择“ 从数据库生成 ”,然后单击“ 下一步”。
选择模型内容
由于要从数据库生成模型,需要指定要使用的连接。 单击“新建连接”。
选择“Microsoft SQL Server数据库文件”,然后单击“继续”。
“选择数据源”对话框
单击“浏览”,选择位于 App_Data 文件夹中的数据库 MvcMusicStore.mdf,然后单击“确定”。
连接属性
生成的类应与实体连接字符串同名,因此请将其名称更改为 MusicStoreEntities ,然后单击“ 下一步”。
选择数据连接
选择要使用的数据库对象。 由于实体模型将仅使用数据库的表,因此请选择“ 表 ”选项,并确保还选中“ 在模型中包括外键列 ”和 “复数”或“单数化”生成的对象名称 选项。 将“模型命名空间”更改为 MvcMusicStore.Model ,然后单击“ 完成”。
选择数据库对象
注意如果显示“安全警告”对话框,请单击“ 确定 ”以运行模板并生成模型实体的类。
将显示数据库的实体关系图,同时将创建将每个表映射到数据库的单独类。 例如, Albums 表将由 Album 类表示,其中表中的每一列将映射到类属性。 这样,就可以查询和使用表示数据库中行的对象。
实体关系图
注意T4 模板 (.tt) 运行代码来生成实体类,并将用同名覆盖现有类。 在此示例中,类“Album”、“Genre”和“Artist”被生成的代码覆盖。
任务 3 - 生成应用程序在此任务中,你将检查,尽管模型生成已删除专辑、流派和艺术家模型类,但项目通过使用新的数据模型类成功生成。通过选择“ 生成 ”菜单项,然后选择“ 生成 MvcMusicStore”来生成项目。
生成项目
项目生成成功。 为什么它仍然有效? 它之所以有效,是因为数据库表的字段包含你在已删除的类 Album 和 Genre 中使用的属性。
生成成功
虽然设计器以图表格式显示实体,但它们实际上是 C# 类。 展开 解决方案资源管理器 中的 StoreDB.edmx 节点,然后 StoreDB.tt,你将看到新生成的实体。
生成的文件
任务 4 - 查询数据库在此任务中,你将更新 StoreController 类,以便它查询数据库以检索信息,而不是使用硬编码的数据。打开 Controllers\StoreController.cs 并将以下字段添加到类,以保存名为 storeDB 的 MusicStoreEntities 类的实例:
(代码片段 - 模型和数据访问 - Ex1 storeDB)
public class StoreController : Controller
{
private MusicStoreEntities storeDB = new MusicStoreEntities();
MusicStoreEntities 类公开数据库中每个表的集合属性。 更新 浏览 操作方法以检索包含所有 专辑的流派。
(代码片段 - 模型和数据访问 - Ex1 Store 浏览)
public ActionResult Browse(string genre)
{
// Retrieve Genre and its Associated Albums from database
var genreModel = new Genre
{
Name = genre,
Albums = this.storeDB.Albums.ToList()
};
return this.View(genreModel);
}
注意你正在使用名为 LINQ 的 .NET 功能 (语言集成的查询) 针对这些集合编写强类型查询表达式- 这将针对数据库执行代码并返回可对其编程的对象。有关 LINQ 的详细信息,请访问 msdn 站点。
更新 索引 操作方法以检索所有流派。
(代码片段 - 模型和数据访问 - Ex1 Store 索引)
public ActionResult Index()
{
var genres = this.storeDB.Genres;
return this.View(genres);
}
更新 Index 操作方法以检索所有流派并将集合转换为列表。
(代码片段 - 模型和数据访问 - Ex1 Store GenreMenu)
// GET: /Store/GenreMenu
[ChildActionOnly]
public ActionResult GenreMenu()
{
var genres = this.storeDB.Genres.Take(9).ToList();
return this.PartialView(genres);
}
任务 5 - 运行应用程序在此任务中,你将检查“应用商店索引”页现在将显示存储在数据库中的流派,而不是硬编码的流派。 无需更改视图模板,因为 StoreController 返回的实体与以前相同,不过这次数据将来自数据库。重新生成解决方案,然后按 F5 运行应用程序。
项目在主页中启动。 验证“ 流派 ”菜单是否不再是硬编码列表,并且数据是否直接从数据库中检索。
从数据库浏览流派
现在浏览到任何流派,并验证是否已从数据库填充相册。
从数据库浏览相册
练习 2:首先使用代码创建数据库在本练习中,你将了解如何使用 Code First 方法创建包含 MusicStore 应用程序的表的数据库,以及如何访问其数据。生成模型后,将修改 StoreController,为视图模板提供从数据库获取的数据,而不是使用硬编码值。注意如果已完成练习 1 并已使用 Database First 方法,现在将了解如何使用不同的过程获取相同的结果。 已标记与练习 1 共有的任务,以便更轻松地阅读。 如果你尚未完成练习 1,但想要学习 Code First 方法,可以从此练习开始,并全面了解主题。任务 1 - 填充示例数据在此任务中,在最初使用 Code-First 创建数据库时,将使用示例数据填充该数据库。打开 Source/Ex2-CreatingADatabaseCodeFirst/Begin/ 文件夹中的 Begin 解决方案。 否则,可以继续使用通过完成上一练习获取的 End 解决方案。
如果打开了提供的 Begin 解决方案,则需要下载一些缺少的 NuGet 包,然后才能继续。 为此,请单击“ 项目 ”菜单,然后选择“ 管理 NuGet 包”。
在 “管理 NuGet 包 ”对话框中,单击“ 还原 ”以下载缺少的包。
最后,单击“生成
解决方案”生成解决方案。
注意使用 NuGet 的优点之一是,无需交付项目中的所有库,从而减小了项目大小。 使用 NuGet Power Tools,通过在 Packages.config 文件中指定包版本,你将能够在首次运行项目时下载所有必需的库。 这就是在从本实验室打开现有解决方案后必须运行这些步骤的原因。
将 SampleData.cs 文件添加到 Models 文件夹。 为此,请右键单击“ 模型 ”文件夹,指向 “添加 ”,然后单击“ 现有项”。 浏览到 \Source\Assets ,然后选择 SampleData.cs 文件。
示例数据填充代码
打开 Global.asax.cs 文件并添加以下 using 语句。
(代码片段 - 模型和数据访问 - Ex2 Global Asax usings)
using MvcMusicStore.Models;
using System.Data.Entity;
在 Application_Start ()
方法中添加以下行以设置数据库初始值设定项。
(代码片段 - 模型和数据访问 - Ex2 Global Asax SetInitializer)
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Database.SetInitializer(new SampleData());
}
任务 2 - 配置与数据库的连接现在,你已将数据库添加到我们的项目,你将在 Web.config 文件中写入连接字符串。在 Web.config添加连接字符串。为此,请在项目根目录中打开Web.config,并将名为 DefaultConnection 的连接字符串替换为 connectionStrings> 节中的<以下行:
Web.config文件位置
<configuration>
...
<connectionStrings>
<add name="MusicStoreEntities" connectionString="data source=(LocalDb)\v11.0;initial catalog=MvcMusicStore;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MvcMusicStore.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>
...
任务 3 - 使用模型现在,你已配置与数据库的连接,你将将模型与数据库表链接。 在此任务中,你将创建一个类,该类将使用 Code First 链接到数据库。 请记住,存在一个应修改的 POCO 模型类。注意如果已完成练习 1,你将注意到此步骤是由向导执行的。 通过执行 Code First,你将手动创建将链接到数据实体的类。打开 POCO 模型类 Genre from Models 项目文件夹并包含 ID。 使用名称 为 GenreId 的 int 属性。
(代码片段 - 模型和数据访问 - Ex2 Code First 流派)
namespace MvcMusicStore.Models
{
using System.Collections.Generic;
public class Genre
{
public int GenreId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List<Album> Albums { get; set; }
}
}
注意若要使用 Code First 约定,类 Genre 必须具有将自动检测的主键属性。可在此 msdn 文章中详细了解代码优先约定。
现在,从 Models 项目文件夹打开 POCO 模型类 Album 并包含外键,创建名为 GenreId 和 ArtistId 的属性。 此类已具有主键的 GenreId 。
(代码片段 - 模型和数据访问 - Ex2 Code First 专辑)
namespace MvcMusicStore.Models
{
public class Album
{
public int AlbumId { get; set; }
public int GenreId { get; set; }
public int ArtistId { get; set; }
public string Title { get; set; }
public decimal Price { get; set; }
public string AlbumArtUrl { get; set; }
public virtual Genre Genre { get; set; }
public virtual Artist Artist { get; set; }
}
}
打开 POCO 模型类 Artist 并包含 ArtistId 属性。
(代码片段 - 模型和数据访问 - Ex2 Code First Artist)
namespace MvcMusicStore.Models
{
public class Artist
{
public int ArtistId { get; set; }
public string Name { get; set; }
}
}
右键单击“ 模型 ”项目文件夹,然后选择“ 添加 ”
类。 将文件命名 为 MusicStoreEntities.cs。 然后,单击“ 添加”。
添加新项
添加类
打开刚刚创建的类 MusicStoreEntities.cs,并包括 命名空间 System.Data.Entity 和 System.Data.Entity.Infrastructure。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
...
替换 类声明以扩展 DbContext 类:声明公共 DBSet 并重写 OnModelCreating 方法。 完成此步骤后,你将获得一个域类,该类会将模型与 Entity Framework 链接。 为此,请将类代码替换为以下内容:
(代码片段 - 模型和数据访问 - Ex2 Code First MusicStoreEntities)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
namespace MvcMusicStore.Models
{
public class MusicStoreEntities : DbContext
{
public DbSet<Genre> Genres { get; set; }
public DbSet<Album> Albums { get; set; }
public DbSet<Artist> Artists { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Genre>().ToTable("Genres");
modelBuilder.Entity<Album>().ToTable("Albums");
modelBuilder.Entity<Artist>().ToTable("Artists");
base.OnModelCreating(modelBuilder);
}
}
}
注意使用 Entity Framework DbContext 和 DBSet ,你将能够查询 POCO 类 Genre。 通过扩展 OnModelCreating 方法,可以在 代码 中指定如何将 Genre 映射到数据库表。 有关 DBContext 和 DBSet 的详细信息,请参阅此 msdn 文章: 链接任务 4 - 查询数据库在此任务中,你将更新 StoreController 类,以便它不会使用硬编码的数据,而是从数据库中检索它。注意此任务与练习 1 有共同之处。如果已完成练习 1,你将注意到这些步骤在两种方法中相同, (Database first 或 Code first) 。 它们在数据与模型的链接方式上有所不同,但对数据实体的访问仍从控制器透明。打开 Controllers\StoreController.cs 并将以下字段添加到类,以保存名为 storeDB 的 MusicStoreEntities 类的实例:
(代码片段 - 模型和数据访问 - Ex1 storeDB)
public class StoreController : Controller
{
private MusicStoreEntities storeDB = new MusicStoreEntities();
...
}
MusicStoreEntities 类公开数据库中每个表的集合属性。 更新 浏览 操作方法以检索包含所有 专辑的流派。
(代码片段 - 模型和数据访问 - Ex2 Store 浏览)
public ActionResult Browse(string genre)
{
// Retrieve Genre and its Associated Albums from database
var genreModel = new Genre
{
Name = genre,
Albums = this.storeDB.Albums.ToList()
};
return this.View(genreModel);
}
注意你正在使用名为 LINQ 的 .NET 功能 (语言集成的查询) 针对这些集合编写强类型查询表达式- 这将针对数据库执行代码并返回可对其编程的对象。有关 LINQ 的详细信息,请访问 msdn 站点。
更新 索引 操作方法以检索所有流派。
(代码片段 - 模型和数据访问 - Ex2 Store 索引)
public ActionResult Index()
{
var genres = this.storeDB.Genres;
return this.View(genres);
}
更新 Index 操作方法以检索所有流派并将集合转换为列表。
(代码片段 - 模型和数据访问 - Ex2 Store GenreMenu)
// GET: /Store/GenreMenu
[ChildActionOnly]
public ActionResult GenreMenu()
{
var genres = this.storeDB.Genres.Take(9).ToList();
return this.PartialView(genres);
}
任务 5 - 运行应用程序在此任务中,你将检查“应用商店索引”页现在将显示存储在数据库中的流派,而不是硬编码的流派。 无需更改视图模板,因为 StoreController 将返回与以前相同的 StoreIndexViewModel ,但这次数据将来自数据库。重新生成解决方案,然后按 F5 运行应用程序。
项目在主页中启动。 验证“ 流派 ”菜单是否不再是硬编码列表,并且数据是否直接从数据库中检索。
从数据库浏览流派
现在浏览到任何流派,并验证是否已从数据库填充相册。
从数据库浏览相册
练习 3:使用参数查询数据库在本练习中,你将了解如何使用参数查询数据库,以及如何使用查询结果整形,该功能可减少数据库访问以更高效的方式检索数据的数量。注意有关查询结果整形的详细信息,请访问以下 msdn 文章。任务 1 - 修改 StoreController 以从数据库检索相册在此任务中,你将更改 StoreController 类以访问数据库以检索特定流派中的相册。如果要使用 Code-First 方法或 Source\Ex3-QueryingDatabaseWithParametersDBFirst\Begin 文件夹,请打开位于 Source\Ex3-QueryingTheDatabaseWithParametersDBFirst\Begin 文件夹的 Begin 解决方案Database-First方法。 否则,可以继续使用通过完成上一练习获取的 End 解决方案。
如果打开了提供的 Begin 解决方案,则需要下载一些缺少的 NuGet 包,然后才能继续。 为此,请单击“ 项目 ”菜单,然后选择“ 管理 NuGet 包”。
在 “管理 NuGet 包 ”对话框中,单击“ 还原 ”以下载缺少的包。
最后,单击“生成
解决方案”生成解决方案。
注意使用 NuGet 的优点之一是,无需交付项目中的所有库,从而减小了项目大小。 使用 NuGet Power Tools,通过在 Packages.config 文件中指定包版本,你将能够在首次运行项目时下载所有必需的库。 这就是在从本实验室打开现有解决方案后必须运行这些步骤的原因。
打开 StoreController 类以更改 Browse 操作方法。 为此,请在解决方案资源管理器展开 Controllers 文件夹,然后双击 StoreController.cs。
更改 “浏览 ”操作方法以检索特定流派的专辑。 为此,请替换以下代码:
(代码片段 - 模型和数据访问 - Ex3 StoreController BrowseMethod)
public ActionResult Browse(string genre)
{
// Retrieve Genre and its Associated Albums from database
var genreModel = this.storeDB.Genres.Include("Albums")
.Single(g => g.Name == genre);
return this.View(genreModel);
}
注意若要填充实体的集合,需要使用 Include 方法指定要检索相册。 可以使用 。LINQ 中的单一 ()
扩展,因为在本例中,一张专辑只应有一种流派。 Single ()
方法采用 Lambda 表达式作为参数,在本例中指定单个 Genre 对象,使其名称与定义的值匹配。你将利用一项功能,该功能允许在检索 Genre 对象时指示要加载的其他相关实体。 此功能称为 查询结果整形,可用于减少访问数据库以检索信息所需的次数。 在此方案中,需要预提取检索到的流派的专辑。查询包括 Genres.Include (“Albums”)
,以指示你还需要相关的相册。 这将导致更高效的应用程序,因为它将在单个数据库请求中检索 Genre 和 Album 数据。任务 2 - 运行应用程序在此任务中,你将运行应用程序并从数据库中检索特定流派的相册。按 F5 运行应用程序。
项目在主页中启动。 将 URL 更改为 /Store/Browse?genre=Pop ,以验证是否正在从数据库中检索结果。
浏览 /Store/Browse?genre=Pop
任务 3 - 按 ID 访问相册在此任务中,你将重复上述过程,按 ID 获取相册。如果需要,请关闭浏览器以返回到 Visual Studio。 打开 StoreController 类以更改 Details 操作方法。 为此,请在解决方案资源管理器展开 Controllers 文件夹,然后双击 StoreController.cs。
更改 “详细信息” 操作方法以基于其 ID 检索相册详细信息。为此,请替换以下代码:
(代码片段 - 模型和数据访问 - Ex3 StoreController DetailsMethod)
// GET: /Store/
public ActionResult Details(int id)
{
var album = this.storeDB.Albums.Find(id);
if (album == null)
{
return this.HttpNotFound();
}
return this.View(album);
}
任务 4 - 运行应用程序在此任务中,你将在 Web 浏览器中运行应用程序,并按 ID 获取相册详细信息。按 F5 运行应用程序。
项目在主页中启动。 将 URL 更改为 /Store/Details/51 或浏览流派并选择一个相册,以验证是否正在从数据库中检索结果。
浏览 /应用商店/详细信息/51
总结通过完成本动手实验室,你已学习了使用 Database First 方法和 Code First 方法 ASP.NET MVC 模型和数据访问的基础知识:如何将数据库添加到解决方案以使用其数据
如何更新控制器,为视图模板提供从数据库获取的数据,而不是硬编码的数据
如何使用参数查询数据库
如何使用查询结果整形,该功能可减少数据库访问次数,以更高效的方式检索数据
如何在 Microsoft 实体框架中使用 Database First 和 Code First 方法将数据库与模型链接
附录 A:安装 Visual Studio Express 2012 for Web可以使用 Microsoft Web 平台安装程序安装 Microsoft Visual Studio Express 2012 for Web 或其他“Express”版本。 以下说明指导你完成使用 Microsoft Web 平台安装程序 安装 Visual Studio Express 2012 for Web 所需的步骤。转到 [https://go.microsoft.com/?linkid=9810169] (https://go.microsoft.com/?linkid=9810169) 。 或者,如果已安装 Web 平台安装程序,则可以打开它并搜索产品“Visual Studio Express 2012 for Web with Windows Azure SDK”。
单击“ 立即安装”。 如果没有 Web 平台安装程序 ,将重定向到先下载并安装它。
Web 平台安装程序 打开后,单击“ 安装 ”以启动安装程序。
安装Visual Studio Express
阅读所有产品的许可证和条款,然后单击“ 我接受 ”继续。
接受许可条款
等待下载和安装过程完成。
安装进度
安装完成后,单击“ 完成”。
安装已完成
单击“ 退出 ”关闭 Web 平台安装程序。
若要打开 web Visual Studio Express,请转到“开始”屏幕并开始编写“VS Express”,然后单击“VS Express for Web”磁贴。
VS Express for Web 磁贴
附录 B:使用 Web 部署发布 ASP.NET MVC 4 应用程序本附录将介绍如何从 Windows Azure 管理门户创建新网站,并利用 Windows Azure 提供的 Web 部署发布功能,发布通过实验室获取的应用程序。任务 1 - 从 Windows Azure 门户创建新网站转到 Windows Azure 管理门户 ,并使用与订阅关联的 Microsoft 凭据登录。
注意使用 Windows Azure,可以免费托管 10 个 ASP.NET 网站,然后随着流量的增长而扩展。 可以 在此处注册。
登录到 Microsoft Azure 管理门户
单击命令栏上的“ 新建 ”。
创建新网站
单击“ 计算
网站”。 然后选择“ 快速创建 ”选项。 提供新网站的可用 URL,然后单击“ 创建网站”。
注意Windows Azure 网站是在云中运行的 Web 应用程序的主机,可对其进行控制和管理。 使用“快速创建”选项,可以从门户外部将已完成的 Web 应用程序部署到 Windows Azure 网站。 它不包括设置数据库的步骤。
使用“快速创建”创建新网站
等待新 网站 创建完成。
创建网站后,单击 URL 列下的链接。 检查新网站是否正常工作。
浏览到新网站
网站正在运行
返回门户,然后单击“名称”列下的网站名称以显示管理页。
打开网站管理页
在 “仪表板 ”页的 “速览 ”部分下,单击“ 下载发布配置文件” 链接。
注意发布配置文件包含针对每种已启用的发布方法将 Web 应用程序发布到 Windows Azure 网站所需的所有信息。 发布配置文件包含有连接到并且验证该发布方法启用的每个端点所需的 URL、用户凭据和数据库字符串。 Microsoft WebMatrix 2、Microsoft Visual Studio Express for Web 和 Microsoft Visual Studio 2012 支持读取发布配置文件,以自动配置这些程序,以便将 Web 应用程序发布到 Windows Azure 网站。
下载网站发布配置文件
将发布配置文件下载到已知位置。 在本练习中,你将进一步了解如何使用此文件从 Visual Studio 将 Web 应用程序发布到 Windows Azure 网站。
保存发布配置文件
任务 2 - 配置数据库服务器如果应用程序使用SQL Server数据库,则需要创建SQL 数据库服务器。 如果要部署不使用 SQL Server的简单应用程序可以跳过此任务。需要一个SQL 数据库服务器来存储应用程序数据库。 可以在 Windows Azure 管理门户中的 Sql 数据库服务器
服务器的仪表板中查看SQL 数据库服务器。 如果没有创建服务器,可以使用命令栏上的 “添加” 按钮创建一个服务器。 记下 服务器名称和 URL、管理员登录名和密码,因为将在后续任务中使用它们。 暂时不要创建数据库,因为稍后会创建该数据库。
SQL 数据库服务器仪表板
在下一个任务中,你将测试来自 Visual Studio 的数据库连接,因此需要在服务器的“允许的 IP 地址”列表中包括本地 IP 地址。 为此,请单击“ 配置”,从“ 当前客户端 IP 地址”中选择 IP 地址 ,并将其粘贴到“ 开始 IP 地址 ”和“ 结束 IP 地址 ”文本框中,然后单击

添加客户端 IP 地址
将 客户端 IP 地址 添加到允许的 IP 地址列表后,单击“ 保存 ”以确认更改。
确认更改
任务 3 - 使用 Web 部署发布 ASP.NET MVC 4 应用程序返回 ASP.NET MVC 4 解决方案。 在解决方案资源管理器,右键单击网站项目,然后选择“发布”。
发布网站
导入在第一个任务中保存的发布配置文件。
导入发布配置文件
单击“ 验证连接”。 验证完成后,单击“ 下一步”。
注意在“验证连接”按钮旁边显示绿色复选标记后,验证已完成。
验证连接
在 “设置” 页的“ 数据库 ”部分下,单击数据库连接的文本框旁边的按钮, (即 DefaultConnection) 。
Web 部署配置
按如下所示配置数据库连接:
在“服务器名称”中,使用 tcp: 前缀键入SQL 数据库服务器 URL。
在 “用户名” 中,键入服务器管理员登录名。
在 “密码” 中,键入服务器管理员登录密码。
键入新的数据库名称。
配置目标连接字符串
然后单击“确定”。 当系统提示创建数据库时,单击“ 是”。
创建数据库
用于连接到 Windows Azure 中SQL 数据库的连接字符串显示在“默认连接”文本框中。 然后单击“下一步”。
SQL 数据库 的连接字符串
指向SQL 数据库的连接字符串
在 “预览 ”页中,单击“ 发布”。
发布 Web 应用程序
发布过程完成后,默认浏览器将打开已发布的网站。
附录 C:使用代码片段使用代码片段时,你只需触手可及的所有代码。 实验室文档将确切地告诉你何时可以使用它们,如下图所示。使用 Visual Studio 代码片段将代码插入到项目中若要使用键盘 (C# 添加代码片段,请仅) 将光标置于要插入代码的位置。
开始键入代码片段名称 (,) 不带空格或连字符。
观看 IntelliSense 显示匹配的代码片段名称。
选择正确的代码段 (或继续键入,直到) 选择整个代码段的名称。
按 Tab 键两次,将代码片段插入光标位置。
开始键入代码片段名称按 Tab 选择突出显示的代码段再次按 Tab,代码片段将展开若要使用鼠标 (C#、Visual Basic 和 XML 添加代码片段,)
1. 右键单击要插入代码片段的位置。选择“ 插入代码段 ”,然后选择 “我的代码片段”。
通过单击从列表中选择相关代码片段。
右键单击要插入代码片段的位置,然后选择“插入代码段”从列表中选择相关代码片段,方法是单击它

项目
10/25/2023
本文档介绍了将用户从 Microsoft Entra ID 自动预配到 SQL 数据库中和取消预配所需执行的步骤。有关此服务的功能、工作原理以及常见问题解答的重要详细信息,请查看文章使用 Microsoft Entra ID 自动将用户预配到 SaaS 应用程序和取消预配和本地应用程序预配体系结构。以下视频概述了本地预配。预配到 SQL 数据库的先决条件本地先决条件应用程序依赖于一个 SQL 数据库,可在其中创建、更新和删除用户记录。 运行预配代理的计算机应具有:Windows Server 2016 或更高版本。
与目标数据库系统的连接,并且可以出站连接到 login.microsoftonline.com、其他 Microsoft Online Services 和 Azure 域。 例如,托管在 Azure IaaS 或代理后面的 Windows Server 2016 虚拟机。
至少 3 GB 的 RAM,用于托管预配代理。
.NET Framework 4.7.2
适用于 SQL 数据库的 ODBC 驱动程序。
与应用程序数据库的连接配置是通过向导完成的。 根据你选择的选项,一些向导屏幕可能不会出现,并且信息可能略有不同。 请使用以下信息来指导你完成配置。支持的数据库Microsoft SQL Server 和 Azure SQL
IBM DB2 10.x
IBM DB2 9.x
Oracle 10g 和 11g
Oracle 12c 和 18c
MySQL 5.x
MySQL 8.x
Postgres
云要求使用 Microsoft Entra ID P1 或 Premium P2(或者 EMS E3 或 E5)的 Microsoft Entra 租户。
使用此功能需要 Microsoft Entra ID P1 许可证。 要根据需要查找合适的许可证,请参阅比较 Microsoft Entra ID 的正式发布功能。
用于配置预配代理的混合标识管理员角色以及用于在 Azure 门户配置预配的应用程序管理员或云应用程序管理员角色。
要预配到数据库的 Microsoft Entra 用户必须已填充数据库架构所需的任何属性,并且这些属性不是数据库本身生成的。
准备示例数据库本文介绍了将 Microsoft Entra SQL 连接器配置为与应用程序的关系数据库进行交互。 通常,应用程序使用其 SQL 数据库中的表来管理访问,每个用户对应表中一行。 如果已经有一个带有数据库的应用程序,请继续学习下一部分内容。出于演示目的,如果你还没有包含适当表的数据库,应创建一个允许 Microsoft Entra ID 使用的数据库。
如果你使用的是 SQL Server,请运行附录 A 中的 SQL 脚本。此脚本创建一个名为 CONTOSO 的示例数据库,其中包含一个 Employees 表。 这是你将用户预配到的数据库表。表列

ContosoLogin
Microsoft Entra 用户主体名称
FirstName
Microsoft Entra 给定名称
LastName
Microsoft Entra 姓氏
电子邮件
Exchange Online 电子邮件地址
InternalGUID
由数据库本身生成
AzureID
Microsoft Entra 对象 ID
textID
Microsoft Entra ID 邮件别名
确定 Microsoft Entra SQL 连接器与数据库进行交互的方式你需要在 SQL 实例中拥有一个用户帐户,该用户帐户有权更新数据库表中的数据。 如果你的 SQL 数据库由其他人管理,请联系他们以获取 Microsoft Entra ID 用于对数据库进行身份验证的帐户名和密码。 如果 SQL 实例安装在不同的计算机上,还需要确保 SQL 数据库允许来自代理计算机上的 ODBC 驱动程序的传入连接。如果应用程序已有数据库,则需要确定 Microsoft Entra ID 应如何与该数据库交互:通过数据库中已存在的存储过程或通过为查询和更新提供的 SQL 语句,直接与表和视图交互。 此设置是因为较复杂的应用程序可能在其数据库中具有其他辅助表,需要对具有数千用户的表进行分页,或者可能需要 Microsoft Entra ID 调用执行额外数据处理(如加密、哈希或有效性检查)的存储过程。为连接器创建配置以与应用程序数据库交互时,首先需要配置一种方法,以便连接器主机读取数据库的架构,然后通过运行配置文件配置连接器应持续使用的方法。 每个运行配置文件指定连接器生成 SQL 语句的方式。
运行配置文件的选择以及运行配置文件中的方法取决于数据库引擎支持哪些内容以及应用程序的要求。配置后,预配服务启动时,它将自动执行在“完整导入”运行配置文件中配置的交互。
在此运行配置文件中,连接器将读取应用程序数据库中用户的所有记录,通常使用“SELECT”语句。
此运行配置文件是必需的,以便稍后如果 Microsoft Entra ID 需要为用户执行更改,Microsoft Entra ID 可知道在数据库中为该用户更新现有记录,而不是为该用户创建新记录。
每次在 Microsoft Entra ID 进行更改(例如,向应用程序分配新用户或更新现有用户)时,预配服务都执行 SQL 数据库交互配置的“导出”运行配置文件。 在“导出”运行配置文件中,Microsoft Entra ID 将发出 SQL 语句以在数据库中插入、更新和删除记录,使数据库的内容与 Microsoft Entra ID 同步。
如果数据库支持它,还可以选择性地配置“增量输入”运行配置文件。 在此运行配置文件中,Microsoft Entra ID 读取自上次完整导入或增量导入以来在数据库中所做的更改(而不是 Microsoft Entra ID 所做的更改)。
此运行配置文件是可选的,因为它需要结构化数据库以支持读取更改。
在连接器的每个运行配置文件的配置中,你需要指定 Microsoft Entra 连接器是应为表或视图生成自己的 SQL 语句、调用存储过程,还是应使用你提供的自定义 SQL 查询。
通常,你将对连接器中所有运行配置文件使用相同的方法。如果选择运行配置文件的表或视图方法,Microsoft Entra 连接器将生成必要的 SQL 语句“SELECT”、“INSERT”、“UPDATE”和“DELETE”,以便与数据库中的表或视图交互。
如果数据库包含单个表或一个可更新的视图,且其中现有行较少,则此方法是最简单的方法。
如果选择“存储过程”方法,则数据库需要具有四个存储过程:读取用户页、添加用户、更新用户和删除用户,你将使用要调用的这些存储过程的名称和参数来配置 Microsoft Entra 连接器。
此方法需要在 SQL 数据库中进行更多配置,并且通常仅在应用程序需要对用户的每次更改进行更多处理时,才需要该方法,以通过大型结果集进行分页。
如果选择“SQL 查询”方法,则需要在运行配置文件期间键入希望连接器发布的特定 SQL 语句。
你需要使用连接器应在 SQL 语句中填充的参数来配置连接器(例如,在导入期间对结果集进行分页,或在导出过程中设置要创建的新用户的属性)。
本文演示如何在“导出”和“全部导入”运行配置文件中使用表方法与示例数据库表 Employees 交互。 若要详细了解如何配置存储过程或 SQL 查询方法,请参阅通用 SQL 配置指南,其中提供了更多详细信息和具体要求。选择应用程序数据库架构中的唯一标识符大多数应用程序对应用程序的每个用户都有唯一标识符。
如果要预配到现有数据库表中,则应标识该表中的某一列,该列包含对应于每个用户的一个值,该值唯一且不会更改。
此列将是“定位点”,供 Microsoft Entra ID 用于标识现有行,以便更新或删除它们。 有关定位点的详细信息,请参阅关于定位点属性和可分辨名称。如果应用程序的数据库已存在,其中有用户,并且你想让 Microsoft Entra ID 保持这些用户处于最新状态,则需要为每个用户提供一个标识符,该标识符在应用程序的数据库和 Microsoft Entra 架构之间是相同的。
例如,如果将用户分配到 Microsoft Entra ID 中的应用程序,并且该用户已位于该数据库中,则 Microsoft Entra ID 中的该用户更改应会更新该用户的现有行,而不是添加新行。
由于 Microsoft Entra ID 可能未存储该用户的应用程序内部标识符,因此需要选择另一列来查询数据库。 此列的值可以是应用程序范围内 Microsoft Entra ID 中每个用户的用户主体名称、电子邮件地址、员工 ID 或其他标识符。
如果应用程序使用的用户标识符不是存储在用户的 Microsoft Entra 表示形式中的属性,则无需使用扩展属性扩展 Microsoft Entra 用户架构,也无需从数据库中填充该属性。
可以使用 PowerShell 扩展 Microsoft Entra 架构并设置扩展值。将 Microsoft Entra ID 中的属性映射到数据库架构如果 Microsoft Entra ID 已在 Microsoft Entra ID 中的用户和数据库中的记录之间建立联系,无论是对于数据库中已有的用户还是新用户,Microsoft Entra ID 都可以将属性更改从 Microsoft Entra 用户预配到数据库中。 除唯一标识符之外,请检查你的数据库以确定是否有任何其他必需的属性。
如果有,请确保将被预配到数据库中的用户具有可映射到所需属性的特性。还可配置取消配置行为。
如果分配给应用程序的用户在 Microsoft Entra ID 中被删除,则 Microsoft Entra ID 将向数据库发送删除操作。
当用户超出使用应用程序的范围时,你可能还希望让 Microsoft Entra ID 更新数据库。
如果用户从应用中被取消分配、在 Microsoft Entra ID 中被软删除或被阻止登录,则可以将 Microsoft Entra ID 配置为发送属性更改。
如果要预配到现有数据库表中,则需要将该表的某一列映射到 isSoftDeleted。
当用户超出范围时,Microsoft Entra ID 会将该用户的值设置为 True。1. 安装 ODBC 驱动程序将在其中安装预配代理的 Windows Server 需要适用于目标数据库的 ODBC 驱动程序。
如果你打算连接到 SQL Server 或 Azure SQL 数据库,应下载适用于 SQL Server (x64) 的 ODBC 驱动程序,然后在 Windows Server 上安装该驱动程序。 对于其他 SQL 数据库,请参阅独立软件供应商提供的关于如何安装 ODBC 驱动程序的指导。2. 创建 DSN 连接文件通用 SQL 连接器需要数据源名称 (DSN) 文件才能连接到 SQL 终结点。 首先,需要创建一个包含 ODBC 连接信息的文件。在服务器上启动 ODBC 管理实用工具。
使用 64 位版本。
选择“DSN 文件”选项卡,然后选择“添加” 。
如果你使用的是 SQL Server 或 Azure SQL,请选择“SQL Server Native Client 11.0”,然后选择“下一步”。 如果你使用的是其他数据库,请选择其 ODBC 驱动程序。
为文件指定名称,如“GenericSQL”,选择“下一步”。
选择“完成”。
配置连接。 如果 SQL Server 位于不同的服务器计算机上,则输入该服务器的名称。 然后,选择“下一步”。
根据你使用的 ODBC 驱动程序,以下步骤会有所不同。
这些设置假定你正在使用驱动程序连接到 SQL Server。
如果正在运行此步骤的用户有权连接到数据库,请选择 Windows 身份验证。 如果 SQL Server 管理员需要 SQL 本地帐户,则改为提供这些凭据。 然后,选择“下一步”。
输入数据库的名称,本例中的名称为 CONTOSO。
保留此屏幕上默认设置的所有内容,选择“完成”。
如要验证所有设置是否正常工作,请单击“测试数据源”。
请确保测试成功。
选择“确定”两次。 关闭 ODBC 数据源管理器。 默认情况下,DSN 连接文件保存到“Documents”文件夹。
3.安装并配置 Microsoft Entra Connect 预配代理如果已经下载了预配代理并为另一个本地应用程序进行了配置,请继续阅读下一节。登录到 Azure 门户。
请转到“企业应用程序”并选择“新建应用程序”。
搜索“本地 ECMA 应用”应用程序,为该应用命名,然后选择“创建”以将其添加到租户。
在菜单中导航到应用程序的“预配”页。
选择“开始”。
在“预配”页上,将模式更改为“自动”。
在“本地连接”下,选择“下载并安装”,然后选择“接受条款&下载。
离开门户,打开预配代理安装程序,同意服务条款,然后选择“下一步”。
打开预配代理向导。
在“选择扩展”步骤中,选择“本地应用程序预配”,然后选择“下一步”。
预配代理将使用操作系统的 Web 浏览器显示一个弹出窗口,供你向 Microsoft Entra ID 进行身份验证,还可能向组织的标识提供者进行身份验证。
如果使用 Internet Explorer 作为 Windows Server 上的浏览器,那么可能需要将 Microsoft 网站添加到浏览器的受信任站点列表中,以允许 JavaScript 正常运行。
当系统提示你授权时,请提供 Microsoft Entra 管理员的凭据。 用户需要具有混合标识管理员角色或全局管理员角色。
选择“确认”以确认设置。 安装成功后,可以选择“退出”,并关闭“预配代理包”安装程序。
4. 配置本地 ECMA 应用返回到门户,在“本地连接”部分,选择已部署的代理,然后单击“分配代理”。
在使用配置向导完成下一步配置时,请保持此浏览器窗口为打开状态。
5.配置 Microsoft Entra ECMA 连接器主机证书在安装了预配代理的 Windows Server 上,右键单击开始菜单中的“Microsoft ECMA2Host 配置向导”,以管理员身份运行。
必须以 Windows 管理员身份运行,向导才能创建必要的 Windows 事件日志。
在 ECMA 连接器主机配置启动后,如果这是你第一次运行该向导,它将要求你创建证书。 保留默认端口 8585 并选择“生成证书”以生成证书。 自动生成的证书将作为部分受信任根证书进行自签名。 证书 SAN 与主机名匹配。
选择“保存”。
注意如果选择生成新证书,请记录证书到期日期,以确保计划在证书到期前返回配置向导并重新生成证书。6. 创建通用 SQL 连接器在本部分中,你将为数据库创建连接器配置。6.1 配置 SQL 连接若要创建通用 SQL 连接器,请按照下列步骤操作:生成一个机密令牌,用于向连接器验证 Microsoft Entra ID。
它至少应为 12 个字符,并且对于每个应用程序都是唯一的。
如果还没有这样做,请从 Windows 开始菜单启动“Microsoft ECMA2Host 配置向导”。
选择“新建连接器”。
在“属性”页的文本框中填入图片下表格中的数值,选择“下一步”。
属性

名称
为连接器选择的名称,它在环境中的所有连接器中应是唯一的。 例如,如果你只有一个 SQL 数据库,则为 SQL。
自动同步计时器(分钟)
120
机密令牌
输入你为此连接器生成的机密令牌。 密钥长度应不少于 12 个字符。
扩展 DLL
对于通用 SQL 连接器,请选择“Microsoft.IAM.Connector.GenericSql.dll”。
在“属性”页,在文本框中填写图片下面表格中的数值,选择“下一步”。
properties
说明
DSN 文件
在上一步中创建的数据源名称文件,用于连接到 SQL 实例。
用户名
有权对 SQL 实例中的表进行更新的帐户的用户名。 如果目标数据库是 SQL Server,并且你正在使用 Windows 身份验证,那么对于独立服务器,用户名必须采用 hostname\sqladminaccount 格式,对于域成员服务器,则必须采用 domain\sqladminaccount 格式。
Password
提供的用户名的密码。
DN 是定位点
除非已知环境需要这些设置,否则不要选中“DN 为定位点”和“导出类型: 对象替换”复选框 。
6.2 从数据库中检索架构提供凭据后,ECMA 连接器主机将准备好检索数据库的架构。 继续进行 SQL 连接配置:在“架构 1”页面上,指定对象类型列表。 在此示例中,有一个对象类型 User。 在文本框中填写图片下方的表中指定的值,然后选择“下一步”。
属性

对象类型检测方法
固定值
固定值列表/表/视图/SP
用户
选择“下一页”后,下一个页面会自动显示,用于配置 User 对象类型。 在“架构 2”页上,你将指示用户在你的数据库中是如何表现的。 在本例中,它是一个名为 Employees 的单一 SQL 表。 在文本框中填写图片下方的表中指定的值,然后选择“下一步”。
属性

用户: 属性检测

用户: 表/视图/SP
Employees
注意如果发生错误,请检查数据库配置,以确保在“连接”页上指定的用户对数据库架构拥有读取访问权限。
选择“下一页”后,下一个页面会自动显示,供你选择要用作用户的 Anchor 和 DN 的 Employees 表的列。
在“架构 3”页的文本框中填写图片下表格中的数值,选择“下一步”。
properties
说明
为以下用户选择定位点:User
用户:ContosoLogin
选择用户的 DN 属性
AzureID
选择“下一页”后,下一个页面会自动显示,用于确认 Employee 表的每一列的数据类型,以及连接器是应导入还是导出它们。 在“架构 4”页,保留默认值,选择“下一步”。
在“全局”页上,填写文本框,然后选择“下一步” 。 按照图像下方的表填写各个文本框。
properties
说明
数据源日期时间格式
yyyy-MM-dd HH:mm:ss
在“分区”页,选择“下一步”。
6.3 配置运行配置文件接下来,你将配置“导出”和“完全导入”运行配置文件。
当 ECMA 连接器主机需要将 Microsoft Entra ID 中的更改发送到数据库时,将使用“导出”运行配置文件来插入、更新和删除记录。
当 ECMA 连接器主机服务启动时,将使用“完全导入”运行配置文件来读取数据库的当前内容。
在此示例中,你将在两个运行配置文件中使用 Table 方法,以便 ECMA 连接器主机生成必需的 SQL 语句。继续进行 SQL 连接配置:在“运行配置文件”页,保持“导出”复选框为选中状态。 选择“全部导入”复选框,选择“下一步”。
properties
说明
导出
将数据导出到 SQL 的运行配置文件。 此运行配置文件是必选的。
完全导入
将从前面指定的 SQL 源导入所有数据的运行配置文件。
增量导入
将仅导入自上次完整导入或增量导入后的 SQL 更改的运行配置文件。
选择“下一页”后,下一个页面会自动显示,可在其中配置“导出”运行配置文件的方法。 在“导出”页,填写文本框,选择“下一步”。 按照图像下方的表填写各个文本框。
properties
说明
操作方法

表/视图/SP
Employees
填写“全部导入”页的文本框,选择“下一步”。 按照图像下方的表填写各个文本框。
properties
说明
操作方法

表/视图/SP
Employees
6.4 配置属性在 Microsoft Entra ID 中的显示方式在 SQL 连接设置的最后一步,配置如何在 Microsoft Entra ID 中显示属性:填写“对象类型”页的文本框,选择“下一步”。 按照图像下方的表填写各个文本框。
定位点:此属性的值对于目标数据库中的每个对象都应是唯一的。 Microsoft Entra 预配服务将在初始周期后使用此属性查询 ECMA 连接器主机。 此定位点值应与之前在“架构 3”页上配置的定位点值相同。
查询属性:此属性应当与定位点相同。
DN:在大多数情况下,应选择“自动生成”选项。 如果取消选中此项,请确保将 DN 属性映射到 Microsoft Entra ID 中的属性,按以下格式存储 DN:CN = anchorValue,对象 = objectType。
有关定位点和 DN 的详细信息,请参阅关于定位点属性和可分辨名称。
属性
说明
“目标对象”
用户
定位点
ContosoLogin
查询属性
ContosoLogin
DN
ContosoLogin
自动生成
已选中
ECMA 连接器主机可发现目标数据库支持的属性。 可以选择要公开给 Microsoft Entra ID 的属性。 然后,可在 Azure 门户中配置这些属性以进行预配。 在“选择属性”页面上,添加下拉列表中的所有属性,一次添加一个。
“属性”下拉列表中显示在目标数据库中发现、且先前未在“选择属性”页中选择的任何属性。 添加所有相关属性后,选择“下一步”。
在“取消预配”页,“禁用流”下,选择“删除”。 在前一个页中选择的属性将无法在“取消预配”页中进行选择。 选择“完成”。
注意如果选择设置属性值,请注意仅允许布尔值。7. 确保 ECMA2Host 服务正在运行在运行 Microsoft Entra ECMA 连接器主机的服务器上,选择“启动”。
在框中键入“run”,并输入“services.msc”。
在“服务”列表,确保“Microsoft ECMA2Host”存在且正在运行。 否则,请选择“启动”。
如果要连接到一个新的数据库或一个空的且没有用户的目录服务器,请继续阅读下一节。 否则,请按照以下步骤确认连接器已从数据库中识别出现有用户。如果最近启动了该服务,并且数据库中有许多用户对象,请等待几分钟,让连接器与数据库建立连接。
8. 在 Azure 门户中配置应用程序连接返回到在其中配置应用程序预配的 Web 浏览器窗口。
注意如果窗口已超时,则需要重新选择代理。
登录到 Azure 门户。
转到“企业应用程序”和“本地 ECMA 应用”应用程序 。
选择“预配”。
如果出现“开始”,则将模式更改为“自动”,在“本地连接”部分,选择部署的代理并选择“分配代理”。 否则,请转到“编辑预配”。
在“管理员凭据”部分中,输入以下 URL。 将 {connectorName} 部分替换为 ECMA 连接器主机上的连接器名称,例如“SQL”。 连接器名称区分大小写,并且应该与向导中配置的大小写相同。 也可以将 localhost 替换为计算机主机名。
属性
Value
租户 URL
https://localhost:8585/ecma2host_{connectorName}/scim
输入你在创建连接器时定义的“机密令牌”值。
注意如果你刚刚将代理分配到应用程序,请等待 10 分钟,以便完成注册。 在注册完成之前,连接性测试将无法正常工作。 通过在服务器上重新启动预配代理来强制完成代理注册,可以加快注册过程。 转到你的服务器,在 Windows 搜索栏中搜索“服务”,找到“Microsoft Entra Connect 预配代理服务”,右键单击该服务并重启。
单击“测试连接性”并等待一分钟。
连接测试成功并表明提供的凭据有权启用预配后,选择“保存”。
9. 配置属性映射现在,需要在 Microsoft Entra ID 中的用户表示形式与本地应用程序的 SQL 数据库中的用户表示形式之间映射属性。你将使用 Azure 门户配置 Microsoft Entra 用户的属性与你之前在 ECMA 主机配置向导中选择的属性之间的映射。确保 Microsoft Entra 架构包含数据库所需的属性。 如果数据库要求用户具有一个属性(例如 uidNumber),而该属性还不是用户的 Microsoft Entra 架构的一部分,那就需要使用目录扩展功能将该属性添加为扩展。
在 Microsoft Entra 管理中心的“企业应用程序”下,选择“本地 ECMA 应用”应用程序,然后选择“预配”页面。
选择“编辑预配”,然后等待 10 秒。
展开“映射”,然后选择“预配 Microsoft Entra 用户”。 如果这是首次为此应用程序配置属性映射,则仅有一个用于占位符的映射存在。
要确认数据库的架构在 Microsoft Entra ID 中可用,请选中“显示高级选项”复选框并选择“编辑 ScimOnPremises 的属性列表”。 确保列出配置向导中选择的所有属性。
如果没有,请等待几分钟让架构刷新,然后重新加载页面。
看到属性列出后,从此页面取消以返回到映射列表。
现在,单击“userPrincipalName”占位符映射。
首次配置本地预配时,默认会添加此映射。
更改此值以匹配以下内容:映射类型
源属性
目标属性
直接
userPrincipalName
urn:ietf:params:scim:schemas:extension:ECMA2Host:2.0:User:ContosoLogin
现在选择“添加新映射”,并为每个映射重复接下来的步骤。
为下表中的每个映射指定源和目标属性。
映射类型
源属性
目标属性
直接
userPrincipalName
urn:ietf:params:scim:schemas:extension:ECMA2Host:2.0:User:ContosoLogin
直接
objectId
urn:ietf:params:scim:schemas:extension:ECMA2Host:2.0:User:AzureID
直接
mail
urn:ietf:params:scim:schemas:extension:ECMA2Host:2.0:User:Email
直接
givenName
urn:ietf:params:scim:schemas:extension:ECMA2Host:2.0:User:FirstName
直接
surname
urn:ietf:params:scim:schemas:extension:ECMA2Host:2.0:User:LastName
直接
mailNickname
urn:ietf:params:scim:schemas:extension:ECMA2Host:2.0:User:textID
添加所有映射后,选择“保存”。
让 Microsoft Entra ECMA 连接器主机与 Microsoft Entra ID 通信并配置属性映射后,接下来即可继续配置预配对象的范围。重要如果使用混合标识管理员角色登录,则在本部分,需要先注销,然后使用具有应用程序管理员、云应用程序管理员或全局管理员角色的帐户登录。
混合标识管理员角色无权将用户分配到应用程序。如果 SQL 数据库中存在现有用户,则应为这些现有用户创建应用程序角色分配。 若要详细了解如何批量创建应用程序角色分配,请参阅管理 Microsoft Entra ID 中的应用程序现有用户。否则,如果没有应用程序的当前用户,则从 Microsoft Entra 中选择一个将预配到应用程序的测试用户。确保将要选择的用户具有将映射到数据库架构所需特性的所有属性。
在 Microsoft Azure AD 门户中,选择“企业应用程序”。
选择“本地 ECMA 应用”应用程序。
在左边的“管理”下,选择“用户和组” 。
选择“添加用户/组”。
在“用户”下,单击“未选择”。
在屏幕右侧选择用户,单击“选择”按钮。
单击“分配”。
11. 测试预配属性已映射完毕并且已分配用户,接下来可通过一个用户测试按需预配。在 Microsoft Azure AD 门户中,选择“企业应用程序”。
选择“本地 ECMA 应用”应用程序。
在左侧,选择“预配”。
选择“按需预配”。
搜索一个测试用户,选择“预配”。
几秒钟后,将出现消息“已在目标系统中成功创建用户”,其中包含用户属性列表。
12. 开始预配用户按需预配成功后,返回“预配配置”页。 确保将范围设置为“仅限已分配的用户和组”,将预配状态设置为“开启”,单击“保存”。
等待几分钟,以便系统开始预配。 该过程可能需要用时 40 分钟以上。 预配作业完成后,如果已完成测试,可以按照下一部分所述,将预配状态更改为“关”,然后选择“保存”。 此操作将停止预配服务的运行。
排除预配错误如果显示错误,请选择“查看预配日志”。
在日志中查找状态为“失败”的行,然后选择该行。如果错误消息是“无法创建用户”,则根据数据库架构的要求检查显示的属性。有关详细信息,请转到“疑难解答”&“建议”选项卡。如果 ODBC 驱动程序返回一条消息,它将显示在这里。
例如,消息 ERROR [23000] [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot insert the value NULL into column 'FirstName', table 'CONTOSO.dbo.Employees'; column does not allow nulls. 是指 ODBC 驱动程序出现错误。 在这种情况下,column does not allow nulls 可能指示数据库中的 FirstName 列是必需的,但要预配的用户没有 givenName 属性,因此无法预配用户。检查用户是否已成功预配等待完毕,检查 SQL 数据库,确保正在预配用户。附录 A如果你使用的是 SQL Server,可以使用以下 SQL 脚本来创建示例数据库。---Creating the Database---------
Create Database CONTOSO
Go
-------Using the Database-----------
Use [CONTOSO]
Go
-------------------------------------
/****** Object:
Table [dbo].[Employees]
Script Date: 1/6/2020 7:18:19 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Employees](
[ContosoLogin] [nvarchar](128) NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[Email] [nvarchar](128) NULL,
[InternalGUID] [uniqueidentifier] NULL,
[AzureID] [uniqueidentifier] NULL,
[textID] [nvarchar](128) NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Employees] ADD
CONSTRAINT [DF_Employees_InternalGUID]
DEFAULT (newid()) FOR [InternalGUID]
GO
后续步骤本地应用程序预配疑难解答
查看已知限制

我要回帖

更多关于 怎么删除已经建立的数据库 的文章