EF架构~豁出去了,为了IOC,为了扩展,改变以前的IRepository接口_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > EF架构~豁出去了,为了IOC,为了扩展,改变以前的IRepository接口

EF架构~豁出去了,为了IOC,为了扩展,改变以前的IRepository接口

 2014/5/8 17:16:14  张占岭  博客园  我要评论(0)
  • 摘要:回到目录使用了4年的IRepository数据仓储接口,今天要改变了,对于这个数据仓储操作接口,它提倡的是简洁,单纯,就是对数据上下文的操作,而直正的数据上下文本身我们却把它忽略了,在我的IRepository接口里根本没有数据上下文对象,这是不完整的,也许你会说,我使用了基类,数据基类里有数据上下文,是的,我也是那样用的,但有时,这种方法有些死板了,真的,当你碰到IOC时,这种方式的短板就出来了,即,每个反射出来的Repository对象都是独立的,每个对象里的上下文也都是独立的,这是重点
  • 标签: 接口 架构

回到目录

使用了4年的IRepository数据仓储接口,今天要改变了,对于这个数据仓储操作接口,它提倡的是简洁,单纯,就是对数据上下文的操作,而直正的数据上下文本身我们却把它忽略了,在我的IRepository接口里根本没有数据上下文对象,这是不完整的,也许你会说,我使用了基类,数据基类里有数据上下文,是的,我也是那样用的,但有时,这种方法有些死板了,真的,当你碰到IOC时,这种方式的短板就出来了,即,每个反射出来的Repository对象都是独立的,每个对象里的上下文也都是独立的,这是重点,由于上下文是独立的,所以,很多事我们都没法干,这包括<JOIN关联查询,非MSDTC的事务>,看了上面的这么多原因,所以,才决定,扩展我的IRepository接口,当然,严格说,这违背了面向对象的原则,接口不提倡扩展,只提倡新建,呵呵.

全新的IRepository接口

class="code_img_closed" src="/Upload/Images/2014050817/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('082ebb75-33be-4b82-a255-6ff59b7389d3',event)" src="/Upload/Images/2014050817/2B1B950FA3DF188F.gif" alt="" />
 /// <summary>
    /// 基础的数据操作规范
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    public interface IRepository<TEntity>
           where TEntity : class
    {
        /// <summary>
        /// 设定数据上下文,它一般由构架方法注入
        /// </summary>
        /// <param name="unitOfWork"></param>
        void SetDbContext(IUnitOfWork unitOfWork);

        /// <summary>
        /// 添加实体并提交到数据服务器
        /// </summary>
        /// <param name="item">Item to add to repository</param>
        void Insert(TEntity item);

        /// <summary>
        /// 移除实体并提交到数据服务器
        /// 如果表存在约束,需要先删除子表信息
        /// </summary>
        /// <param name="item">Item to delete</param>
        void Delete(TEntity item);

        /// <summary>
        /// 修改实体并提交到数据服务器
        /// </summary>
        /// <param name="item"></param>
        void Update(TEntity item);

        /// <summary>
        /// 得到指定的实体集合(延时结果集)
        /// Get all elements of type {T} in repository
        /// </summary>
        /// <returns>List of selected elements</returns>
        IQueryable<TEntity> GetModel();

        /// <summary>
        /// 根据主键得到实体
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        TEntity Find(params object[] id);
    }
View Code

在 DbContext数据基类中的实现

       public void SetDbContext(IUnitOfWork unitOfWork)
        {
            this.Db = (DbContext)unitOfWork;
            this.UnitWork = unitOfWork;
        }

 

在IOC中的使用

      IUnitOfWork db;
      IRepository<Question_Info> question_InfoRepository;
      public EFController()
        {
         
            //反射出仓储对象
            db = ServiceLocator.Instance.GetService<IUnitOfWork>();
            question_InfoRepository = ServiceLocator.Instance.GetService<IRepository<Question_Info>>();
             //为仓储对象设置上下文
            question_InfoRepository.SetDbContext(db);
}

在写JOIN查询时,它是被支持的,因为它的数据上下文是同一个

CHMrMudkytdT++g3nQZutx/dgf3xLrc6nFEy6yrtGoIjpCALtufM3Q5NhRXrctXRT7e1NkYa9l+jVeO12V37TlWl/u1zFV3F/WXg3GMRF1WjXdWkeKK3AESPjPESF3WG1m6TakxBadLA0M+MY4xXpcz4xh6RWnz1X7E59167YO+odqUiRmvXYHWQJGxlBIbOe23TeN9545CGQWRehkq0zJJ1WXdzuD4DA2LNccxjLlFLeRM7h4fXR9t5evy8PpNXYREXCQRvRq6geeQpMvGCuxcBTpDlwPGd83kjv2+VdynZNossejexZZP/1J1OWBnd9CqXXad/6Qm+EBPf6Lmtoj1QOsOXdbLzBh1mvGh2q2HcNvmEjioNp06ZYaN1zrDbnzfeKXMsBupOQKaZ6TZr1ymb5LXqdKH936si8DQUJTWhoR5Zlmu4j25KXVTYe4mBEMjL8zMU2Y08y7uS6AP7NmvE12GKaCRF6VOXR6KVq0TNbox93WiyzAF9Tay9W6Ktk5eY+3V6fL1Oh/MV+6wmnuRtq9BlwEAoCdDl799+/bt27dpq19LmQAAi4G/DABQF+gyAEBdEMfIJzEx5iT5M0s9T1ss+afYQVGCpJeNF6VwgyzL0PDuHpuGtpxYb17X0oUTgL+cT126nKzcWRJUnS6n72/WN0wETx9ujMAmjplQGmSxm3N4p492prfP29ohkjwmB0/UTyry+tpioMt1M5kuX5qt2I+3Ps8iS5tSX2VKK9TeHl2g6ZbR5SxHXdnT/QxpkReDOEYGctdy70t6qZbNLHmNLbftesjdPart0lVG/ZBfcZ/xp/TUwNoqVfl56DLjNpzsj0NlKpt0RQYKLQ+UfiZpkR85LfJi4C+PoU/0o6UoUk4zxtyb11hgHYwOxXRXw+Me48UMjqUG1swRP7eU4h5/OVSmmslHzYUkbnj9XdJPopBx7WGX3r9S70i4TNIiP4Ywo8tj6DRLTenpn3blvvyZTuw0Klj6md1XSQN3pPHWBLvZ5kuvk+ZH/zL99hOzIVKmlnFIMUW0JmmRnzst8mIQxxhDCV0OOT5Rb8Kfbcnihi67LuelIS1yyCTluh4xLfJi4C+PYXQcY3xeY2e5KsalOxIDZ2aJ8njj5ZzpfPO8OIauoTkTbqQuD8YxRBuq647caw8a4ZQc6eKU2AhpkVcHujwGS7O8VMtmnrzG3XJ6TP5l72FNZPDeZ3zgrbL+8Nx5jf2rTNZl3U6pAkK8pPmkRX6OtMiLQRxjDI4vCYKh9fIjU+u1P8jiXqAL8ONcJ/5yPgMvJDw5tWrTEtR57cmPeleFGt14mOtEl5PR3lMGj2W0yYlX+MvsIlSnyyfSIq8T4hgAAHWBvwwAUBfoMgBAXRDHAACoC/zlElT1mmXuhpM7a6rjCV0WaiKnMVTV7yoMhjpAl0swPD/vmcGR7BihqlLq0l9Myqgq6e1SrczMC5qJCV5an7DfU2WNwbBKiGOUYHZdlnuopnJHQialvqCUc0l2mU7Cj0KzsSZdviRn02YwrBL85Ry0V5hryarco2TPccqV+1m9Ak+ZGZCVZBR3JDvWyvRS6sTURX3NXBzs9gSpO8u7kIUftXB1WZRZcTbt5x4MqwVdTiaQoqiSrMp2RTJ7ztwZkP2peE+yY61Me80bXwHvRBfsRB/JPFMRXe7xDjq67OQODDNvvw85nk89GNYLcYxUQik9q8iqHDxPJIBxvCA7IZD+ZZJkjEzeFjVp7FS0/eJbJqmjedmYszghpstH6+cRXT5fF0liSOjM2u/DW4+feDCsGfzlVObRZSdaFhn3oTPVmga8qjVPxejFSwlWDw7p8s5eEkV0uS88rs6z9XtadPWJB8OaQZeTCccxCmZVDnxWF8szZUAeORXHLV3da/XY+W+zic66pjB1JLg/KM68BpqHddlUlk2bwfAQEMfIQUu1XDKrsjhxYCrK30+WAVl7jSl9KuomaWUqa/EwMpTRusnnQ/8or+uvs3hau/Oe+8mDakJq/R/h1Zi+34PPzhgMDwL+MjwTQ/dOgBpAl+GZQJdhDRDHgGcCXYY1gL8MAFAX6DIAQF0QxwAAqAv8ZQCAukCXZ2GyjL0Pz39/Pn76+vb3KWsHCEAcY0buyQw5QVbJ0fz35+Onrx8+ff0wpWb9+/xFK21iZXx/ay1PMj619oDxsdp/fP4vdurP772dHz79/jlB7fA44C/PyDp1+f2tk6r//nwc0pdklhGX97dO4woY//7W1nj59ePDlz+R3Wg/v6e3Brr8dKDLOagpd9WEv8aYaMZeJ2OkTGDW7Q/293z76NmfvYpcS9T8PsYYT1B+fv/68dc/T+/k355zKg5+/PXvVuYn6R7exKvzGS3RUcp8f/v0+3NbyLXMAMJOKWeanVrtSkUh4wO1t9/KVtJQdPnvb/uSv3789S+ndngciGNkoKbcVRP+XnHUUD3zuNOzkSX6y2r2Z7+i4+6m2rtO+gMp0H5+//rh+3v38fLrx4fv7wFdliLYS1LAEww5ffZx6eT2f7+/fWqt+vs7uuoXJv39fVMxvUzVqlBF2f6y04w+VhyjuxG2lba3w6za4XHAX85ASbmrJvxtsbQ1cOYu4A6n67KbNUmr6Hwwm4MxR7PZmN2x/aiRocvCCZWu3M3Fc1UpSZfb6npj3v6aoLeuoER4A2WqVoUqyo8vR4MYnhk9Wuuhy08HupyPTLkbDggYR1sDZ06vy6EcxDtzPpjD0Wx2sX9rIyOO8fd3TH3+/rb1ZTFddr9dVpc7Dz0eb4np8scvP9DlJ4c4xijsTOohjfPjGP6Zh40eUugiD3FCyd2VHMQbs9uZszGHndltwjFr+YpCFwroV+j/Pn/p3h8QTwiDRfUqaa/NOxLjGON1OTOOoVcUMN6vXS4aMuPLprvV/fv8xaourXZ4HPCXM9BT7moJf9WMveqZzsm9nIqT48/9lOzPWkW79sHgNRoT88Wvrq79lOnSPw3786Y992t956twxx/oSYn3TlZqv0+X9TLV2sMVucaHapc2x8RUeU+uvwt6HndS7fA4oMugIiUGABaFOAYE6H3M+K4HAJgY/GVYI9a+vsXf7U2vvaydsFbQZQCAuiCOAQBQF/jLAAB1gS4DANQFcYxsTvvX19fX1/1pvioA4JnBX87k0myRZACYE3Q5k9P+ddvEU9IAANwDcYxM0GUAmBn85UxOe8IYADAr6HI6pz2P+wBgfohj5MFjPwCYG/zlTIgvA8DMoMuZoMsAMDPEMTJBlwFgZvCXMyHADAAzgy5nc2m27MMGgPkgjgEAUBf4ywAAdYEuAwDUBXGMYmUCAKjgLz8Tl2a7zAPLxSqaj0d68YZ+Xxvocmlur3dM+4pHQFTGT5vbPwaQamdqRb6dsqLuRXGr9lvBmRZlM6zL9yk3/V5nv9cBcYxiZRpjrqPsNrguzXayLSuTO3sijd68dvb7drx67FR+YoPPLF7avLpMv9fa73WAv1wSZwi2Q86ZDPJvz08QB68liQOW99H5GdZAVso87V/3TXu4tU7ODWGTZpJWkVJmwE5n2kljg/NzSs2wzLpVJ12066HBRo77cvR7df1eGehySYTXZEw/INX5KUdnPzYD6aBDfpN9XI7q/m+RzrS3T9Rz2t/mkv5z1QC1TNVO69Ls7yLzM7o93lOCsGI6bqx3onUw6pxGv6Tfl+j3NUMco1iZJmt+uuIiFn2K0iTNT38OtQE8VR20qpWfR8seMMGuyJ1w889PWYo0TY9pao2cFv2k3+vq9/rAXy5Jxno2PgCvo9r2iKaenwMaMN387Jwy54oH1rNR1zXNX9Z1ObTEjjl9wxbR73P3+5pBl4sin1x068R+6F0VRVkHBorqvw9M58T1bNL8zFzPqvPTt9N+/mNVGpyfYrV8H/1ViJYXl+ZU5BofPtP9TL/P0e+TjYPyEMcoVuaNfgFnuwG3Q409svXlrOIG9t/oj1uEKDi1J89P/edqRcH56dkpJ2ynWFZ0QHlfarqlbGfO/tTb3FVldYdifPBMKbThpqPf+9LH9LvSymsFf7kGHjVKBnHo92kZWlusB3S5Dnov4DHGFaRBv0/E1Vd+mLsccYxiZQIAqOAvAwDUBboMAFAXxDGKlQkAoIK/DABQF+jyM+G9sj9vTRO/WzwFj7RBjN58XIhjFCvzhngff7o5FpCf8TNZe8M/fvrwDB7aNTCH5gzr8n3KTW8u2ZuPC/5yWcSb8O6W1nuYyS0M7P66q/rgLttZ3MF5dZneXLY3Hxd0uSQZ+WtMwBcTB+fMw9t/5SQuGMquGzXeL9PLSkNWZXrzCSGOUaxMk5Xv0Rrx/XgP+DxJecXC+WtCOXP8mayf6VYfy3QTmcnRBXR6ljjXjVUT8XQHBxPBBb+kN8f3JtjgL5ckYya7MrRwHl77FP+jLxHKdamlzD+TZSnSFD36qTVdWpyU3kSXpwJdLknGyjc+qE9z5+G1T/E/zjKTB13XNH9Z12Un9hnR5dCZmkX05rjeBBviGMXKNMZ+GtJlN+yHs0xcOJQryx72gYmfuPKdeCaPW/mKdfV99DWK9hRmOBW5TRc+0/1Mb6b35mS9+5jgL5emXyNXnofX/3XyTA5W5JUpj5FVOWjS+ntTaTvoQZdrgMjbI0FvpjC0YnhuiGMUK9Oi9ywYq+uH3oxy9ZW5d0XAXwYAqAt0GQCgLohjFCsTAEAFfxkAoC7QZQCAuiCOUazMMcidCwvUNPFrxFNQ1a4xugPmAX+5LGmZFzpShUDdTKxsRIjZVWfK3WFdvke56Q6oAnS5LM4mq7kz9gYSliX/XiO49XYWb3J2XaY7oDzEMYqVaYyxZ5GYfWKfbfd15/o4aWKGcuaG0xck/VzZN+y5frFUNStKoEx3QCXgL5dFzKIu000sL4yfzEvNhJPooIV+Pk2qGu+TTXpCOGmcemUDCeFCZ6oVPWt3QE2gy2VRMrtE8yiGv0zSpoVTO04kBHqizlDwVLv21DAr3QFVQByjWJnGGDXC+EBCMOi6pvnLui6fJk+g/NTdATWBv1wW7clP3sJZn8kBz6hoyt3R9DWK7JDCDKci99rDZ2qfn6Y7JusemB50uSyBJ/JKfls15W5wJnsvvKovZiULgW7S0ItZ60ug/EzdQQbkiiGOUaxMgKLYzxahJvCXAZ4OMiBXDroMAFAXxDGKlQkAoIK/DABQF+gyAEBdEMcoViYAgAr+ct0Mp4OI/LD0W1Bl95etuunguUGXK+C0D760FBUXbyezs+e2tLjMm5PTGPO4TQfPDXGMYmV2nPbb5tRsVXVJcvpS0/guzfy6/LBNB88N/nJxTvttczEXS120dMP6wWsJtrj4qYEvzXbbNPt2J/KrlTZTKfEuFsqVbB6w6QCMMehyea7aYqS6qOmGIzmIVafPS2j2uj+1SYXbuuQPozkga8yVvJKmA8iHOEaxMo0xlgR06qKmtQzlIDYmVVz2p66UW1Wu2k4hLsvlSn64pgNowV8uijq9FxOXdD+vwlzJa2k6gHzQ5ZL4ySBbXyySbtjPzzhWXObIKLZUruR6m468xnA3xDGKlak4hO1kV9MNqwfbn8mPSmrggLjY507kAC6SK7nipiOvMdwN/jLAtJDXGO4FXQaYDPIawyQQxyhWJgCACv4yAEBdoMsAAHVBHKNYmQAAKvjLAAB1gS6visIpKL2XjWevjffN4BkhjlGsTGNMejKIG6m6nChpVu0p6dsWfQVswjShy95QAO4Ef7ksYr+Z2IJ8N1muZmoO4qX918l0+dJsxcY/lBmqB10ui9REO0Ga58T6qYGvP2/ac2UOCMGgDilbk4fKVPIaryN9M3vxYA0QxyhWpjHG0sRbgl/bqXMdPMdDFDlyLMW5x18OlekVGrPTppr0zYSsYRXgL5dFunciH47jEttpfvQv0wVLsSGQyscuxk/hFrZzLLOmb8ZZhpWALpdFUbMH1OUK0jcXfpMFIAfiGMXKNMboapYXx9A1NOfViZG6nBHHSGee9M1BUSZXMlQJ/nJZAl5mvxi3vEfP5QxqaNqbYep7csm6rNt5L9Onb4546+RKhipBl+GZIeQMNUIco1iZUBZyJUO14C8/A068YuLIAwBMC7oMAFAXxDEAAOoCfxkAoC7QZQCAuiCOkcHtRVjeqwKAOcFfzmXhJMQA8HSgy9lMk6AHACAAcYxsFF0mzQIATAf+cjZKIANdBoDpQJfHcGm27JcDgJkgjpEND/4AYFbwl7MJxZcRawCYBHQ5m8A/MUKAGQCmgThGNkP/xAgAwF3gL+ei/dNFBDEAYDrQ5QzYhw0AC0AcAwCgLvCXAQDqAl0GAKiLwnEMAABwwF8GAKiL/wEJs5legAaA2gAAAABJRU5ErkJggg==" alt="" />

 

 

 回到目录

发表评论
用户名: 匿名