EntityFramework中几种操作小结

目前项目中使用到的EntityFramework中几种操作小结,先标记下。没有详细介绍,后续有空的话再补充一些并完善一下。

?

列中加入RowVersion时间戳

????public
class
Product
????{
????????public
int Id { get; set; }
????????public
string Name { get; set; }

????????[Timestamp]
????????public
Byte[] RowVersion { get; set; }
????}

?

查询中加入RowVersion比较

  1. 编写扩展函数

????internal
static
class
EntityFrameworkHelper
????{
????????public
static
int Compare(this
byte[] b1, byte[] b2)
????????{
????????????throw
new
NotImplementedException("This is only for linq to sql");
????????}
????}

  1. 用扩展函数查询

????db.Products.Where(i => i.RowVersion.Compare(version) > 0).ToList();

?

乐观锁

????public
class
Product

????{
????????public
int Id { get; set; }
????????public
string Name { get; set; }

????????[Timestamp, ConcurrencyCheck]
????????public
Byte[] RowVersion { get; set; }
????}

?

带过滤条件的DBSet

  1. 添加Can a DbContext enforce a filter policy?一文中的FilteredDbSet,
  2. 修改DbContext,使用FilteredDbSet替换默认的DbSet

????public
IDbSet<Product> Products { get { return
new
FilteredDbSet<Product>(this, i=>i.IsRemoved == false); } }

?

标记删除

继承FilteredDbSet,重载其删除函数

????public
interface
IflagRemoveObject
????{
????????bool IsRemoved { get; set; }
????}

????class
FlagRemoveDbSet<T> : FilteredDbSet<T> where
T : class, IflagRemoveObject
????{
????????public
override
T Remove(T entity)
????????{
????????????entity.IsRemoved = true;
????????????return entity;
????????}
????}

?

单元测试:

  1. 打桩DbSet:FakeDbSet
  2. DbContext的封装
时间: 2024-07-31 09:34:36

EntityFramework中几种操作小结的相关文章

EntityFramework中几种更改数据的方式

首先声明个实体类,该实体类是EntityFrameWork自动生成的,对应数据表Test结构如下 public partial class Test { public int Id{ get; set; }--主键 public string Name{ get; set; } public string Address{get;set;} } 第一种修改实体的方法: 手动创建对象,然后放入EF容器中,然后把状态设定为Modified,再把要修改的字段的IsModified属性设置为true,

java中四种操作(dom、sax、jdom、dom4j)xml方式详解与比较

1)DOM(JAXP Crimson解析器)     DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不是像

C/C++中几种操作位的方法

参考How do you set, clear and toggle a single bit in C? c/c++中对二进制位的操作包括设置某位为1.清除某位(置为0).开关某位(toggling a bit).检查某位是否为1等.这些操作较为常见并且可以作为其他位运算的基础接口,以下罗列几种方法: 传统方法 设置某位为1 number |= 1 << x; // 设置第x位为1 清除某位 number &= ~(1 << x); // 置第x位为0 开关某位 numb

MongoDB在PHP中的常用操作小结【转载】

$mongodb = new Mongo(); //$connection = new Mongo( "$dburl:$port" ); // connect to a remote host (default port) $mydb = $mongodb->mydb;  //隐性创建数据库mydb $mydb = $mongodb->selectDB("mydb");  //直接选择已经存在的数据库 $collection = $mydb->my

js,jQuery数组常用操作小结

一.js中数组常用操作小结 (1) shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); 结果 a:[2,3,4,5] b:1 (2) unshift:将参数添加到原数组开头,并返回数组的长度 var a = [1,2,3,4,5]; var b = a.unshift(-2,-1); 结果 a:[-2,-1,1,2,3,4,5] b:7 注:在IE6.0下测试返回值总为undefi

Android基础入门教程——8.1.3 Android中的13种Drawable小结 Part 3

Android基础入门教程--8.1.3 Android中的13种Drawable小结 Part 3 标签(空格分隔): Android基础入门教程 本节引言: 本节我们来把剩下的四种Drawable也学完,他们分别是: LayerDrawable,TransitionDrawable,LevelListDrawable和StateListDrawable, 依旧贴下13种Drawable的导图: 1.LayerDrawable 层图形对象,包含一个Drawable数组,然后按照数组对应的顺序来

Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2

Android基础入门教程--8.1.2 Android中的13种Drawable小结 Part 2 标签(空格分隔): Android基础入门教程 本节引言: 本节我们继续来学习Android中的Drawable资源,上一节我们学习了: ColorDrawable:NinePatchDrawable: ShapeDrawable:GradientDrawable!这四个Drawable~ 而本节我们继续来学习接下来的五个Drawable,他们分别是: BitmapDrawable:Insert

Android基础入门教程——8.1.1 Android中的13种Drawable小结 Part 1

Android基础入门教程--8.1.1 Android中的13种Drawable小结 Part 1 标签(空格分隔): Android基础入门教程 本节引言: 从本节开始我们来学习Android中绘图与动画中的一些基础知识,为我们进阶部分的自定义 打下基础!而第一节我们来扣下Android中的Drawable!Android中给我们提供了多达13种的 Drawable,本节我们就来一个个撸一遍! Drawable资源使用注意事项 Drawable分为两种: 一种是我们普通的图片资源,在Andr

[转]DB2中需要REORG操作的几种情况

问题: 在DB2数据库中,修改完表的结构时,是否需要对表做一个reorg操作才能使表的状态恢复正常? 答:有以下4种操作,需要对表做reorg操作 1. SET DATA TYPE altered-data-type  但有以下两种情况是例外,不需要reorg:          1). Increasing the length of a VARCHAR or VARGRAPHIC column          2). Decreasing the length of a VARCHAR o