当我们开始使用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的啦。