博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实体类调用泛型父类中的静态方法中执行CRUD——第一版
阅读量:5331 次
发布时间:2019-06-15

本文共 2248 字,大约阅读时间需要 7 分钟。

public abstract class LYEntityDbContext
where DB : DbContext, new() where T : LYEntityDbContext
{ public void GenerateHashCode() { var thisTime = this.GetType().GetProperties().Select(p => p.GetValue(this).GetHashCode()); this.changes.Add(thisTime); } private List
> changes = new List
>(); private bool executed = true; private bool hasChanged { get { if (this.changes.Count < 2) { return false; } var result = !this.changes.First().Except(this.changes.Last()).Any(); return result; } } public bool Executed() { return this.executed; } public static IEnumerable
Find(Action
action, params object[] keyValues) { return Find(action, true, keyValues); } public static IEnumerable
Find(Action
action, bool inBatch, params object[] keyValues) { if (inBatch) { using (var db = new DB()) { var hasChanged = false; for (int i = 0; i < keyValues.Length; i++) { var id = keyValues[i]; var t = db.Set
().Find(id); yield return t; t.GenerateHashCode(); action(t); t.GenerateHashCode(); if (!hasChanged) { hasChanged = t.hasChanged; } } if (hasChanged) { db.SaveChanges(); } } } else { foreach (var id in keyValues) { yield return Find(action, id); } } } public static T Find(Action
action, object id) { using (var db = new DB()) { var t = db.Set
().Find(id); t.GenerateHashCode(); action(t); t.GenerateHashCode(); if (t.hasChanged) { try { db.SaveChanges(); t.executed = true; } catch (Exception) { t.executed = false; } } return t; } } public static IEnumerable
FindAll

(Func

where, Func
orderby, int skip, int take, out int all) { using (var db = new DB()) { if (where == null) { var r = db.Set
(); all = r.Count(); return r; } all = db.Set
().Count(where); if (orderby == null) { var r = db.Set
().Where(where); return r; } if (take <= 0) { var r = db.Set
().Where(where).OrderBy(orderby); return r; } if (skip <= 0) { var r = db.Set
().Where(where).OrderBy(orderby).Take(take); return r; } var rr = db.Set
().Where(where).OrderBy(orderby).Skip(skip).Take(take); return rr; } } }

 

转载于:https://www.cnblogs.com/ly45/p/4641963.html

你可能感兴趣的文章
【问题解决】线程间操作无效:从不是创建控件“textBox1”的线程访问它
查看>>
Ralink RT3290无线网卡驱动安装 (linux)
查看>>
leetcode38. 报数
查看>>
ava集合框架
查看>>
把sublime text2配置的更好用,用到一点写一点
查看>>
构建之法阅读笔记02
查看>>
nodejs,python,sublime和Eclipse的包管理器
查看>>
完善自己的学习方法
查看>>
C89:论四大生命周期修饰类型
查看>>
CSS块级元素和行内元素
查看>>
git stash 保存当前工作状态
查看>>
github环境搭建
查看>>
Struts 2(二):使用Struts2
查看>>
[接口]mmc/eMMC/SD-card
查看>>
[git/svn]Git和SVN差异
查看>>
第四次博客作业
查看>>
Pillow不支持color emoji font!
查看>>
Java实现数据库的读写分离
查看>>
hdu 2076 夹角有多大(题目已修改,注意读题)
查看>>
Java实现二维码QRCode的编码和解码
查看>>