. ..
.
.
______________ ..
() . -32
____________ . ..
()
. 2012.
充....3
腅..5
ⅅ..6
ą....12
.13
....14
XML......16
充..17
...18
充..19
....19
SQL .21
.....23
. . , . , , .
. , .
, , . . NHibernate.
NHibernate ORM- Microsoft.NET, :
1) -, (POCO). POCO = Plain old CLR objects, , , .
2) XML- . - , (, ) .
.
C Ļ . ORM (Object-Relational Mapping) Fluent NHIbernate .
|
|
, .
:
1. , ;
2. ; , ; , .
3. .
4. .
5. , , .
6. XML.
MySQL. , .
MySQL (). MySQL Oracle Corporation, Sun Microsystems, . GNU General Public License , .
# Microsoft Visual Studio 2010. ORM (Object-Relational Mapping). , # . .., , MySQL ORM , , , .
5 ,
, , 5 .
ORM Fluent NHibernate - NHibernate. Fluent NHibernate XML- NHibernate. XML (.hbm.xml), Fluent NHibernate , C#. , , . , XML . , , .. ..
Fluent NHibernate, NHibernate.dll, FluentNHibernate.Mapping, FluentNHibernate.Cfg, FluentNHibernate.Cfg.Db.
.
Fluent NHibernate, :
var config = Fluently.Configure()
.Database(MySQLConfiguration.Standard
.ConnectionString(x => x.Database(DataBase)
.Server(Host)
.Username(User)
.Password(Password)))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<DepartMap>())
|
|
.BuildConfiguration();
MySession = config.BuildSessionFactory();
. _Map.cs
Departament
:
public class Departament
{
public virtual int Id { get; protected set; }
public virtual string Name { get; set; }
public virtual IList<Personnel> Personnels { get; set; }
public Departament ()
{
Personnels = new List<Personnel>();
}
public virtual void AddPersonnel(Personnel personel)
{
personel.Departament = this;
Personnels.Add(personel);
}
}
:
public class DepartMap: ClassMap<Departament>
{
public DepartMap()
{
Id(x => x.Id).Not.Nullable();
Map(x => x.Name).Not.Nullable();
HasMany(x => x.Personnels)
.Inverse()
.KeyColumn("Departament_id")
.Cascade.SaveUpdate();
}
}
Diagnosis
:
public class Diagnosis
{
public virtual int Id { get; set; }//idDiagnosis
public virtual string Name { get; set; }
public virtual Departament Departament { get; set; }
public virtual Personnel Personnel { get; set; }
public virtual String Description { get; set; }
public virtual IList<Medication> Medications { get; set; }
public Diagnosis ()
{
Medications = new List<Medication>();
Description = "";
}
//
public virtual void AddMediacation (Medication med)
{
med.Diagnosis.Add(this);
Medications.Add(med);
}
}
:
public class DiagnosisMap: ClassMap<Diagnosis>
{
public DiagnosisMap()
{
Table("diagnosis");
Id(x => x.Id).Column("idDiagnosis").Not.Nullable();
Map(x => x.Name).Not.Nullable();
Map(x => x.Description);
HasManyToMany(x => x.Medications)
.Table("diagnosis_has_medications")
.ParentKeyColumn("idDiagnosis")
.ChildKeyColumn("idMedications");
References(x => x.Departament)
.Column("Departament_id")
.Cascade.SaveUpdate();
References(x => x.Personnel)
.Column("Personnel_id")
.Cascade.SaveUpdate();
}
}
Medication
:
public class Medication
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int Numb_per_day { get; set; }
public virtual int Duration { get; set; }
public virtual decimal Price { get; set; }
public virtual string Description { get; set; }
public virtual IList<Diagnosis> Diagnosis { get; set; }
public Medication()
{
Diagnosis = new List<Diagnosis>();
Description = "";
}
//
public virtual void AddDiagnosis (Diagnosis diagnosis)
{
Diagnosis.Add(diagnosis);
diagnosis.Medications.Add(this);
}
}
:
public class MedicationMap: ClassMap<Medication>
{
public MedicationMap()
{
Table("medications");
Id(x => x.Id).Column("idMedications").Not.Nullable();
Map(x => x.Name).Not.Nullable();
Map(x => x.Numb_per_day);
Map(x => x.Duration);
Map(x => x.Price);
Map(x => x.Description);
HasManyToMany(x => x.Diagnosis)
.Table("diagnosis_has_medications")
.ParentKeyColumn("idMedications")
.ChildKeyColumn("idDiagnosis")
.Inverse();
}
}
Pacient
:
public class Pacient
{
public virtual int Id { get; set; }
public virtual string Name{ get; set; }
public virtual string Address{ get; set; }
public virtual DateTime Birthday { get; set; }
public virtual DateTime Data_arrival { get; set; }
public virtual DateTime Data_depart { get; set; }
public virtual Departament Departament { get; set; }
|
|
public virtual Diagnosis Diagnosis { get; set;}
public override bool Equals(object obj)
{
if (obj is Pacient)
{
Pacient p = (obj as Pacient);
bool b = true;
if (Name!= p.Name) b = false;
if (Address!= p.Address) b = false;
if (Birthday!= p.Birthday) b = false;
if (Data_arrival!= p.Data_arrival) b = false;
if (Data_depart!= p.Data_depart) b = false;
if (Diagnosis.Departament!= p.Diagnosis.Departament) b = false;
if (Diagnosis.Name!= p.Diagnosis.Name) b = false;
if (Diagnosis.Personnel!= p.Diagnosis.Personnel) b = false;
if (Diagnosis.Description!= p.Diagnosis.Description) b = false;
if (Departament!= p.Departament) b = false;
return b;
}
else return false;
}
}
:
public class PatientMap: ClassMap<Pacient>
{
public PatientMap()
{
Table("pacienty");
Id(x => x.Id).Not.Nullable();
Map(x => x.Name).Not.Nullable();
Map(x => x.Address);
Map(x => x.Birthday);
Map(x => x.Data_arrival);
Map(x => x.Data_depart);
References(x => x.Departament, "Departament_id");
References(x => x.Diagnosis, "Diagnosis_id");
}
}
Personnel
:
public class Personnel
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Address { get; set; }
public virtual DateTime Birthday { get; set; }
public virtual string Phone { get; set; }
public virtual string Post { get; set; }
public virtual decimal Salary{ get; set; }
public virtual Departament Departament{ get; set; }
public override bool Equals(object obj)
{
if (obj is Personnel)
{
Personnel p = (obj as Personnel);
bool b = true;
if (Name!= p.Name) b = false;
if (Address!= p.Address) b = false;
if (Birthday!= p.Birthday) b = false;
if (Phone!= p.Phone) b = false;
if (Post!= p.Post) b = false;
if (Salary!= p.Salary) b = false;
if (Departament!= p.Departament) b = false;
return b;
}
else return false;
}
}
:
public class PersonnelMap: ClassMap<Personnel>
{
public PersonnelMap()
{
Table("personnel");
Id(x => x.Id).Column("idPersonnel");
Map(x => x.Name);
Map(x => x.Address);
Map(x => x.Birthday);
Map(x => x.Phone);
Map(x => x.Post);
Map(x => x.Salary);
References(x => x.Departament)
.Column("Departament_id")
.Cascade.SaveUpdate();
}
}
-
, :
1. : , , , , , , .
2. : , , , , , , .
3. : , , , .
4. : .
5. : , , , , .
:
Personnel:
Name:
Address:
Birthday:
Phone:
Post:
Salary: decimal
Id_depart:
Pacienty:
Id_depart:
Id_diagnos:
Name:
Address:
Birthday:
Data_arrival:
Data_depart:
|
|
Diagnosis:
Id_depart:
Id_doctor:
Name:
Medications:
Name:
Numb_per_day:
Duration:
Price: decimal
Departament:
Id:
Name:
: , , , (. )
Departament.
public void Fill()
{
using (var session = parent.MySession.OpenSession())
{
try
{
DepartTable.Rows.Clear();
var deps = session.CreateCriteria(typeof (Departament)).List<Departament>();
foreach (var d in deps)
DepartTable.Rows.Add(d.Name);
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, " ");
}
finally
{
session.Close();
}
}
}
Fill DepartTable Departament, .
:
void Insert(string sName)
{
using (var session = parent.MySession.OpenSession())
using (var transaction = session.BeginTransaction())
{
try
{
session.Save(new Departament {Name = sName});
transaction.Commit();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, " ");
transaction.Rollback();
}
finally
{
session.Close();
}
}
}
Insert Departament. .
:
void Update(string sName)
{
using (var session = parent.MySession.OpenSession())
using (var transaction = session.BeginTransaction())
{
try
{
var newdep = GetDepByName(session, DepartTable.CurrentRow.Cells[0].Value.ToString());
newdep.Name = sName;
session.Update(newdep);
transaction.Commit();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, " ");
transaction.Rollback();
}
}
}
Update DepartTable. .
:
public void Delete()
{
using (var session = parent.MySession.OpenSession())
using (var transaction = session.BeginTransaction())
{
try
{
var olddep = GetDepByName(session, DepartTable.CurrentRow.Cells[0].Value.ToString());
session.Delete(olddep);
transaction.Commit();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, " ");
transaction.Rollback();
}
Delete DepartTable Departament.