Это пример из моего проекта.Мои доменные классы имеют только общедоступные свойства.Нет сеттеров.Объект создается с помощью конструктора, а данные обрабатываются с использованием методов.
Сущность
public class User: Entity
{
private string _openid;
private string _email;
private string _username;
private int roleid;
// needed for mapping
protected User() { }
// your normal constructor
public User(string openid)
{
Validator.NotNull(string openid, "openid is required.");
_openid = openid;
}
public string Email
{
get { return _email; }
}
public string Username
{
get { return _username; }
}
public string Openid
{
get { return _openid; }
}
// Here are some methods
// ...
}
Класс отображения
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("user");
// Reveal private attributes and map them
Id(Reveal.Member<User>("_id")).Column("id");
Map(Reveal.Member<User>("_username")).Column("username");
Map(Reveal.Member<User>("_openid")).Column("openid_claimed_identifier");
Map(Reveal.Member<User>("_email")).Column("email");
// You need to create this mapping if you want to query using linq,
//see UserRepository below
Map(x => x.Id, "id").ReadOnly();
Map(x => x.Email, "email").ReadOnly();
Map(x => x.Username, "username").ReadOnly();
Map(x => x.Openid, "openid_claimed_identifier").ReadOnly();
}
}
Хранилище
public class UserRepository : Repository<User>, IUserRepository
{
public UserRepository(ISession session)
: base(session)
{
}
public User find_user_by_openid(string openid_claimed)
{
return base.FindBy(x => x.Openid == openid_claimed);
}
public User find_user_by_id(int id)
{
return base.FindBy(x => x.Id == id);
}
}
Помните одну важную вещь: не используйте подчеркивания в именах атрибутов .Например:
public class User: Entity
{
//...
private int role_id;
}
Свободный NHibernate не нравится, когда вы используете определенный атрибут для сопоставления Ссылки .