快速开发~Rafy框架的初步认识
当我们开始使用EF的同时,是不是就会更好的认识了其他的ORM框架,最近接触了Rafy的使用,感觉还是蛮有兴趣去学习的,虽然最初的我到现在看的并不深入,但是我个人感觉还是可以简单地做一些总结的啦,或许语言不多,但是更多的想总结下它的使用,之前没接触的友友也可以简单地认识一下啦,嘿嘿。
要是想使用Rafy框架,其实很简单的,只需要打开VS然后在工具栏中选择扩展和更新然后搜索Rafy.SDK安装即可。

Rafy框架的简单使用
说起来使用,其实还是很简单的入门的,当我们建立完我们的解决方案后我们就新建一个属于自己的项目的啦,我们在添加项目时会发现如下的选项:

然后可以先选择Rafy框架创建项目,看下实体类的创建如下:

DBIPlugin类的内容,其实是设置一个数据库的名字:

DBIEntity类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Security.Permissions;
using System.Text;
using Rafy;
using Rafy.ComponentModel;
using Rafy.Domain;
using Rafy.Domain.ORM;
using Rafy.Domain.Validation;
using Rafy.MetaModel;
using Rafy.MetaModel.Attributes;
using Rafy.MetaModel.View;
using Rafy.ManagedProperty; namespace DBI
{
[Serializable]
public abstract class DBIEntity : LongEntity
{
#region 构造函数 protected DBIEntity() { } [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
protected DBIEntity(SerializationInfo info, StreamingContext context) : base(info, context) { } #endregion
} [Serializable]
public abstract class DBIEntityList : EntityList { } public abstract class DBIEntityRepository : EntityRepository
{
protected DBIEntityRepository() { }
} [DataProviderFor(typeof(DBIEntityRepository))]
public class DBIEntityRepositoryDataProvider : RdbDataProvider
{
protected override string ConnectionStringSettingName
{
get { return DBIPlugin.DbSettingName; }
}
} public abstract class DBIEntityConfig<TEntity> : EntityConfig<TEntity> { }
}
说起来DBIEntity这个类,其实是一个实体类的基类,例如我们创建一个实体类User,右击添加选择第一个即可,同时如下:

然后会出现一个针对这个类的选择:

一般情况下我们选择同时生成仓库,当然我们也可以仅仅添加实体,之后再选择添加仓库也可以的啦,嘿嘿,看下User实体类:
/// <summary>
/// 用户
/// </summary>
[RootEntity, Serializable]
public partial class User : DBIEntity
{
#region 构造函数 public User() { } [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
protected User(SerializationInfo info, StreamingContext context) : base(info, context) { } #endregion #region 引用属性 #endregion #region 组合子属性 public static readonly ListProperty<UserChildList> UserChildListProperty = P<User>.RegisterList(e => e.UserChildList);
public UserChildList UserChildList
{
get { return this.GetLazyList(UserChildListProperty); }
} public static readonly ListProperty<PermissionList> PermissionListProperty = P<User>.RegisterList(e => e.PermissionList);
public PermissionList PermissionList
{
get { return this.GetLazyList(PermissionListProperty); }
} #endregion #region 一般属性
public static readonly Property<string> NameProperty = P<User>.Register(e => e.Name);
/// <summary>
/// 名称
/// </summary>
public string Name
{
get { return this.GetProperty(NameProperty); }
set { this.SetProperty(NameProperty, value); }
} public static readonly Property<int> AgeProperty = P<User>.Register(e => e.Age);
/// <summary>
///年龄
/// </summary>
public int Age
{
get { return this.GetProperty(AgeProperty); }
set { this.SetProperty(AgeProperty, value); }
}
#endregion #region 只读属性 #endregion
} /// <summary>
/// 用户 列表类。
/// </summary>
[Serializable]
public partial class UserList : DBIEntityList { } /// <summary>
/// 用户 仓库类。
/// 负责 用户 类的查询、保存。
/// </summary>
public partial class UserRepository : DBIEntityRepository
{
/// <summary>
/// 单例模式,外界不可以直接构造本对象。
/// </summary>
protected UserRepository() { } [RepositoryQuery]
public virtual UserList GetByName(string name,PagingInfo pagingInfo)
{
var q = this.CreateLinqQuery();
q = q.Where(e => e.Name == name);
return (UserList)this.QueryData(q, pagingInfo);
} [RepositoryQuery]
public virtual EntityList GetBySql(string name,PagingInfo pagingInf)
{
FormattedSql sql = @"SELECT * FROM [dbo].[User] WHERE a.NAME ={0}";
sql.Parameters.Add(name);
return (UserList)(this.DataQueryer as RdbDataQueryer).QueryData(sql);
}
} /// <summary>
/// 用户 配置类。
/// 负责 用户 类的实体元数据的配置。
/// </summary>
internal class UserConfig : DBIEntityConfig<User>
{
/// <summary>
/// 配置实体的元数据
/// </summary>
protected override void ConfigMeta()
{
//配置实体的所有属性都映射到数据表中。
Meta.MapTable().MapAllProperties();
}
}
}
其实添加完就已经设置了很多自己代码段的,在添加属性时也方便了很多,下面简单地写一下常用的属性添加的快捷键,如下:
RafyProperty+Tab键:一般属性的添加;
RafyPropertyExtension+Tab键:扩展属性的添加;
RafyPropertyReadOnly+Tab键:只读属性的添加;
RafyPropertyReference+Tab键:引用属性的添加;
RafyPropertyReferenceNullable+Tab键:可空引用属性的添加;
我只能简单地写一写常用的啦,嘿嘿。
上面再添加完实体类后,我们可以看到文件DomainModel1.odml,其实他就是实体的关系图,有了它我们实体的属性关系已经类之间的关系就更加的清晰明了,下面简单地说一下添加方式,像上面一样右击选择添加,会出现如下页面,选择后添加即可:

进入到文件中如下,选择添加实体类,左图是当实体类有所更新时,可以刷新实体类的,点击添加实体类的按钮然后出现有图所示,选择呈现的实体类,我们可以全部选择也可以。
  
当我们选择后关系图如下所示:

我这里只是简单地添加了几个实体类而已,嘿嘿,为了展示odml类文件的图示。
这里就是简单的总结了Rafy的简单地使用,接下来可能会写一个小的demo的啦。
快速开发~Rafy框架的初步认识的更多相关文章
- LigerUI 快速开发UI框架 链接
		
LigerUI 快速开发UI框架 http://www.ligerui.com/ jQuery ligerUI 中文官方网站 http://www.ligerui.com/demo.html
 - 使用代码生成工具快速开发ABP框架项目
		
在一般系统开发中,我们一般要借助于高度定制化的代码生成工具,用于统一代码风,节省开发时间,提高开发效率.不同的项目,它的项目不同分层的基类定义不同,我们需要在框架基类的基础上扩展我们的业务类代码,尽量 ...
 - 基于SpringBoot的Web API快速开发基础框架
		
其实还是很因为懒,才会有这个案例项目的产生,每次开启一个终端的小服务都要整理一次框架,造成重复的.不必要的.缺乏创造性的劳动,SO,本着可以用.用着简单的原则上传代码到Github,希望有需要的朋友直 ...
 - 基于EF6的快速开发Web框架——Swift.Net
		
Swift.Net This Is A Light-Weight And Fast-Develop .Net Framework. Usage STEP 1 Create Your Entities ...
 - RDIFramework.NET -.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(WebForm版)
		
RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(WebForm版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之 ...
 - RDIFramework.NET-.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(MVC版)
		
RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(MVC版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之产品管理 ...
 - Winform开发框架之通用Windows摄像头调用拍照--SNF快速开发平台3.3-Spring.Net.Framework
		
今天做了一个windows系统下调用摄像头.进行开启.关闭.拍照.设置等等功能演示. 进行源码贡献,欢迎大家下载使用 一.DEMO效果如下: 二.DEMO演示代码如下: using SNF.Utili ...
 - Winform开发框架之图表报表在线设计器2-图表-SNF.EasyQuery项目--SNF快速开发平台3.3-Spring.Net.Framework
		
上一篇讲到,如何快速创建报表程序了.这篇教大家如何快速制作图表报表. 继上一篇,Winform开发框架之图表报表在线设计器-报表 上一篇讲到如何了创建数据源,这里就不在介绍了.那我们就直接从图表设计器 ...
 - Winform开发框架之图表报表在线设计器-报表-SNF.EasyQuery项目--SNF快速开发平台3.3-+Spring.Net.Framework
		
带过项目和做过项目的人都知道,在客户现场客户的需求是百般多样的,今天要查销售出库情况,明天要看整个月的各部门销售情况,后天要查全年每个客户的项目金额.一直以前都有新需求,虽然会有售后收益,但如果有一个 ...
 
随机推荐
- 使用gulp进行React任务的构建
			
如果你不熟悉gulp的操作,可以看下下面的教程: gulp学习笔记1 gulp学习笔记2 gulp学习笔记3 gulp学习笔记4 对于gulp在react中的构建,找了很多资料,看了很多文章,也根据文 ...
 - 爬虫神器xpath的用法(一)
			
1.如果你没有安装lxml,请运行pip install lxml或者easy_install lxml安装,如果在安装过程中失败的话, 是因为lxml需要依赖某些库文件,具体可以问下度娘,这里不再赘 ...
 - php类自动装载、链式操作、魔术方法
			
1.自动装载实例 目录下有3个文件:index.php load.php tests文件夹 tests文件夹里有 test1.php <?php namespace Tests; class T ...
 - 淘宝TOP之API测试
			
下面的文章,是很早之前写的.内容过时了.主要是获取session的方法,很简单了.作为一个中小型网站开发者,淘宝API的开放大大缩短了网站的开发周期和运作效率,面对海量的数据,开发者只要仔细阅读开发文 ...
 - android: SQLite创建数据库
			
SQLite 是一款轻量级的关系型数据库,它的运算速度非常快, 占用资源很少,通常只需要几百 K 的内存就足够了,因而特别适合在移动设备上使用.SQLite 不仅支持标准的 SQL 语法,还遵循了数据 ...
 - iOS:如何通过UIEdgeInsetsMake来制作可伸缩的Button
			
注:本文翻译自国外iOS开发者Natasha The Robot的一篇博文,链接在此.在iOS应用中,经常会有很多Button有相同的背景图片,却由于处在不同的位置而大小不同(尽管在iOS7中Butt ...
 - Android 使用Fragment界面向下跳转并一级级返回
			
http://www.cnblogs.com/_ymw/p/4227862.html 1.首先贴上项目结构图: 2.先添加一个接口文件BackHandledInterface.java,定义一个set ...
 - 充分利用 UE4 中的噪声
			
转自:https://www.unrealengine.com/zh-CN/blog/getting-the-most-out-of-noise-in-ue4 UE4 推出基于材质的程序式噪声已经有一 ...
 - CCNA实验4:HDLC和PPP
			
一.HDLC封装 router9和11上分别配置s0/0如下 conf t int s0/0 encapsulation hdlc do show int s0/0 ip address x.x.x. ...
 - Win7快捷方式图标不显示解决办法
			
问题:WIN7的系统,桌面.开始菜单以及任务栏的快捷方式图标显示不正常,看不到程序默认图标,快捷方式图标不显示. 解决方法:删除程序图标缓存即可. 将下面的内容复制到记事本保存为“图标缓存清理.b ...