/*
* 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://webabcd.blog.51cto.com/1787395/341378 中的“对外键的支持”的 Demo
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace SelfTrackingDemo
{
public class BLL
{
// 取全部产品类别的实体集合
List<ProductCategory> GetCategories() List<ProductCategory> GetCategories()
{
using (SelfTrackingEntities ctx =
new SelfTrackingEntities())
{
var result = ctx.ProductCategories.ToList();
return result;
}
}
// 根据 id 取产品类别实体
ProductCategory GetCategory() ProductCategory GetCategory(int categoryId)
{
using (SelfTrackingEntities ctx =
new SelfTrackingEntities())
{
var result = ctx.ProductCategories.Single(c => c.ProductCategoryID == categoryId);
return result;
}
}
// 根据产品类别实体更新数据库中的相关数据
void UpdateCategory() void UpdateCategory(ProductCategory category)
{
using (SelfTrackingEntities ctx =
new SelfTrackingEntities())
{
// ApplyChanges() 的内部逻辑为:绑定实体到上下文,通过 ChangeObjectState 改变实体的状态,通过 ChangeRelationshipState 改变关联实体的状态
ctx.ProductCategories.ApplyChanges(category);
// 根据实体的状态,实现对实体的 添加、更新、删除 操作
var affectedRow = ctx.SaveChanges();
}
}
// 根据产品类别实体删除数据库中的相关数据
void DeleteCategory() void DeleteCategory(ProductCategory category)
{
// 标记该实体为删除状态
category.MarkAsDeleted();
UpdateCategory(category);
}
// 根据产品类别实体向数据库添加新的数据
void AddCategory() void AddCategory(ProductCategory category)
{
UpdateCategory(category);
}
}
}