Entity_Framework_4:代码优先开发详解

需积分: 4 12 下载量 54 浏览量 更新于2024-07-30 收藏 1.3MB DOC 举报
"本文主要介绍如何使用Entity Framework 4进行代码优先开发,这是一种无需通过设计器或XML映射文件即可构建数据库模型的方法。Entity Framework 4引入了许多改进,如支持POCO对象、延迟加载、N层技术、更好的SQL生成和存储过程支持、单复数名词转换、增强的可测试性和更多的LINQ操作符。Visual Studio 2010提供了对EF的设计器支持,包括数据库优先和模型优先两种开发模式。代码优先开发则允许开发者直接通过编写简单的类定义模型,采用‘惯例优于配置’的原则,简化持久化映射,并可选择性地自定义映射规则。" 在Entity Framework 4中,代码优先开发是一种创新的开发方式,它鼓励开发者通过编写C#或VB.NET类来定义数据模型,而不是依赖于图形化的数据库模型设计器或EDMX文件。这种方式强调了代码的可读性和简洁性,减少了不必要的XML配置。 1. **支持POCO对象**:POCO(Plain Old CLR Object)意味着实体类可以是普通的.NET类,不需继承特定基类或包含特定属性。这增强了代码的灵活性,使得实体类可以更好地融入到现有的业务逻辑中。 2. **延迟加载**:延迟加载允许关联的对象在需要时才被加载,而不是在查询时一次性加载所有数据,从而提高了性能,尤其是在处理大数据量时。 3. **N层技术和自跟踪实体**:这些特性使实体在多层应用程序中能够保持状态,简化了数据在不同层之间的传递。 4. **更好的SQL生成和存储过程支持**:Entity Framework 4能生成更高效的SQL语句,并提供了更好的存储过程集成,允许开发者利用数据库的优化功能。 5. **自动单复数名词转换**:这一特性自动处理数据库表名的单复数形式,简化了模型与数据库之间的对应关系。 6. **增强的可测试性**:通过面向接口编程,开发者可以更容易地创建模拟对象,从而编写单元测试,确保代码质量。 7. **更多的LINQ操作符**:Entity Framework 4支持所有LINQ操作符,使得查询数据库更加方便,代码更易于理解。 代码优先开发流程的关键在于“惯例优于配置”原则。Entity Framework会根据一些预定义的规则(惯例)来推断模型与数据库之间的映射。然而,如果需要,开发者可以通过 Fluent API 或 Data Annotations 来覆盖这些惯例,实现更精细的控制。 要开始使用Entity Framework 4进行代码优先开发,首先需要创建表示数据模型的类,然后可以使用`DbContext`类来管理这些实体以及与数据库的交互。`DbContext`提供了添加、删除、修改和查询实体的方法。通过配置数据库上下文类,可以指定连接字符串,以及如何映射实体到数据库表。 Entity Framework 4的代码优先开发模式为.NET开发者提供了一种更加直观和灵活的数据库开发方法,使得数据库模型的创建和维护更加贴近实际的代码逻辑,同时保持了与数据库的高度集成。

优化sql:SELECT we.organization_id ,we.wip_entity_id ,case when wl.line_id is null then we.wip_entity_name else '' end wip_entity_name ,we.primary_item_id ,mtt.transaction_type_name ,mmt.transaction_date ,bd.department_code ,mmt.inventory_item_id ,mmt.subinventory_code ,mta.reference_account ,br.resource_code ,lu2.meaning as line_type_name ,mta.base_transaction_value ,mta.cost_element_id ,flv.meaning as cost_element ,wdj.class_code job_type_code ,ml.meaning job_type_name FROM (select * from gerp.mtl_material_transactions where substr(transaction_date,1,7) >= '2023-06' and transaction_source_type_id = 5) mmt inner join gerp.wip_entities we on mmt.organization_id = we.organization_id inner join gerp.mtl_transaction_accounts mta on mta.transaction_source_id = we.wip_entity_id and mta.transaction_id = mmt.transaction_id and mta.transaction_source_type_id = 5 inner join gerp.mtl_transaction_types mtt on mtt.transaction_type_id = mmt.transaction_type_id inner join mfg_lookups lu2 on lu2.lookup_code = mta.accounting_line_type and lu2.lookup_type = 'CST_ACCOUNTING_LINE_TYPE' inner join gerp.mtl_system_items_b msi on msi.inventory_item_id = mmt.inventory_item_id and msi.organization_id = mta.organization_id left join gerp.bom_departments bd on bd.department_id = mmt.department_id left join gerp.bom_resources br on br.resource_id = mta.resource_id left join gerp.wip_lines wl on wl.line_id = mmt.repetitive_line_id left join gerp.wip_discrete_jobs wdj on wdj.wip_entity_id = mta.transaction_source_id left join gerp.fnd_lookup_values_vl flv on cast(mta.cost_element_id as string) = flv.lookup_code and flv.lookup_type = 'CST_COST_CODE_TYPE' left join mfg_lookups ml on ml.lookup_code = wdj.job_type and ml.lookup_type = 'WIP_DISCRETE_JOB' 。其中mmt,we,mta,msi,wdj数据量很大

2023-06-10 上传
2023-06-11 上传