快速开发~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
带过项目和做过项目的人都知道,在客户现场客户的需求是百般多样的,今天要查销售出库情况,明天要看整个月的各部门销售情况,后天要查全年每个客户的项目金额.一直以前都有新需求,虽然会有售后收益,但如果有一个 ...
随机推荐
- fir.im Weekly - 工欲善其事,必先利其器
这周为大家搜罗了一些优秀的 GitHub 资源.APP开发工具.产品UI设计资源等等,同时也有一些程序员个人成长的Tips,"软硬件兼备"也许事半功倍不只是梦! Open-Sour ...
- (谷歌浏览器等)解决css中点击input输入框时出现外边框方法【outline:medium;】
问题:在使用谷歌浏览器,360浏览器时,点击input输入框会出现带颜色的外边框,如下图所示:
- 如何在servlet取得spring beans (autowired)(转)
在应用中一般普通的JavaPojo都是由Spring来管理的,所以使用autowire注解来进行注入不会产生问题,但是有两个东西是例外的,一个是 Filter,一个是Servlet,这两样东西都是由S ...
- 转:SDL2源代码分析
1:初始化(SDL_Init()) SDL简介 有关SDL的简介在<最简单的视音频播放示例7:SDL2播放RGB/YUV>以及<最简单的视音频播放示例9:SDL2播放PCM>中 ...
- shell变量注意事项
概念:变量赋值,变量替换,变量引用,命令替换 variable=22 echo variable 可以在同一行设置多个变量.例如 va1=good va2=chif va3=beijing #需 ...
- Sublime Text 3103 Crack 破解 注册码(亲测有效)
随机复制下面的几四个注册码 粘贴到sublime text 3(Build 3103)注册框 就可以了! 第一个--first licence key : ====================== ...
- mysql设置连接超时时间参数:wait_timeout
[root@ ~]# mysql -h 192.168.0.* -uroot -pEnter password: Welcome to the MySQL monitor. Commands end ...
- 有时候为了方便sql语句的对比和查询,我们可以使用declare来定义变量 上下篇的问题
--定义一些参数 declare @nodeId int,@ekid int ,@ecid int,@eid int,@pid int --列表 SELECT * FROM ( SELECT *,RO ...
- 用git写书
apebook.org www.apebook.org 最好的程序员图书免费托管服务 apebook 提供了 gitbook.com 类似的云端图书托管能力,图书基于广受欢迎的 gitbook 工具 ...
- 【转】drupal7请求异常,执行时间过长的解决方法
drupal7请求错误,执行时间过长的解决办法 根据你的系统或网络设置Drupal不能读取网页,造成功能缺失.可能是web服务器配置或PHP设置引起的,可用更新.获取更新源.使用OpenID登 录或使 ...