2015-10-07 4 views
1

Я играл с NHiberNate, я получил его, чтобы работать с определением xml, но я застрял в своей проверке кода по коду. У меня есть следующий код: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 я даю мне следующее

ошибке электронного письма

Error 15 «NHibernatePets.Pet» не содержит определение для «Id» и не метода расширения «Id» принимать первый аргумент типа «NHibernatePets.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, сэр;) –

 Смежные вопросы

  • Нет связанных вопросов^_^