2015-10-07 50 views
1

我曾與NHiberNate玩過,我得到它與xml definision一起工作,但我被困在我的Map by Code測試中。 我有以下代碼:NhiberNate通過代碼地圖不包含'id'的定義

using System; 
using System.Collections.Generic; 
using System.Reflection; 
using System.Linq; 
using NHibernate; 
using NHibernate.Cfg; 
using NHibernate.Mapping.ByCode; 
using NHibernate.Mapping.ByCode.Conformist; 
using NHibernate.Mapping; 


namespace NHibernatePets 
{ 
public class Pet 
{ 
    virtual public int id { get; set; } 
    virtual public string PetName { get; set; } 
    virtual public string Species { get; set; } 
    virtual public DateTime Birthday { get; set; } 

    virtual public string Speak() 
    { 
     return "Hi. My name is '" + PetName + "' and I'm a " + Species + " born on " + Birthday + "."; 
    } 
} 

public class PetMap : ClassMapping<Pet> 
{ 
    public PetMap() 
    { 
     table("Pet"); 

     Lazy(true); 
     Id(x => x.Id, map => map.Generator(Generators.Identity)); 
     Property(x => x.Petname, map => map.NotNullable(true)); 
     Property(x => x.Species, map => map.NotNullable(true)); 
     Property(x => x.Birthday, map => map.NotNullable(true)); 
    } 

當我按下F5我給了我下面的錯誤mesage

錯誤15「NHibernatePets.Pet」不包含「ID」的定義,並沒有擴展方法「ID」接受型「NHibernatePets.Pet」的第一個參數可以找到(是否缺少using指令或程序集引用?) }

我的計劃是能夠做到在一個查詢PET d atabase

using (ISession session = OpenSession()) 
{ 
    IQuery query = session.CreateQuery(" FROM Pet"); 
    IList<Pet> pets = query.List<Pet>(); 
    Console.Out.WriteLine("pets.Count = " + pets.Count); 
    pets.ToList().ForEach(p => Console.WriteLine(p.Speak())); 
} 

它工作時,我用xml映射表。 我在這裏做錯了什麼?

回答

0

C#是大小寫敏感的,因爲ID屬性被命名爲 「id

public class Pet 
{ 
    virtual public int id { get; set; } 

我們不能將它映射爲ID

Id(x => x.Id... // there is no Id on x === Pet 

因此,遵循C#通用命名約定只是更改屬性名稱爲Id

public class Pet 
{ 
    //virtual public int id { get; set; } 
    virtual public int Id { get; set; } 
+0

它解決了這個問題。謝謝 – havmaage

+0

享受強大的NHibernate,先生;) –