Welcome

首页 / 软件开发 / .NET编程技术 / 精进不休.NET 4.0 (8)

精进不休.NET 4.0 (8)2012-06-03 博客园 webabcdADO.NET Entity Framework 4.0 Self Tracking Entity

介绍

ADO.NET Entity Framework 4.0 的新增功能

* 对 Self Tracking Entity(实体状态自跟踪)的支持,基于 POCO

* WCF 结合 Self Tracking Entity 的应用

示例

1、Self Tracking Entity 的 Demo

SelfTrackingDemo/BLL.cs

代码

/*
* ADO.NET Entity Framework 4.0 - 对 Self Tracking Entity(实体状态自跟踪)的支持,基于 POCO
* 1、不通过 WCF 使用 Self Tracking Entity 需要手动调用 StartTracking()
* 2、MarkAsAdded(), MarkAsModified(), MarkAsDeleted() 会自动 StartTracking()
* 3、ApplyChanges() 的作用是:绑定实体到上下文,通过 ChangeObjectState 改变实体的状态,通过 ChangeRelationshipState 改变关联实体的状态
*
* 本 Demo 演示如何通过 Self Tracking Entity 来实现对单表的增删改查
* 如果涉及到关联实体,可以参考 http://www.cnblogs.com/webabcd/archive/2010/06/17/1759314.html 中的“对外 键的支持”的 Demo
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace SelfTrackingDemo
{
public class BLL
{
// 取全部产品类别的实体集合
public List<ProductCategory> GetCategories()
{
using (SelfTrackingEntities ctx = new SelfTrackingEntities())
{
var result = ctx.ProductCategories.ToList();
return result;
}
}
// 根据 id 取产品类别实体
public ProductCategory GetCategory(int categoryId)
{
using (SelfTrackingEntities ctx = new SelfTrackingEntities())
{
var result = ctx.ProductCategories.Single(c => c.ProductCategoryID == categoryId);
return result;
}
}
// 根据产品类别实体更新数据库中的相关数据
public void UpdateCategory(ProductCategory category)
{
using (SelfTrackingEntities ctx = new SelfTrackingEntities())
{
// ApplyChanges() 的内部逻辑为:绑定实体到上下文,通过 ChangeObjectState 改变实体 的状态,通过 ChangeRelationshipState 改变关联实体的状态
ctx.ProductCategories.ApplyChanges(category);
// 根据实体的状态,实现对实体的 添加、更新、删除 操作
var affectedRow = ctx.SaveChanges();
}
}
// 根据产品类别实体删除数据库中的相关数据
public void DeleteCategory(ProductCategory category)
{
// 标记该实体为删除状态
category.MarkAsDeleted();
UpdateCategory(category);
}
// 根据产品类别实体向数据库添加新的数据
public void AddCategory(ProductCategory category)
{
UpdateCategory(category);
}
}
}