目录
介绍
先决条件
在Visual Studio 2019中创建新的ASP.NET Core Web API项目
使用Entity Developer创建实体数据模型
创建API控制器
通过实体数据模型读取数据
摘要
介绍Devart的Entity Developer是一个非常强大的建模和代码生成工具,更精确地说是一个ORM工具。Entity Developer使您可以一目了然地可视化设计数据访问层。由于Devart生成的数据访问层包含自动生成的代码,因此出错的可能性很小。
Entity Developer的官方网站指出:“Entity Developer可以在一个统一的界面中帮助您设计各种.NET ORM的模型。您可以在一个工具中获得对所有ORM的支持,也可以购买单独的版本,并使用其中的一种支持的ORM。”
参考:https://www.devart.com/entitydeveloper/
Entity Developer支持ADO.NET实体框架,实体框架核心(EF Core),Hibernate,LinqConnect,Telerik数据访问和LINQ to SQL。它使用数据库优先方法,并说明如何与ORM设计器和代码生成工具一起使用。本文讨论了如何与Entity Developer一起在ASP.NET Core 3.1中构建RESTful服务。
先决条件为了能够使用本文中演示的代码示例,您应该在系统中安装以下组件:
- Visual Studio 2019社区版
- SQL Server 2019开发人员版
- Entity Developer
您可以从此链接下载.NET Core 3.1 。
您可以从此链接下载Visual Studio 2019 。
您可以从此链接下载SQL Server 2019 Developer Edition 。
您还应该下载并还原AdventureWorks数据库,这是系统中在线事务处理(OLTP)的Microsoft产品示例。您可以从此链接下载系统中的AdventureWorks数据库副本。
在Visual Studio 2019中创建新的ASP.NET Core Web API项目假设您的计算机上已经安装了必要的软件,以便可以与Entity Developer一起使用,请按照下面概述的步骤创建一个新的ASP.NET Core Web API项目。
- 首先,打开Visual Studio 2019 IDE
- 接下来,在IDE加载后,单击“创建新项目”
- 点击“创建一个新项目 ”
- 接下来,选择“ASP.NET Core Web应用程序”
- 点击“下一步”按钮
- 指定项目名称和位置——应将其存储在系统中的位置
- (可选)单击“将解决方案和项目放在同一目录中”复选框。
- 接下来,点击“创建”按钮
- 在接下来显示的“创建新的ASP.NET Core Web应用程序”对话框窗口中,选择“API”作为项目模板。
- 选择ASP.NET Core 3.1或更高版本。
- 您应该通过禁用相应的复选框来禁用“为HTTPS配置”和“启用Docker支持”选项。
- 由于在此示例中将不使用身份验证,因此将身份验证指定为“No Authentication”。
- 最后,单击“创建”按钮以完成该过程。
在本节中,我们将探索如何使用Entity Developer创建实体数据模型。要在Visual Studio 2019中使用Entity Developer创建实体数据模型,请遵循以下概述的步骤:
1、在“解决方案资源管理器”窗口中右键单击项目
2、选择添加 -> 新项目
图1
这将启动“Entity Developer:创建模型向导”窗口,如下所示:
图2
这是您应该指定应如何创建模型的方式。有两个选项:“数据库优先”(默认情况下处于选中状态)和“模型优先”。在此示例中,我们将利用“数据库优先”方法。
3、单击“下一步”按钮继续。
4、在下一个截图中,指定连接属性,然后单击“下一步”按钮继续。
图3
在下一个截图中,您应该指定模型应包含的内容。缺省情况下,“从数据库生成”选项处于选中状态,如下图所示:
图4
5、由于我们需要从数据库中创建模型,因此单击“下一步”按钮继续。
在下一个截图中,Entity Developer运行时将检索数据库元数据,这是选择数据库对象的方式。
图5
6、取消选择所有选项,然后仅指定要成为模型一部分的数据库对象。为了简单起见,我们仅选择Person和EmailAddress表。
图6
7、在“设置命名规则”截图中,您可以为实体指定命名规则。
图7
8、由于我们不会在此处进行任何更改,因此请单击“下一步”按钮继续。
接下来显示的截图是“模型属性”,如下图所示:
图8
9、将上下文命名空间指定为“AdventureWorksModel”,然后单击“下一步”按钮继续。在下一个截图中,您可以指定模型图应包含的内容。
图9
请注意,将显示我们之前选择的两个数据库对象,并且默认情况下会选择“所有实体”单选按钮。
10、由于我们此处将不会进行任何更改,因此请单击“下一步”按钮继续。在下一个截图中,您可以根据需要选择代码生成模板。
图10
11、由于这里我们将不做任何修改,因此请单击“下一步”按钮继续。
12、在下一个截图中,单击“下一步”按钮继续。
图11
13、单击“完成”以完成该过程。
使用Entity Developer的ADO.NET实体数据模型已创建。实体数据模型如下所示:
图12
创建API控制器到目前为止,一切都很好。现在已经创建了Web API项目和实体数据模型,下一步是创建将用于与实体数据模型进行交互的API控制器。为此,请按照以下概述的步骤操作:
1、在解决方案资源管理器窗口中选择项目
图13
2、右键单击并选择添加 -> 控制器
3、在“添加新脚手架项目”窗口中,选择“具有读/写操作的API控制器”作为模板
图14
4、点击添加在下一个截图中,指定控制器的名称。让我们将控制器命名为DefaultController。
5、单击添加以创建控制器并将其添加到您的项目中
在下面的部分中,我们将使用此控制器来编写操作方法。
通过实体数据模型读取数据在本节中,我们将研究如何使用在上一节中创建的实体数据模型从数据库AdventureWorks读取数据。
创建一个使用以下代码命名的IAdvantureWorksRepository接口:
public interface IAdventureWorksRepository
{
PersonDTO GetPerson(int personId);
}
创建一个名为PersonDTO的新类,并在其中添加以下代码:
public class PersonDTO
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string EmailAddress { get; set; }
}
创建一个内部包含以下内容的AdventureWorksRepository类:
public class AdventureWorksRepository: IAdventureWorksRepository
{
public PersonDTO GetPersonById(int personId)
{
using(AdventureWorksModel dbContext = new
AdventureWorksModel())
{
var query = from p in dbContext.People join e in
dbContext.EmailAddresses
on p.BusinessEntityID equals e.BusinessEntityID
where p.BusinessEntityID == personId
select new PersonDTO
{
FirstName= p.FirstName,
LastName= p.LastName,
EmailAddress = e.EmailAddress1
};
return query.SingleOrDefault();
}
}
}
AdventureWorksRepository类扩展IAdventureWorksRepository接口并实现GetPersonById方法。该GetPersonById方法返回PersonDTO的实例。
以下代码段显示了如何在Startup类的ConfigureServices方法中添加我们作为范围服务创建的服务AdventureWorksRepository。
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped(typeof(IAdventureWorksRepository),
typeof(AdventureWorksRepository));
services.AddControllers();
}
现在,我们可以利用控制器中的依赖项注入,如下面的代码片段所示:
public class DefaultController : ControllerBase
{
private readonly IAdventureWorksRepository _adventureWorksRepository;
public DefaultController(IAdventureWorksRepository adventureWorksRepository)
{
_adventureWorksRepository = adventureWorksRepository;
}
//Action methods
}
以下代码段显示了如何编写一个操作方法,该方法接受业务实体ID作为参数,然后调用AdventureWorksRepository的GetPersonById方法。
[HttpGet("{id}", Name = "Get")]
public string Get(int id)
{
var person = _adventureWorksRepository.GetPerson(id);
return JsonConvert.SerializeObject(person);
}
下面的代码清单是该DefaultController类的完整代码,供您参考。
[Route("api/[controller]")]
[ApiController]
public class DefaultController : ControllerBase
{
private readonly IAdventureWorksRepository
_adventureWorksRepository;
public DefaultController(IAdventureWorksRepository
adventureWorksRepository)
{
_adventureWorksRepository = adventureWorksRepository;
}
[HttpGet]
public string Get()
{
return "Demonstrating Entity Developer";
}
[HttpGet("{id}", Name = "Get")]
public string Get(int id)
{
var person = _adventureWorksRepository.GetPersonById(id);
return JsonConvert.SerializeObject(person);
}
}
当您执行应用程序并点击Get(int id)端点时,输出如下:
图15
摘要来自Devart的Entity Developer帮助您提高开发人员的工作效率——它支持使用ADO.NET Entity Framework,Entity Framework Core,Hibernate,LinqConnect,Telerik Data Access和LINQ to SQL。Entity Developer也内置于Devart ADO.NET数据提供程序中——这是链接:https://www.devart.com/dotconnect/。
从以下位置下载试用版后,您可以开始使用Entity Developer:https://www.devart.com/entitydeveloper/download.html。