Entity Framework是一个开源的ORM(Object Relational Mapping)框架,它允许我们通过使用.Net语言进行开发工作,同时又隐藏了底层ORM Query语言的操作,从而大大减轻了我们的工作负担。
在EF中,有两种常见的开发模式:数据库优先和模型优先。其中,模型优先的方式作为一种高效、简化开发过程的策略,更加广泛使用。在EF中,模型优先显得尤为可取和优秀。本文将详细讲解EF模型优先的过程,包含以下几个步骤:
步骤1:定义模型对象
第一步骤就是在Visual Studio中创建一个新的Class Library项目,并在项目中添加“ADO.NET Entity Data Model”项目项。
然后,我们需要使用向导创建我们的实体对象映射。在向导中,我们需要依次设置以下内容:
- 选择数据源
- 数据源设置
- 数据库对象选择
- 数据库对象选择的选项
- 选择实体对象
完成以上步骤后,我们就可以在我们的项目中看到生成的Model1.edmx文件;同时,我们也可以看到自动生成的实体对象。
步骤2:添加查询方法
接下来,我们需要为EF模型添加查询方法。我们可以在自动生成的实体对象类上添加查询方法,或者创建新的查询方法类。
这里,我会给大家提供一个范例。我们假设我们在EF模型中添加了Department类,但是,该类缺少特定的查询方法。我们可以通过扩展该实体对象类添加一个新的方法:
public static class DepartmentDAO
{
public static Department GetDepartmentById(int departmentId)
{
using (CompaniesDBEntities context = new CompaniesDBEntities())
{
return context.Departments.SingleOrDefault(d => d.DepartmentId == departmentId);
}
}
}
在该示例中,我们通过在自动生成的Department类上扩展静态类DepartmentDAO,在该类中添加GetDepartmentById方法,并通过LINQ查询返回指定的对象。
步骤3:配置数据库连接字符串
配置数据库连接字符串是EF模型优先的第三个步骤。我们需要在App.config或Web.config文件中添加以下代码,以指示EF连接到正确的数据库:
<connectionStrings>
<add name="CompaniesDBEntities"
connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=ourSqlInstance;initial catalog=ourDatabase;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
需要注意的是,在上面的配置中,最重要的是给连接字符串指定数据源地址、数据库名称和安全选项即可。同时,为了保证使用的是EF,需要定义好provider和provider connection string。
到此为止,我们就完成了EF模型优先的开发工作。
我们还可以利用扩展方法,为LINQ提供更多方便的接口。如,我们可以扩展Department类,为其添加DepartmentWithEmployees方法。该方法使用LINQ query返回具有相关员工列表的部门对象。举例如下:
public static class DepartmentExtensions
{
public static IQueryable<Department> DepartmentWithEmployees(this IQueryable<Department> query)
{
return query.Include(d => d.Employees);
}
}
在该示例中,使用LINQ的Include方法,将Employees导航属性添加到查询中。
综上所述,这些步骤构成了模型优先开发模式的核心。通过这些步骤,我们可以构建出一个功能强大的EF模型,并且可以轻松地从模型中查询数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Entity Framework模型优先与实体对象查询 - Python技术站