public interface IDbContext { IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity; int SaveChanges(); 执行存储过程,并返回对象列表 IList<TEntity> ExecuteStoredProcedureList<TEntity>(string commandText, params object[] parameters) where TEntity : BaseEntity, new(); 查询Sql语句 IEnumerable<TElement> SqlQuery<TElement>(string sql, params object[] parameters); 执行sql 是否启用事务 ExecuteSqlCommand(string sql, bool doNotEnsureTransaction = false, int? timeout = null, params object[] parameters); }
View Code然后注入:
kernel.Bind<IDbContext>().To<PortalDb>().InSingletonScope();
对于和模型相关的Service内部都是注入的IRepository<T>,比如UserService。
private readonly IRepository<User> _useRepository; private readonly IRepository<UserRole> _userRoleRepository; private readonly ICacheManager _cacheManager ; public UserService(IRepository<User> useRepository,IRepository<UserRole> userRoleRepository,ICacheManager cacheManager) { _useRepository = useRepository; _userRoleRepository = userRoleRepository; _cacheManager = cacheManager; }
这样相互之间就比较干净。只依赖接口。
而数据模型都会继承BaseEntity这个对象。
public class User : BaseEntity { //... }
数据映射相关的部分在Mapping中,比如UserMap