C# EF Core 简单工厂模式,接口多继承实例(三)
来源:互联网 发布:金域名都公寓价格 编辑:程序博客网 时间:2024/06/05 08:53
一、说明
1.本实例是基于.Net Core 1.1,EF Core 1.1的代码实例,仅供参考
2.当前版本的EF Core好像还没有提供模型验证,异常跟踪等
二、实体层,自动 生成
三 、接口层
1.基础 接口
/// <summary>/// 基础访问接口,使用泛型/// </summary>public interface IBaseAbstract<T> where T : class{ #region 基础访问 /// <summary> /// 获取表达树 /// </summary> /// <returns></returns> DbSet<T> GetDbSet(); /// <summary> /// 根据主键 获取对象 /// </summary> /// <param name="id"></param> /// <returns></returns> T GetModel(object id); /// <summary> /// 添加对象 /// </summary> /// <param name="model">实例对象</param> /// <returns></returns> bool Add(T model); /// <summary> /// 修改对象 /// </summary> /// <param name="model">实例对象</param> /// <returns></returns> bool Modify(T model); /// <summary> /// 删除对象 /// </summary> /// <param name="model">实例对象</param> /// <returns></returns> bool Delete(T model); /// <summary> /// 删除 对象 /// </summary> /// <param name="id">主键ID</param> /// <returns></returns> bool Delete(object id); #endregion}2.业务接口
namespace NotifyBird.Abstract{ /// <summary> /// 消息内容,接口 /// </summary> public interface IMessage : IBaseAbstract<Message> { }}
四、接口实现,实例工厂层
1.基础操作
/// <summary>/// 基础类型操作/// 重点实现基础接口中的操作/// </summary>internal class BaseOperate<T> where T : class{ public NotifyBirdContext Context = null; public BaseOperate() { Context = new NotifyBirdContext(); } #region 其他操作 /// <summary> /// 保存数据 /// </summary> /// <returns></returns> public int Save() { return Context.SaveChanges(); } /// <summary> /// 标间对象为修改状态,并保存 /// </summary> public bool SetModify<T>(T model) where T : class { Context.Entry<T>(model).State = EntityState.Modified; return Save() > 0; } #endregion #region 基础访问 /// <summary> /// 获取表达树 /// </summary> /// <returns></returns> public DbSet<T> GetDbSet() { return Context.Set<T>(); } /// <summary> /// 根据主键 获取对象 /// </summary> /// <param name="id"></param> /// <returns></returns> public T GetModel(object id) { return GetDbSet().Find(id); } /// <summary> /// 添加对象 /// </summary> /// <param name="model">实例对象</param> /// <returns></returns> public bool Add(T model) { try { GetDbSet().Add(model); return Save() > 0; } catch (Exception ex) { return Error_Add(ex); } } /// <summary> /// 修改对象 /// </summary> /// <param name="model">实例对象</param> /// <returns></returns> public bool Modify(T model) { try { return SetModify(model); } catch (Exception ex) { return Error_Modify(ex); } } /// <summary> /// 删除对象 /// </summary> /// <param name="model">实例对象</param> /// <returns></returns> public bool Delete(T model) { try { GetDbSet().Remove(model); return Save() > 0; } catch (Exception ex) { return Error_Delete(ex); } } /// <summary> /// 删除 对象 /// </summary> /// <param name="id">主键ID</param> /// <returns></returns> public bool Delete(object id) { try { T model = GetModel(id); if (model == null) throw new Exception($"获取id={id}的对象失败,当前类型:{model.GetType().Name}"); return Delete(model); } catch (Exception ex) { return Error_Delete(ex); } } #endregion #region 异常处理 private string GetErrorMsg(Exception ex) { StringBuilder builder = new StringBuilder(); Exception inner = ex; int i = 0; while (inner != null) { i++; builder.AppendFormat("内部原因{0}:{1}", i, ex.Message); builder.AppendLine(); inner = inner.InnerException; } return builder.ToString(); } /// <summary> /// 添加数据异常 /// </summary> /// <param name="ex"></param> /// <returns></returns> public bool Error_Add(Exception ex) { throw new Exception("添加数据失败," + GetErrorMsg(ex)); } /// <summary> /// 修改数据异常 /// </summary> /// <returns></returns> public bool Error_Modify(Exception ex) { throw new Exception("修改数据失败," + GetErrorMsg(ex)); } /// <summary> /// 删除数据异常 /// </summary> public bool Error_Delete(Exception ex) { throw new Exception("删除数据失败," + GetErrorMsg(ex)); } #endregion}
2.业务操作
/// <summary> /// 消息内容,数据访问操作 /// </summary> internal class MessageOperate : BaseOperate<Message>, IMessage { }
3.实例工厂
注:此处命名空间和接口 相同 ,则在使用 的时候不需要单独引用 Factory
namespace NotifyBird.Abstract{ /// <summary> /// 工厂类 ,用于生产接口实例 /// </summary> public class ConcreteFactory { public static IProject GetProject() { return new ProjectOpeate(); } public static IMessage GetMessage() { return new MessageOperate(); } }}更多:
C# EF CodeFirst简单工厂模式,接口多继承实例(二)
C# EF CodeFirst简单工厂模式,接口多继承实例
阅读全文
0 0
- C# EF Core 简单工厂模式,接口多继承实例(三)
- C# EF CodeFirst简单工厂模式,接口多继承实例
- C# EF CodeFirst简单工厂模式,接口多继承实例(二)
- 简单工厂模式实例
- 简单工厂模式实例
- C# 简单工厂模式
- C#简单工厂模式
- 简单工厂模式c#
- C# 简单工厂模式
- C#简单工厂模式
- C# 设计模式学习三 Abstract Factory 抽象工厂(实例)
- c# interface 的理解(工厂模式)简单实例
- c# interface 的理解(工厂模式)简单实例
- 简单工厂,工厂方法,抽象工厂 三种设计模式的区别和实例
- C#工厂模式-简单工厂模式
- C#工厂模式代码实例
- C#工厂模式代码实例
- 简单工厂模式及实例
- keras中Convolution1D的使用(CNN情感分析yoom例子四)
- Epoll介绍和使用
- IntelliJ IDEA快捷键
- java.util.HashMap<K,V>
- Nginx上的第一个HelloWorld
- C# EF Core 简单工厂模式,接口多继承实例(三)
- 深入理解Android输入系统--初识Android输入系统
- LEETCODE 153. Find Minimum in Rotated Sorted Array
- 关于空指针报错的问题
- leetcode hard模式专杀之52 N-Queens II
- HDU 2255 (2/600)
- TCP协议三次握手过程分析
- Perl面向对象编程入门
- CentOS7下curl使用