当我们开始使用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. paip.提升性能---并行多核编程哈的数据结构list,set,map

    paip.提升性能---并行多核编程哈的数据结构list,set,map vector/copyonwritearraylist 都是线程安全的. 或者经过包装的list ::: collection ...

  2. java基础接口练习

    1.编写2个接口:InterfaceA和InterfaceB:在接口InterfaceA中有个方法voidprintCapitalLetter():在接口InterfaceB中有个方法void pri ...

  3. sqlserver卡号段分组

    之前给上海一家电子商务公司做一个卖卡系统,遇到了卡号段分组的问题.刚开始没什么好的实现方法,遂在博客园求助但未果,没法自己研究sql,终于搞定. 问题描述: 有个卡库存表,有个卡号字段,假设数据:16 ...

  4. SqlServer 查看事务锁及执行语句

    一.查看当前锁定的事务 ,) ,用户机器名称,) ,是否被锁住),blocked) ,数据库名称,),cmd 命令,waittype as 等待类型 ,last_batch 最后批处理时间,open_ ...

  5. IPv6正则表达式

    斯蒂芬·瑞恩写了一个非常有用的正则表达式,可用于匹配任何一个合法的IPv6地址.以下为正则表达式的代码: ^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|: ...

  6. Microsoft.VisualBasic.DateAndTime.Timer 与 DateTime.Now.TimeOfDay.TotalSeconds 相当

    如题,示例如下: Console.WriteLine(DateTime.Now.TimeOfDay.TotalSeconds); Console.WriteLine(Microsoft.VisualB ...

  7. Activemq消息持久化

    官方文档: http://activemq.apache.org/persistence.html ActiveMq持久化相关配置:/usr/local/apache-activemq-5.11.1/ ...

  8. 【LeetCode】258. Add Digits (2 solutions)

    Add Digits Given a non-negative integer num, repeatedly add all its digits until the result has only ...

  9. centos 7 /etc/rc.local 开机不执行的问题

    最近发现centos7 的/etc/rc.local不会开机执行,于是认真看了下/etc/rc.local文件内容的就发现了问题的原因了 1 2 3 4 5 6 7 8 9 10 11 #!/bin/ ...

  10. Mac 下配置 SSH 免密码安全登录

    Win下个人常使用 SecureCRT ,Mac 下感觉 SecureCRT 并不好使,常用 iTerm2+zsh 搭配使用.A连接B 无密码登陆,则A上面执行 ssh-keygen 一路回车,把 ~ ...