Fluent NHibernate

Sep 30, 2009 at 3:44 PM

http://wiki.fluentnhibernate.org/Getting_started#Your_first_project

 

突然发现的一个东东...

 

Coordinator
Oct 2, 2009 at 1:44 PM

简单看了一下,没什么感觉。。。

Oct 8, 2009 at 3:24 PM

也就是说,

public class Store {
  public virtual int Id { get; private set; }
  public virtual string Name { get; set; }
  public virtual IList<Product> Products { get; set; }
  public virtual IList<Employee> Staff { get; set; }
 

Store就是一个纯粹的类(MODEL)独立的,

 

public class StoreMap : ClassMap<Store>
{
  public StoreMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);
    HasMany(x => x.Staff)
      .Inverse()
      .Cascade.All();
    HasManyToMany(x => x.Products)
     .Cascade.All()
     .Table("StoreProduct");
  }public class StoreMap : ClassMap<Store>
{
  public StoreMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);
    HasMany(x => x.Staff)
      .Inverse()
      .Cascade.All();
    HasManyToMany(x => x.Products)
     .Cascade.All()
     .Table("StoreProduct");
  }
}

}

在他的上层定义其中的关系,Index和Length,AllowNull什么的

使得model层保持纯洁

 

 

Coordinator
Oct 9, 2009 at 3:26 AM

Hibernate/NHibernate原来就是O和M分开的,Object独立,Map使用XML文件实现。这个FN只是把以前XML实现的部分,使用代码实现罢了。不过O和M在两个地方,使得修改非常繁琐而且易出错。

现在,Hibernate也觉得使用Annotation更方便,所以提供了完整的Annotation方案。

不过,即使单纯从Object来说,NHibernate和DbEntry.Net也是不可互换的。比如DbEntry.Net一般使用缺省ID的方式,Hibernate需要自己定义;DbEntry.Net使用abstract而NHibernate使用virtual;DbEntry.Net自动初始化集合属性,而NHibernate需要手动初始化;等等。

其它的ORM想来也一样有各种限制,所以不可能和NHibernate无缝互换。所以,这种O和M独立处理的方式,只能说是假纯而已。