最近要上手的Nfine框架,以前学习Java,上手这个感觉和ssm框架基本类似,基于MVC思想。借鉴了其他博主的帖子终于把这个框架增删改查等一套基本逻辑理清楚了,下面是我的总结内容,附带步骤图片.
1.建立Entity,扩展接口 — 这里是建立一个 Camera_InfoEntity 的Entity,也就是表的实体bean.
namespace NFine.Domain.Entity.SystemManage
{
public class Camera_InfoEntity : IEntity
{
public string F_Id { get; set; }
public string CameraName{ get; set; }
public double Longitude { get; set; }
public double Latitude { get; set; }
public string Position { get; set; }
public int? VLAN { get; set; }
public string IP { get; set; }
public string Mask { get; set; }
public string Gateway { get; set; }
public int? Port { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string Remark { get; set; }
public string F_ParentId { get; set; }
public int? F_Layers { get; set; }
public string F_EnCode { get; set; }
public string F_FullName { get; set; }
public string F_CategoryId { get; set; }
public int? F_SortCode { get; set; }
public bool? F_DeleteMark { get; set; }
public bool? F_EnabledMark { get; set; }
public string F_Description { get; set; }
public DateTime? F_CreatorTime { get; set; }
public string F_CreatorUserId { get; set; }
public DateTime? F_LastModifyTime { get; set; }
public string F_LastModifyUserId { get; set; }
public DateTime? F_DeleteTime { get; set; }
public string F_DeleteUserId { get; set; }
public double F_px_X { get; set; }
public double F_px_Y { get; set; }
}
}
2.在同项目下的04 IRepository,建立仓库接口。----这里是声明了名字 ICamera_InfoRepository 的仓库接口,其绑定的IRepositoryBase就是
第一步声明的Camera_InfoEntity.
相当于service层的接口声明,绑定了返回的实体类.
namespace NFine.Domain.IRepository.SystemManage
{
public interface ICamera_InfoRepository : IRepositoryBase
{
}
}
3、在maping中添加映射,其实就是在context中声明你的表名称。 ----这里就是声明了Camera_InfoEntity这个实体类对应的表的和表的主键.
相当于在mybatis中添加表的映射,用反向工程自动生成一套增删改查.
namespace NFine.Mapping.SystemManage
{
public class Camera_InfoMap : EntityTypeConfiguration
{
public Camera_InfoMap()
{
this.ToTable(“ZDYJ_Camera_Info”);
this.HasKey(t => t.F_Id);
}
}
}
4.在NFine.Repository项目中继承接口. ----这里是创建一个类Camera_InfoRepository 继承了 ICamera_InfoRepository 仓库接口。
相当于service层的serviceImpl,serviceImpl实现了接口service.
namespace NFine.Repository.SystemManage
{
public class Camera_InfoRepository : RepositoryBase
{
}
}
5.在NFine.Application中实现应用服务。—用仓库接口 ICamera_InfoRepository 多态实现创建一个 service,
private ICamera_InfoRepository service = new Camera_InfoRepository();
service 调底层框架已经封装好的几个方法操作数据库增删改查。
相当于在Dao层serviceImpl 调 某个表的mapping中已经写好的方法.
namespace NFine.Application.SystemManage
{
public class Camera_InfoApp
{
private ICamera_InfoRepository service = new Camera_InfoRepository();
public List GetList1(Pagination pagination, string keyword)
{
var expression = ExtLinq.True();
if (!string.IsNullOrEmpty(keyword))
{
expression = expression.And(t => t.CameraName.Contains(keyword));
}
return service.FindList(expression, pagination);
}
public List GetList()
{
return service.IQueryable().ToList();
}
public Camera_InfoEntity GetForm(string keyValue)
{
return service.FindEntity(keyValue);
}
public void DeleteForm(string keyValue)
{
if (service.IQueryable().Count(t => t.F_ParentId.Equals(keyValue)) > 0)
{
throw new Exception("删除失败!操作的对象包含了下级数据。");
}
else
{
service.Delete(t => t.F_Id == keyValue);
}
}
public void SubmitForm(Camera_InfoEntity Camera_InfoEntity, string keyValue)
{
if (!string.IsNullOrEmpty(keyValue))
{
Camera_InfoEntity.Modify(keyValue);
service.Update(Camera_InfoEntity);
}
else
{
Camera_InfoEntity.Create();
service.Insert(Camera_InfoEntity);
}
}
}
}
5.1. service可以调用的方法就是在IRepositoryBase中定义的通用方法.返回的TEntity也就是调用绑定的实体bean.
namespace NFine.Data
{
///
/// 仓储接口
///
/// 实体类型
public interface IRepositoryBase where TEntity : class,new()
{
int Insert(TEntity entity);
int Insert(List entitys);
int Update(TEntity entity);
int Delete(TEntity entity);
int Delete(Expression> predicate);
TEntity FindEntity(object keyValue);
TEntity FindEntity(Expression> predicate);
IQueryable IQueryable();
IQueryable IQueryable(Expression> predicate);
List FindList(string strSql);
List FindList(string strSql, DbParameter[] dbParameter);
List FindList(Pagination pagination);
List FindList(Expression> predicate, Pagination pagination);
}
}
6.在views文件夹先建立各个图层页面,直接ajax的 url: “/SystemManage/Camera_Info/GetGridJson”,
会转到对应controller下面去处理,先new出对应的Camera_InfoApp,Camera_InfoApp去调用第五步中的方法并返回值.
namespace NFine.Web.Areas.SystemManage.Controllers
{
public class Camera_InfoController : ControllerBase
{
private Camera_InfoApp Camera_InfoApp = new Camera_InfoApp();
[HttpGet]
[HandlerAjaxOnly]
public ActionResult GetGridJson(Pagination pagination, string keyword)
{
var data = new
{
rows = Camera_InfoApp.GetList1(pagination, keyword),
total = pagination.total,
page = pagination.page,
records = pagination.records
};
return Content(data.ToJson());
}
发现好像上传文件下载竟然需要C币,只能把图片一张张发出来,感觉比较乱可以把图片拷贝到一个文件夹,看截图感觉对第一次接触这个框架的上手比较有帮助。
1、建立Entity
2、建立仓库接口
3、在maping中添加映射
4、在项目中继承接口
5、在Application中实现应用服务
5.1、service可以调用的方法
6、建立views调用方法
7、controller接收调用