当我们开始使用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框架的初步认识的更多相关文章

  1. LigerUI 快速开发UI框架 链接

    LigerUI 快速开发UI框架 http://www.ligerui.com/ jQuery ligerUI 中文官方网站 http://www.ligerui.com/demo.html

  2. 使用代码生成工具快速开发ABP框架项目

    在一般系统开发中,我们一般要借助于高度定制化的代码生成工具,用于统一代码风,节省开发时间,提高开发效率.不同的项目,它的项目不同分层的基类定义不同,我们需要在框架基类的基础上扩展我们的业务类代码,尽量 ...

  3. 基于SpringBoot的Web API快速开发基础框架

    其实还是很因为懒,才会有这个案例项目的产生,每次开启一个终端的小服务都要整理一次框架,造成重复的.不必要的.缺乏创造性的劳动,SO,本着可以用.用着简单的原则上传代码到Github,希望有需要的朋友直 ...

  4. 基于EF6的快速开发Web框架——Swift.Net

    Swift.Net This Is A Light-Weight And Fast-Develop .Net Framework. Usage STEP 1 Create Your Entities ...

  5. RDIFramework.NET -.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(WebForm版)

    RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(WebForm版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之 ...

  6. RDIFramework.NET-.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(MVC版)

    RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(MVC版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之产品管理 ...

  7. Winform开发框架之通用Windows摄像头调用拍照--SNF快速开发平台3.3-Spring.Net.Framework

    今天做了一个windows系统下调用摄像头.进行开启.关闭.拍照.设置等等功能演示. 进行源码贡献,欢迎大家下载使用 一.DEMO效果如下: 二.DEMO演示代码如下: using SNF.Utili ...

  8. Winform开发框架之图表报表在线设计器2-图表-SNF.EasyQuery项目--SNF快速开发平台3.3-Spring.Net.Framework

    上一篇讲到,如何快速创建报表程序了.这篇教大家如何快速制作图表报表. 继上一篇,Winform开发框架之图表报表在线设计器-报表 上一篇讲到如何了创建数据源,这里就不在介绍了.那我们就直接从图表设计器 ...

  9. Winform开发框架之图表报表在线设计器-报表-SNF.EasyQuery项目--SNF快速开发平台3.3-+Spring.Net.Framework

    带过项目和做过项目的人都知道,在客户现场客户的需求是百般多样的,今天要查销售出库情况,明天要看整个月的各部门销售情况,后天要查全年每个客户的项目金额.一直以前都有新需求,虽然会有售后收益,但如果有一个 ...

随机推荐

  1. wicket基本控件使用笔记

    Label       new Label(“message”,”message content”); MutLineLabel         new MutlineLabel(“message”, ...

  2. linux nc (NetCat) 命令详解

    原文:http://www.huanxiangwu.com/477/linux-nc-netcat 一.版本通常的Linux发行版中都带有NetCat(简称nc),甚至在拯救模式光盘中也由busybo ...

  3. 都昌 DCWriter电子病历编辑器演示文档截屏

  4. spring 4.2.0后jdbcTemplate中不用queryForLong了(之系统升级发现)

    在spring 3.2.2之后,jdbcTemplate.queryForInt已经被取消了! 原来是这样写的: String sql = "SELECT count(*) FROM USE ...

  5. uestc_retarded 模板

    虽然这个队,以后再也没有了,但是他的模板,是永垂不朽的![误 #include <ext/pb_ds/priority_queue.hpp> __gnu_pbds::priority_qu ...

  6. [转] js == 与 === 的区别

    1.对于string,number等基础类型,==和===是有区别的 1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等 2)同类型比较,直接进 ...

  7. OAuth2.0和SSO授权

    一.OAuth2.0授权协议 一种安全的登陆协议,用户提交的账户密码不提交到本APP,而是提交到授权服务器,待服务器确认后,返回本APP一个访问令牌,本APP即可用该访问令牌访问资源服务器的资源.由于 ...

  8. Ant自动编译打包&发布 android项目

    Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...

  9. 生成二维码 打上自定义logo

    private void RenderQrCode(string Code) { try { string level = "Q"; string url = ZConfig.Ge ...

  10. 【C#】取得并改变图像解析度

    , , bmpOrg.Width, bmpOrg.Height);       g.Dispose();       // 画像を保存       string dirName = Path.GetD ...