EF6 秘籍 2th:Entity Framework 入门(三)使用EF

    EF是同VS高度整合的,为了在项目中实现EF,需要添加一个ADO.NET实体数据模型。

    下面我们以一个控制台应用程序为基础,练习使用EF。(C#,EF6.1.3)

    1.新建一个控制台应用程序。

    2.添加ADO.NET实体数据模型:右击项目,选择添加->新建项。在打开的对话框中选择ADO.NET实体数据模型,其路径为:已安装->Visual C#项->数据。如图所示:

wKioL1ZX5-CCoHgIAAEI6EJ8a80748.png

编辑名称,点击添加按钮,将打开如下对话框:

wKiom1ZX5_KDNU62AACa2oNalfM986.png

模型内容分为2类:

    1类是数据库已经存在的。根据开发人员的习惯可以选择来自数据库的EF设计器来自数据库的Code First模型。这2种模型可以称为基于数据库的模型优先方法和基于数据库的代码优先方法。使用上述2种方式,可以使用向导将后台数据库中的表、视图和存储过程根据需要有选择性的导入,最后生成一个模型和实体类。数据库中的关系被模型化为关联。然后使用模式优先或者代码优先对已生成的模型进行调整,以使其更符合开发需求。

    选择基于数据库的模型,都需要选择数据库连接。但是EF设计器和Code First在数据库连接字符串的配置内容上是由差异的。其次在选择指定的数据库连接后,EF设计器还需要选择EF的版本,而Code First却没有这一步。最后在选择数据库对象和配置上有也差异,Code First没有存储过程和函数复选框,然后配置选项也不一样。

    2类是开发一个全新的,没有数据库已经存在的应用。这里也有2种不同的方式:空EF设计器模型和空Code First模型。也就是模型优先和代码优先。

    模型优先就是使用EF设计器构建模型。在设计界面可以通过右键选择需要构建的模型,也可以通过工具箱拖动需要的模型到设计界面。当设计完成后,右击设计界面,选择“根据模型生成数据库”选项。这将产生一个根据模型生成的用于创建数据库表和关系的脚本。

    代码优先就是在VS中手动生成每个实体类,然后在DbContext对象中注册它们,将它们同EF服务关联起来。EF映射这些类到后台数据库并在运行时自动在内存中生成一个模型。所以这里没有edmx文件存在

    下图显示了在设计器中,一个模型的关键内容。

wKioL1ZX8S_zPfB-AAZ0uXEmEcI358.png    

    在这个模型中,有Customer和Order 两个实体类型,并且Customer跟Order有一个1对多的关联。在映射详细信息窗口显示了Customer实体类型与数据库Customer表的映射细节。映射详细窗口可以通过视图->其他窗口->实体数据模型映射详细信息打开。在代码优先方法中,可以通过使用数据标注(data annotations)和fluentAPI特性完成同样的映射配置。

    使用模型优先方法会在项目中生成一个.edmx文件,这个文件包含完整的模型定义,包括概念层,存储层和映射层。

    不论使用数据库优先、模型优先还是代码优先,最终都会生成一个模型。我们就可以使用模型中的对象进行编程就像使用其他对象一样。

    如果想插入一个新的客户和订单到数据库,你先生成Customer和Order类型的实例,然后设置实例的属性,并将它们添加到模型的内存上下文中,然后调用内存上下文(DbContext/ObjectContext)的SaveChanges()方法。EF将产生所有必要的SQL代码,并发送它们到数据库以插入数据。为了从数据库中获取客户和订单数据,可以使用LINQ或者Entity SQL根据模型中的实体类型和关联生成一个查询。

你可能感兴趣的:(使用EF)