рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ, рдореИрдВ
рдУрд░реЗрдХрд▓ рдХреЗ рд╕рд╛рде
рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ NHibernate рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдкреНрд░рдХрд╛рд╢
рдбрд╛рд▓рдирд╛ рдФрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдм рдХреБрдЫ рд▓реЗрдЦ рд╣реИрдВ (
рд╣рдм рдкрд░ рдЙрд▓реНрд▓реЗрдЦ), рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдУрд░реЗрдХрд▓ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд╛ рд╡рд░реНрдгрди рднреА рдХрдо рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд░реВрд╕реА рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдЦреБрдж рдХреЛ XML рдХреЗ
NHibernate (рддреЛ xmlless рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП) рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рджреЗрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ ("рджреНрд░рд╡" рдпрд╛ "рд▓рдЪреАрд▓рд╛") рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЯреНрдпреВрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрдПрдБ
рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
- Oracle рд╕рд░реНрд╡рд░ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ 11.2.0.1.0)
- Oracle DAC (рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ 11.2.0.2.1), Oracle рдХреНрд▓рд╛рдЗрдВрдЯ рдпрд╛ Oracle рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдЖрдкрдХреА рдкрд╣реБрдВрдЪ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рдкреНрд░рджрд╛рддрд╛ред
рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреГрддреАрдп-рдкрдХреНрд╖ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдпрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИрдВ:
%Oracle DAC/Client%\product\11.2.0\client_1\Network\Admin\tnsnames.ora
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orasrvxp)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ
Visual Studio 2010 рдореЗрдВ рдПрдХ рдирдпрд╛ рдХрдВрд╕реЛрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕реЗ FluentExample рдирд╛рдо рджреЗрдВред рдореИрдВ рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЦреЛрдЬрдиреЗ, рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NuGet Package Manager рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЖрдк
рд╕реНрд╡рдпрдВ рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ "рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреИрдХреЗрдЬ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝реЗрдВ ..." рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЦреЛрдЬ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдСрдирд▓рд╛рдЗрди рдЯреИрдм рдореЗрдВ, "рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣" рджрд░реНрдЬ рдХрд░реЗрдВ:

рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ NHibernate рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд▓реЛрдб рдХреА рдЬрд╛рдПрдВрдЧреА (Castle.ore, Iesi.Collections, NHibernate, NHibernate.Castle)ред
рдореИрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА
рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдПрдХ рдореВрд▓
рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧрд╛, рдпрд╣ рдмрд╕ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдпреЛрдЬрдирд╛ рдХрд╛ рд░реВрдк рд╣реИ:

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рджреЛ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ: рдПрдВрдЯрд┐рдЯреАрдЬрд╝ рдФрд░ рдореИрдкрд┐рдВрдЧ, рдЬрд┐рд╕рдореЗрдВ рдЗрдХрд╛рдЗрдпрд╛рдБ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдореИрдкрд┐рдВрдЧ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреЗред
рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛
рдкреНрд░рдердо рдЗрдХрд╛рдИ, рдХрд░реНрдордЪрд╛рд░реАред рдХрд░реНрдордЪрд╛рд░реА рдХрд╛ рдПрдХ рдирд╛рдо, рдЙрдкрдирд╛рдо рдФрд░ рдХрд╛рдо рдХрд╛ рд╕реНрдерд╛рди рд╣реИ - рд╕реНрдЯреЛрд░ред Entities рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдирд┐рдореНрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ:
public class Employee
{
public virtual int Id { get ; private set ; }
public virtual string FirstName { get ; set ; }
public virtual string LastName { get ; set ; }
public virtual Store Store { get ; set ; }
}
* This source code was highlighted with Source Code Highlighter .
рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЛ рдмрд╛рддреЛрдВ рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
- рдЗрд╕рдХреЗ рдмрд╛рдж, рдирд┐рдЬреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде
Id
рд╕рдВрдкрддреНрддрд┐ рдФрд░ рдПрдХ-рд╕реЗ-рдХрдИ рд╕реВрдЪреА рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдХреЗрд╡рд▓ NHibernate Id
(рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЗ рд▓рд┐рдП рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рд╣рдо рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВред - рд╕рднреА рдЧреБрдгреЛрдВ рдХреЛ
virtual
рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ NHibernate рд╣рдорд╛рд░реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдПрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рд╕рдВрдкрддреНрддрд┐ рдЕрдзрд┐рднрд╛рд░ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рдРрд╕рд╛ рдЙрддреНрдкрд╛рдж рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо, рдореВрд▓реНрдп рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмреЗрдЪрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреЛрд░реЛрдВ рдХреА рд╕реВрдЪреА рд╣реИ:
public class Product
{
public virtual int Id { get ; private set ; }
public virtual string Name { get ; set ; }
public virtual double Price { get ; set ; }
public virtual IList<Store> StoresStockedIn { get ; private set ; }
public Product()
{
StoresStockedIn = new List <Store>();
}
}
* This source code was highlighted with Source Code Highlighter .
рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдирд┐рдЬреА рд╕реЗрдЯрд░ рд╣реИ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИред
рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реНрдЯреЛрд░ рдХреА рд╢реНрд░реЗрдгреА, рд╕рд╛рде рд╣реА рд╕рд╛рдорд╛рди рдФрд░ рдХрд░реНрдорд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА:
public class Store
{
public virtual int Id { get ; private set ; }
public virtual string Name { get ; set ; }
public virtual IList<Product> Products { get ; private set ; }
public virtual IList<Employee> Staff { get ; private set ; }
public Store()
{
Products = new List <Product>();
Staff = new List <Employee>();
}
public virtual void AddProduct(Product product)
{
product.StoresStockedIn.Add( this );
Products.Add(product);
}
public virtual void AddEmployee(Employee employee)
{
employee.Store = this ;
Staff.Add(employee);
}
}
* This source code was highlighted with Source Code Highlighter .
рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ, рд╣рдо рдереЛрдбрд╝рд╛ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ NHibernate рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдмрдВрдз рдХреЗ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдпрд╣реАрдВ рдкрд░ рд╣рдорд╛рд░реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЙрддреНрдкрд╛рдж рдФрд░ рд╕реНрдЯреЛрд░ рдХреЗ рдмреАрдЪ рдХрдИ-рд╕реЗ-рдХрдИ рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХрд┐рдВрдЧ рддрд╛рд▓рд┐рдХрд╛ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
Mappim рд╕рдВрд╕реНрдерд╛рдУрдВ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд▓рд╛рд╕рд┐рдХ NHibernate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ xml рдореИрдкрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ NHibernate рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдореИрдкрд┐рдВрдЧ рдХрдХреНрд╖рд╛рдПрдВ рдореИрдкрд┐рдВрдЧ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдЖрдЗрдП
Employee
рд╡рд░реНрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред
using FluentExample.Entities;
using FluentNHibernate.Mapping;
namespace FluentExample.Mappings
{
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
}
}
}
* This source code was highlighted with Source Code Highlighter .
рдкреНрд░рджрд░реНрд╢рди рдХреЛрдб рдХреЛ рд╣реА FluentNHibernate рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ
ClassMap
рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╡рд░реНрдЧ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдкрд┐рдВрдЧ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ NHibernate рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
public
рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛рдПрдВ рдШреЛрд╖рд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рддреБрд░рдВрдд рдкреВрд░реНрдг рдорд╛рдирдЪрд┐рддреНрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
public EmployeeMap()
{
Table( "Employee" );
Id(e => e.Id)
.GeneratedBy.Sequence( "Employee_seq" );
Map(e => e.FirstName);
Map(e => e.LastName);
References(e => e.Store);
}
* This source code was highlighted with Source Code Highlighter .
рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐,
Table()
, рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдирдХреНрд╢реЗ рдХреЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдиреАрдЪреЗ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдирд╛рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
Id()
рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ (NHibernate:
<id>
)ред рдпрджрд┐ рд╣рдордиреЗ рдСрдЯреЛ-рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ NHibernate рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рдЪрд╛рди рдХрд░реЗрдЧрд╛ рдФрд░ рдПрдХ рдкрд╣рдЪрд╛рди рдЬрдирд░реЗрдЯрд░ (NHibernate:
<generator>
) рдЕрд╕рд╛рдЗрди рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ рдУрд░реЗрдХрд▓ рдореЗрдВ рдХреЛрдИ рдСрдЯреЛ-рдЗрдиреНрдХреНрд░реАрдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдПрдХ рд╕реАрдХреНрд╡реЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдмрд╛рдж рдореЗрдВ рддрд░реАрдХреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрдЧрд▓реА рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╕реНрдХреЗрд▓рд░ рдЧреБрдг (NHibernate:
<property>
) рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рджрд░реНрд╢рд╛рддреА
<property>
, рдЬрд╣рд╛рдБ рдкреНрд░рдХрд╛рд░ рдФрд░ рдирд╛рдо рд╕реНрд╡рддрдГ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЙрд▓рдо рдирд╛рдо рдХреЛ
Column()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рд╕рдордЭреМрддреЛрдВ рдкрд░ рдЕрдзрд┐рдХ ред
рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдПрдХрд╡рдЪрди рдореЗрдВ
Store
рд╡рд░реНрдЧ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдХрдИ рдкрдХреНрд╖реЛрдВ рдХреЛ рдХрдИ-рд╕реЗ-рдПрдХ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЗ рдмрд╛рдж рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдирд╛рдо, Store_id рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
Column()
рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдХреЙрд▓рдо рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
References()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ "рдХрдИ" рдкрдХреНрд╖ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░рд┐рд╢реНрддреЗ рдХреЗ рджреВрд╕рд░реА рддрд░рдл ("рдПрдХ"),
HasMany()
(NHibernate:
<bag>
) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдХреБрдВрдЬреА рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐
KeyColumn()
ред
рдЖрдЗрдП
Table()
рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ
Table()
рд╡рд┐рдзрд┐ред рдпрд╣рд╛рдБ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ NHibernate рдЙрдиреНрд╣реЗрдВ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ (рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдордЭреМрддреЗ) рдХреЗ рд╕рд╛рде рдШреЗрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╣рдорд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЕрдм "рдХрд░реНрдордЪрд╛рд░реА" рдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЗ рд╕рд╛рдеред рдУрд░реЗрдХрд▓ рдореЗрдВ, рдХреЗрд╡рд▓ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рд╕реЗ рдШрд┐рд░реЗ рдирд╛рдо рдХреЗрд╕ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдирд╛рдо рдорд╛рдорд▓реЗ рдХреЛ рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдФрд░ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ред
рдЪрд▓реЛ рд╕реНрдЯреЛрд░ рдХреА рдореИрдкрд┐рдВрдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ:
public class StoreMap : ClassMap<Store>
{
public StoreMap()
{
Table( "Store" );
Id(x => x.Id)
.GeneratedBy.Sequence( "Store_seq" );
Map(x => x.Name);
HasMany(x => x.Staff)
.Inverse()
.Cascade.All();
HasManyToMany(x => x.Products)
.Cascade.All()
.Table( "StoreProduct" );
}
}
* This source code was highlighted with Source Code Highlighter .
рд╣рдо рдпрд╣рд╛рдВ рдПрдХ рд╕рдордорд┐рдд
HasMany()
Employee
рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рд╣рдордиреЗ рдКрдкрд░ рдЬрд╛рдВрдЪ рдХреА рдереАред
HasManyToMany()
рдкрджреНрдзрддрд┐ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯреЛрд░ рдФрд░ рдЙрддреНрдкрд╛рдж рдХреЗ рдмреАрдЪ рдХреЗ рдХрдИ-рдХрдИ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо
Table()
рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
Inverse()
рд╡рд┐рдзрд┐ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рд╕реНрд╡рд╛рдореА рд╕рдВрдмрдВрдз рдХрд╛ рджреВрд╕рд░рд╛ рдЫреЛрд░ рд╣реИ, рдЕрд░реНрдерд╛рдд,
Employee
рд╡рд░реНрдЧ, рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
Cascade.All()
рд╕рдВрдмрдВрдзрд┐рдд рдорджреЛрдВ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдЯреЛрд░ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕реНрдЯреЛрд░ рдХреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдФрд░ рд╕рднреА рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдВрдЪрд╛рд░ рднреА рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП NHibernate рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВред
рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдЙрддреНрдкрд╛рдж рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ:
public class ProductMap : ClassMap<Product>
{
public ProductMap()
{
Table( "Product" );
Id(x => x.Id)
.GeneratedBy.Sequence( "Product_seq" );
Map(x => x.Name);
Map(x => x.Price);
HasManyToMany(x => x.StoresStockedIn)
.Cascade.All()
.Inverse()
.Table( "StoreProduct" );
}
}
* This source code was highlighted with Source Code Highlighter .
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдореИрдкрд┐рдВрдЧ рдХреЗ рдЕрдиреБрднрд╡ рд╕реЗ рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред
рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдореИрдкрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ ред
рдЕрдм рдпрд╣ рдУрд░реЗрдХрд▓ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рдУрд░реЗрдХрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
рд╣рдо рдХрдиреЗрдХреНрд╢рдирд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ, App.config, рдФрд░ рд╡рд╣рд╛рдВ рдореМрдЬреВрдж nberbern рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рджрд░реНрдЬ рдХрд░реЗрдВ:
Copy Source | Copy HTML
- <? xml рд╕рдВрд╕реНрдХрд░рдг = "1.0" рдПрдиреНрдХреЛрдбрд┐рдВрдЧ = "utf-8" ? >
- < рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди >
- < рдХрдиреЗрдХреНрд╢рдирд╕реНрдЯреНрд░реАрдо >
- < name = "Oracle" рдЬреЛрдбрд╝реЗрдВ
- connectionString = "рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд = orcl; PASSWORD = nhibernate; рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдирдХрд╛рд░реА = рд╕рддреНрдп; USER ID = рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣"
- рдкреНрд░рджрд╛рддрд╛ рдирд╛рдо = "Oracle.DataAccess.Client" />
- </ рдХрдиреЗрдХреНрд╢рдирд╕реНрдЯреНрд░реАрдо >
- </ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди >
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ
Oracle.DataAccess
рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдкрдХреЗ рдЪреБрдиреЗ рд╣реБрдП рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ:

рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╡рд╛рдж рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдЧрд╛ - рдореИрдВ
рдЙрддреНрдкрд╛рджрдХрддрд╛ рдкрд╛рд╡рд░ рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд┐рдВрдХ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗрдЯ рдХрд░реЗрдВ
Copy Local = True
, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рдЗрдирд░реА рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ NHibernate рдореЗрдВ рдПрдХ рд╕рддреНрд░ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреЗ рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
using FluentExample.Entities;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Driver;
namespace FluentExample
{
public static class FluentNHibernateHelper
{
private static ISessionFactory _sessionFactory;
public static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null )
{
var dbConfig = OracleDataClientConfiguration.Oracle10
.ConnectionString(c => c.FromConnectionStringWithKey( "Oracle" ))
.Driver<OracleDataClientDriver>()
.ShowSql();
_sessionFactory = Fluently.Configure()
.Database(dbConfig)
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Employee>())
.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
}
* This source code was highlighted with Source Code Highlighter .
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рд╣рдо
OracleDataClientConfiguration
рдирд╛рдо рд╕реНрдерд╛рди рд╕реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд░реНрдЧ
OracleDataClientConfiguration
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ NHibernate рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рднреА рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ ред
рдЕрдЧрд▓рд╛, рд╣рдо NHibernate рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдореИрдкрд┐рдВрдЧ рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рддреНрд░ рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред
рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ ред
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдПрдХ рд╕рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
class Program
{
static void Main()
{
using (FluentNHibernateHelper.OpenSession())
{
}
}
}
* This source code was highlighted with Source Code Highlighter .
рд╣рдорд╛рд░реЗ рдЖрдзрд╛рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг
рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдм рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:

рдЕрд╕рд▓реА рдкрд░реАрдХреНрд╖рд╛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ:
private static void Main()
{
using ( var session = FluentNHibernateHelper.OpenSession())
{
using ( var transaction = session.BeginTransaction())
{
var barginBasin = new Store { Name = "Bargin Basin" };
var superMart = new Store { Name = "SuperMart" };
var potatoes = new Product { Name = "Potatoes" , Price = 3.60 };
var fish = new Product { Name = "Fish" , Price = 4.49 };
var milk = new Product { Name = "Milk" , Price = 0.79 };
var bread = new Product { Name = "Bread" , Price = 1.29 };
var cheese = new Product { Name = "Cheese" , Price = 2.10 };
var waffles = new Product { Name = "Waffles" , Price = 2.41 };
var daisy = new Employee { FirstName = "Daisy" , LastName = "Harrison" };
var jack = new Employee { FirstName = "Jack" , LastName = "Torrance" };
var sue = new Employee { FirstName = "Sue" , LastName = "Walkters" };
var bill = new Employee { FirstName = "Bill" , LastName = "Taft" };
var joan = new Employee { FirstName = "Joan" , LastName = "Pope" };
// . ,
// many-to-many.
AddProductsToStore(barginBasin, potatoes, fish, milk, bread, cheese);
AddProductsToStore(superMart, bread, cheese, waffles);
//
AddEmployeesToStore(barginBasin, daisy, jack, sue);
AddEmployeesToStore(superMart, bill, joan);
//
session.SaveOrUpdate(barginBasin);
session.SaveOrUpdate(superMart);
transaction.Commit();
}
//
using (session.BeginTransaction())
{
var stores = session.CreateCriteria( typeof (Store)). List <Store>();
foreach ( var store in stores)
WriteStorePretty(store);
}
Console .ReadKey();
}
}
public static void AddProductsToStore(Store store, params Product[] products)
{
foreach ( var product in products)
store.AddProduct(product);
}
public static void AddEmployeesToStore(Store store, params Employee[] employees)
{
foreach ( var employee in employees)
store.AddEmployee(employee);
}
private static void WriteStorePretty(Store store)
{
Console .WriteLine(store.Name);
Console .WriteLine( " Products:" );
foreach ( var product in store.Products)
Console .WriteLine( " " + product.Name);
Console .WriteLine( " Staff:" );
foreach ( var employee in store.Staff)
Console .WriteLine( " " + employee.FirstName + " " + employee.LastName);
Console .WriteLine();
}
* This source code was highlighted with Source Code Highlighter .
рд╡рд╣ рд╕рдм рд╣реИред
рдореИрдВ рдУрд░реЗрдХрд▓ рдореЗрдВ рдПрдХ рд╕рд░реНрдХрд┐рдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреА рджреЗрддрд╛ рд╣реВрдВред
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
рд▓реЗрдЦрдХ рдореВрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдПрдХ рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, NHibernate рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
<sql-insert>
ред
рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ NHibernate рдЖрдкрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореИрдкрд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд╕ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЛ рдмрдирд╛рдП рдЧрдП рдореИрдкрд┐рдВрдЧ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдФрд░ рдЙрд╕реА рд╢реИрд▓реА рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред