2011-12-16 132 views
4

流利的映射和自動映射之間的區別閱讀一些有關功能NHibernate的文章,我從哪裏開始是什麼功能NHibernate

我有一個現有的數據庫,我需要創建DataAccessLayer這混淆了。我是NHibernate和FluentNhibernate的新手。由於我明白無需編寫hbm.xml文件,因此我選擇了Fluent Nhibernate。

那麼,什麼是FluentMapping?和AutoMapping?

我創建了一個名爲classLibraryProject FirstProject.Entities

我創建了一個名爲 「客戶」 類

namespace FirstProject.Entities 
{ 
public class Customer 
{ 
    public virtual int CustomerID { get; set; } 
    public virtual string CustomerName { get; set; } 
    public virtual string Address1 { get; set; } 
    public virtual string Address2 { get; set; } 
    public virtual string City { get; set; } 
    public virtual string State { get; set; } 
    public virtual int Zip { get; set; } 
} 
} 

然後創建一個映射類

namespace FirstProject.Entities 
{ 
public class CusotmerMap : ClassMap<Customer> 
{ 
    public CustomerMap() 
    { 
     Id(x => x.CustomerID).Column("CustomerID").GeneratedBy.Assigned(); 
     Map(x => x.CustomerName); 
     Map(x => x.Address1); 
     Map(x => x.Address2); 
     Map(x => x.City); 
     Map(x => x.Zip);   
    } 
} 
} 

我現在不要」不知道如何繼續下去。我這樣做是正確的..請建議

如何配置和進行進一步

回答

1

以下是流利

Id(x => x.CustomerID).Column("CustomerID").GeneratedBy.Assigned(); 

我用流利的斷言,像下面

actual.Should().BeGreaterThan(1).And().LessThan(2); 

流利基本上是你將這些命令鏈接在一起的地方,因此它讀得很好。

自動映射是你什麼都不做的地方。一切都按照慣例完成。我傾向於使用自動。如果你不遵守約定,流利就很好。

根據您的映射,正在分配的CustomerId不是開箱即用的約定。因此,你需要或者

  1. 使用流利指定它究竟應該如何映射。這就像在XML中這樣做的標準方式,但與流利的接口。
  2. 使用自動並指定約定將自動將CustomerId更改爲分配。
  3. 使用自動並指定一個覆蓋,它將使用自動但重寫將被分配的CustomerId。

如果你想要做的選項3,這裏是代碼:

var model = AutoMap 
    .AssemblyOf<Customer>() 
    .Where(IsMapped) 
    .Override<Customer>(a => a.Id(b => b.CustomerId, "CustomerId").GeneratedBy.Assigned()); 

功能IsMapped必須要映射實體返回True。

+0

感謝Lain的解釋..當你說AutoMap時,Nhibernate是爲你創建的數據庫表嗎?因爲我已經有了一個現有的數據庫,我只需要通過NHibernate爲它創建DataAccess層,因爲所有的表都已經創建了Identity Key。你認爲選擇1適合這種情況嗎? – user1096623 2011-12-16 18:28:35