.Net简单三层框架简介
简单三层框架,是.Net开发中最最基础的框架了,由 数据访问层、逻辑处理层、表示层组成。一般情况下,在项目中数据模型Model层也是单独一层,但是只是单纯的数据模型不算在业务层划分当中。
好了,框架搭建,如果不了解,可能会觉得难以下手,了解之后,自然知道怎么做,只是其中的步骤,比起单纯的功能开发,是要繁琐不少,下面我们来一步一步搭建属于自己的框架,这里只列出重要步骤,其他未提到的细节可自行摸索。
数据模型Model层创建
数据模型层,首先要创建数据库,再从数据库生成EF模型。
创建数据库,表,添加一条测试数据
新建类库,添加实体数据模型,连接数据库,获取表结构到实体模型
首先,添加类库 ,名称:Example.Model
再添加实体数据模型:
至此,Model数据层算了完成了。
DAL数据访问层创建
由于我们事件知道有几层,所以,先把所有的类库项目全部先建立好,web为MVC的空项目,至于各层代码,分到各层再去处理
由于使用EF,为了方便使用EF扩展,先用nuget添加一个扩展包
EntityFrameWork.Extended,版本使用默认的就行。
添加好之后,就可以添加一个BaseDAL的类了,是为了方便DAL层操作的。
BaseDAL.cs
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using EntityFramework.Extensions; using Example.Model; namespace Example.DAL { public class BaseDAL<T> where T : class { private ExampleEntities _db = null; public ExampleEntities db { get { if (_db == null) _db = new ExampleEntities(); return _db; } } public virtual IQueryable<T> Entities { get { return db.Set<T>().AsNoTracking(); } } public virtual IQueryable<T> Table { get { return db.Set<T>(); } } public IList<T> GetAll(Expression<Func<T, bool>> exp) { var query = db.Set<T>().Where(exp).AsNoTracking(); IList<T> data = query.ToList(); return data; } public int Add(T model) { try { EntityState state = db.Entry(model).State; if (state == EntityState.Detached) { db.Entry(model).State = EntityState.Added; } //db.Set<T>().Add(model); return db.SaveChanges(); } catch (System.Data.Entity.Validation.DbEntityValidationException ex) { string errmsg = ""; foreach (var item in ex.EntityValidationErrors.First().ValidationErrors) { errmsg += item.ErrorMessage + " ; "; } throw new Exception(errmsg); } finally { } } /// <summary> /// 批量添加 /// </summary> /// <param name="models"></param> /// <returns></returns> public int AddCollect(List<T> models) { try { foreach (T model in models) { EntityState state = db.Entry(model).State; if (state == EntityState.Detached) { db.Entry(model).State = EntityState.Added; } } //db.Set<T>().Add(model); return db.SaveChanges(); } catch (System.Data.Entity.Validation.DbEntityValidationException ex) { string errmsg = ""; foreach (var item in ex.EntityValidationErrors.First().ValidationErrors) { errmsg += item.ErrorMessage + " ; "; } throw new Exception(errmsg); } finally { } } public int Edit(T model) { try { &nb