本文主要是介绍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 简单工厂模式,接口多继承实例(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!