EntityFramework中几种操作小结
目前项目中使用到的EntityFramework中几种操作小结,先标记下。没有详细介绍,后续有空的话再补充一些并完善一下。
列中加入RowVersion时间戳
public class Product
{
public
int Id { get; set; }
public
string Name { get; set; }
[Timestamp]
public
Byte[] RowVersion { get; set; }
}
查询中加入RowVersion比较
- 编写扩展函数
internal
static
class
EntityFrameworkHelper
{
public
static
int Compare(this
byte[] b1, byte[] b2)
{
throw
new
NotImplementedException("This is only for linq to sql");
}
}
- 用扩展函数查询
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
- 添加Can a DbContext enforce a filter policy?一文中的FilteredDbSet,
- 修改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;
}
}
单元测试:
- 打桩DbSet:FakeDbSet
- DbContext的封装
EntityFramework中几种操作小结的更多相关文章
- EntityFramework中几种更改数据的方式
首先声明个实体类,该实体类是EntityFrameWork自动生成的,对应数据表Test结构如下 public partial class Test { public int Id{ get; set ...
- C/C++中几种操作位的方法
参考How do you set, clear and toggle a single bit in C? c/c++中对二进制位的操作包括设置某位为1.清除某位(置为0).开关某位(toggling ...
- java中四种操作(dom、sax、jdom、dom4j)xml方式详解与比较
1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特 ...
- java中四种操作xml方式的比较
1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息. ...
- python中的文件操作小结2
''' #-----------文件修改---------- f=open("test_1",'r',encoding="utf-8") f2=open(&qu ...
- python中的文件操作小结1
#!/usr/local/bin/python3 # -*- coding:utf-8 -*- f=open("test_1",'r',encoding="utf-8&q ...
- js,jQuery数组常用操作小结
一.js中数组常用操作小结 (1) shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift() ...
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
js中对arry数组的各种操作小结 最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...
- [转]DB2中需要REORG操作的几种情况
问题: 在DB2数据库中,修改完表的结构时,是否需要对表做一个reorg操作才能使表的状态恢复正常? 答:有以下4种操作,需要对表做reorg操作 1. SET DATA TYPE altered-d ...
随机推荐
- Codeforces Round #455 (Div. 2)
Codeforces Round #455 (Div. 2) A. Generate Login 题目描述:给出两个字符串,分别取字符串的某个前缀,使得两个前缀连起来的字符串的字典序在所有方案中最小, ...
- 以应用带动SDN发展(CDN峰会 工信部杨崑)(转)
以应用带动SDN发展(CDN峰会 工信部杨崑) SDNAP推荐:这是在亚太全媒体SDN峰会由工信部研究院秘书长杨崑做的关于SDN的一个演讲,本人认为主讲者通过对整 个信息服务体系的精简归纳总结,剥 ...
- BootStrap的栅格系统的基本写法(布局)
代码如下: <!DOCTYPE html> <html> <head> <title>BootStrap的基础入门</title> < ...
- csu 1547(01背包)
1547: Rectangle Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 996 Solved: 277[Submit][Status][Web ...
- Regular Expression Matching——没理解的动态规划
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- JS模块化规范CMD之SeaJS
1. 在接触规范之前,我们用模块化来封装代码大多为如下: ;(function (形参模块名, 依赖项, 依赖项) { // 通过 形参模块名 修改模块 window.模块名 = 形参模块名 })(w ...
- openldap quick start guide
openldap 2.4 在centos 7 x64系统上部署 1 下载源码编译解压tar -xvf xx ./configure make && make install 2 更改配 ...
- 【U3D】播放器设置(PlayerSettings)
播放器设置 (Player Settings) 播放器设置 (Player Settings) 用于为您要在 Unity 中编译的最终游戏定义各项(特定于平台的)参数.例如,参数中的一些值用于您打开单 ...
- 长安大学第四届ACM-ICPC“迎新杯”程序设计竞赛-重现赛 D - 新卡片游戏
题目描述
- HDU 6029 Graph Theory
贪心. 每次找到后面最近的一个能连边的连边. #include <bits/stdc++.h> using namespace std; ; int T,n,k; ],b[],u[]; i ...