C# EF Core 简单工厂模式,接口多继承实例(三)

2024-05-30 22:18

本文主要是介绍C# EF Core 简单工厂模式,接口多继承实例(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、说明

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简单工厂模式,接口多继承实例

这篇关于C# EF Core 简单工厂模式,接口多继承实例(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016976

相关文章

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

C++11委托构造函数和继承构造函数的实现

《C++11委托构造函数和继承构造函数的实现》C++引入了委托构造函数和继承构造函数这两个重要的特性,本文主要介绍了C++11委托构造函数和继承构造函数的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、委托构造函数1.1 委托构造函数的定义与作用1.2 委托构造函数的语法1.3 委托构造函

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Java 继承和多态的作用及好处

《Java继承和多态的作用及好处》文章讲解Java继承与多态的概念、语法及应用,继承通过extends复用父类成员,减少冗余;多态实现方法重写与向上转型,提升灵活性与代码复用性,动态绑定降低圈复杂度... 目录1. 继承1.1 什么是继承1.2 继承的作用和好处1.3 继承的语法1.4 子类访问父类里面的成

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-