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>