一直以来我都为寻找一个合适的Orm,以前用过NBear感觉不错,后来转到Nhibeante特别是Nhibeante的模型映射感觉很强大,也很顺手。随着做了几个项目之后,发现现在的好多项目是以数据库为中心的,往往和数据库设计的标准大相径庭,这就让我想起了当前有一面之缘的EF,听说EF升级到4.2网评反响不错!一直以来都没有升级到.net 4.0也许太我Out了吧!呵。。
元旦放假闲在家里没有事儿,所以看看EF。Orm既然是关系映射模型,那学Orm的时侯先学的就是关系映射。所有Orm关系无非就是:一对一,多对一(一对多),多对多。那我们就来对比一下Nh和EF是如何处理数据关系的。
一、 一对一关系映射
一对一的关系映射最好的例子就是一个人都有一个身份证.下面我们就用这个例子。
EF实体:
UserInfo.cs
public class UserInfo
{
public int userid
{
get;
set;
}
public string username
{
get;
set;
}
public int Carid
{
get;
set;
}
public virtual CardInfo CardInfo
{
get;
set;
}
}
CardInfo.cs
public class CardInfo
{
public int Carid
{
get;
set;
}
public string CardName
{
get;
set;
}
}
NH实体:
UserInfo.cs
public class UserInfo
{
Public virtual int userid
{
get;
set;
}
Public virtual string username
{
get;
set;
}
public virtual CardInfo CardInfo
{
get;
set;
}
}
CardInfo.cs
public class CardInfo
{
Public virtual int Carid
{
get;
set;
}
Public virtual string CardName
{
get;
set;
}
}
猛的一看这样的模型没错,不知道EF为什么不像NH一样不能自动创建外键(Carid)这样看起来不怎么符合领域模型。就因为这个让我习惯了好一会儿!比较之我更习惯NH映射的模型.这样子一看就知道一个人手里拿了一个身份证.
关系映射:
EF UserInfo映射类:
public class UserInfoConfig : EntityTypeConfiguration<UserInfo>
{
public UserInfoConfig()
{
this.HasKey(p => p.userid);//定义主键
this.Property(p => p.username).HasMaxLength(255);//普通属性映射
this.HasRequired(p => p.CardInfo).WithMany().HasForeignKey(p => p.Carid);//一对一的映射
this.ToTable("T_UserInfo");//生成表
}
}
EF CardInfo映射类:
public class CardInfoConfig : EntityTypeConfiguration<CardInfo>
{
public CardInfoConfig()
{
this.HasKey(p => p.Carid);
this.Property(p => p.CardName).HasMaxLength(255);
this.ToTable("T_CardInfo");
}
}
这样的映射是不是感觉很爽?我也是这么认为,可我还是不大习惯。可能是Nh 用XML映射用多了吧!让我们看下Nh One to One的映射.
<class name="UserInfo" table="N_UerInfo">
<id name="userid" column="[userid]">
<generator class="native"/>
</id>
<property name="username" type="string" column="[username]" length="255"/>
<one-to-one name="CardInfo" constrained="true"/>
</class>
<class name="CardInfo" table="N_CardInfo">
<id name="Carid" column="[Carid]">
<generator class="native"/>
</id>
<property name="CardName" column="[CardName]" type="string" length="255"/>
</class>
NH这样子映射虽然很麻烦但一看就能明白.很喜欢这样的。有很多人不喜欢XML映射说很麻烦,其实XML的可读性应该比程序好多了!至少我是这么认为的。一但多起来那就不那么好办了!
今天就到这了吧!下次再对比其他的几种关系。
相关文章
- 如何使用EF优雅的配置一对一的关系
- mybatis中注解与xml配置的对应关系和对比分析
- EF5+MVC4系列(1) Podwerdesigner15.1设计数据库;PD中间表和EF实体模型设计器生成中间表的区别;EF5.0 表关系插入数据(一对多,多对多)
- EF 关系规则(一对一、一对多、多对多...)
- EF 关系规则(一对一、一对多、多对多...)
- EF 关系规则(一对一、一对多、多对多...)
- EF里一对一、一对多、多对多关系的配置和级联删除
- EF和NH关系对比一对多
- EF5+MVC4系列(1) Podwerdesigner15.1设计数据库;PD中间表和EF实体模型设计器生成中间表的区别;EF5.0 表关系插入数据(一对多,多对多)
- Hibernate关联关系配置(一对多、一对一和多对多)