c# Seznam forumov c#
c#
 
 Pogosta vprašanjaPogosta vprašanja   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   RSS Feed   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Zasebna sporočilaZasebna sporočila   PrijavaPrijava 




Vaja 14 – ORM = vaja 12 + uporabniki vozila (users)

 
Objavi novo temo   Odgovori na to temo    c# Seznam forumov -> iseesharp
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
seesharp
Administrator foruma


Pridružen/-a: 27.06. 2017, 18:40
Prispevkov: 43

PrispevekObjavljeno: 28 Jun 2017 12:47    Naslov sporočila: Vaja 14 – ORM = vaja 12 + uporabniki vozila (users) Odgovori s citatom

Vaja 14 – ORM = vaja 12 + uporabniki vozila (users)
Nalogo iz vaje 12 dopolnite z dodatno entiteto Users, ki se v podatkovni bazi interpretira kot
tabela Lastnik, in vsebuje naslednje 3 stolpce: Id (primarni ključ), Ime (string), Vozila (list).
Relacija tabele Lastnik na tabelo Vozila je OneToMany. Entiteta Cars se še dopolni s
stolpcem FK_User_Id (ključ na tabelo Lastnik). Ustrezno je potrebno dopolniti osnovne
operacije s podatkovno bazo MYSQL
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
seesharp
Administrator foruma


Pridružen/-a: 27.06. 2017, 18:40
Prispevkov: 43

PrispevekObjavljeno: 28 Jun 2017 12:47    Naslov sporočila: Odgovori s citatom

dodamo dateoteke:
log4net.dll
MySql.Data.dll
NHibernate.Mapping.Attribute.dll
NHibebernate.dll
lesi.Collection.dll
nhibernate-configuration.xsd
nhibernate-mapping.xsd

v datoteko
App.Config
dodamo:


<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MySQLDialect</property>
<property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
<property name="use_proxy_validator">true</property>
<property name="connection.connection_string">Server=localhost;Database=test;User ID=root;Password=;Port=3306</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>

<log4net>
<appender name="DebugSQL" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="HibernateLogFile" type="log4net.Appender.RollingFileAppender">
<file value="hibernate_log.txt"/>
<appendToFile value="false"/>
<encoding value="utf-8"/>
<rollingStyle value="Date"/>
<datePattern value="yyyyMMdd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline"/>
</layout>
</appender>

<appender name="HibernateSQLLogFile" type="log4net.Appender.RollingFileAppender">
<file value="hibernateSQL_log.txt"/>
<appendToFile value="false"/>
<encoding value="utf-8"/>
<rollingStyle value="Date"/>
<datePattern value="yyyyMMdd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline"/>
</layout>
</appender>

<!--
<root>
<level value="DEBUG" />
<appender-ref ref="DebugSQL" />
</root>
-->

<logger name="NHibernate">
<level value="DEBUG" />
<appender-ref ref="HibernateLogFile" />
</logger>

<logger name="NHibernate.SQL">
<level value="DEBUG" />
<appender-ref ref="HibernateSQLLogFile" />
</logger>

</log4net>
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
seesharp
Administrator foruma


Pridružen/-a: 27.06. 2017, 18:40
Prispevkov: 43

PrispevekObjavljeno: 28 Jun 2017 12:49    Naslov sporočila: Odgovori s citatom

Entitete:

Cars.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate.Mapping.Attributes;


namespace vaja12.Entity
{
[Serializable] //[...] = anotacije
[Class(Schema = "test", Table = "Vozilo", NameType = typeof(Car))]

public class Car
{
[Id(Name = "Id", Column = "ID", Type = "int"), Generator(1, Class = "native")]
public virtual int Id { get; set; } //lazy loading


[Property(Column = "Brand", Type = "string", NotNull = true, Length = 128, Unique = true)]
//[Property(Column = "Brand", Type = "string", NotNull = true, Length = 128)]
public virtual string Znamka { get; set; }

[Property(Column = "Model", Type = "string", NotNull = true, Length = 512)]
public virtual string Model { get; set; }

[Property(Column = "Year", Type = "int")]
public virtual int Letnik { get; set; }
//dodamo FK od users
//ne damo cascade - loop?
[ManyToOne(ClassType =typeof(Users), Column ="FK_User_Id", NotNull =true)]
public virtual Users Owner { get; set; }

}
}



Users.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate.Mapping.Attributes;

namespace vaja12.Entity
{
[Serializable]
[Class(Schema = "test", Table = "Lastnik", NameType = typeof(Users))]
public class Users
{
[Id(Name = "Id", Column = "ID", Type = "int"), Generator(1, Class = "native")]
public virtual int Id { get; set; } //lazy loading

[Property(Column = "Ime", Type = "string", NotNull = true, Length = 128)]
public virtual string Name { get; set; }


//cascade na parent - avtomatsko updejta chield entitete
[Bag(Table = "Vozilo", Cascade = "all-delete-orphan", Inverse =true)]
[Key(1,Column = "FK_User_Id")]
[OneToMany(2, ClassType =typeof(Car))]
public virtual IList<Car> Vehicles { get; set; }

}
}
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
seesharp
Administrator foruma


Pridružen/-a: 27.06. 2017, 18:40
Prispevkov: 43

PrispevekObjavljeno: 28 Jun 2017 12:49    Naslov sporočila: Odgovori s citatom

Form1.cs


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using NHibernate.Cfg;
using NHibernate.Mapping.Attributes;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
using vaja12.Entity;

namespace vaja12
{
public partial class Form1 : Form
{
private ISessionFactory m_SessionFactory = null;
private ISession m_Session = null;
public Form1()
{
InitializeComponent();
ConfigureLog4Net();
ConfigureNHibernate(false);
}
private void ConfigureLog4Net()
{
log4net.Config.XmlConfigurator.Configure();
}

private void ConfigureNHibernate(bool bDrop)
{
Configuration config = new Configuration();
config.Configure();
HbmSerializer.Default.Validate = true;
config.AddInputStream(HbmSerializer.Default.Serialize(System.Reflection.Assembly.GetExecutingAssembly()));//konfigurira entitete
//config.AddAssembly(typeof(Car).Assembly); //ne rabimo - zakaj??

new SchemaExport(config).Execute(true, true, bDrop);
m_SessionFactory = config.BuildSessionFactory();
m_Session = m_SessionFactory.OpenSession();
}

private void ResetSession()
{
m_Session.Close();
m_Session.Dispose();
m_Session = m_SessionFactory.OpenSession();
}


private void Form1_Load(object sender, EventArgs e)
{

}

private void btInitDB_Click(object sender, EventArgs e)
{
ConfigureNHibernate(false);
}

private void btDelDB_Click(object sender, EventArgs e)
{
ConfigureNHibernate(true);
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
m_Session.Close();
m_Session.Dispose();
m_SessionFactory.Close();
m_SessionFactory.Dispose();
}

//Insert:
private void btVnos_Click(object sender, EventArgs e)
{

using (ISession m_Session = m_SessionFactory.OpenSession())
{
using (ITransaction tx = m_Session.BeginTransaction())
{
try
{
Car carInst = new Car();
carInst.Znamka = tbZnamka.Text;
carInst.Model = tbModel.Text;
carInst.Letnik = Int32.Parse(tbLetnik.Text);

Users usr = null;
IList<Users> _users = m_Session.CreateCriteria(typeof(Users)).List<Users>();
if (_users != null && _users.Count > 0)
{
IList<Users> lu = _users.Where(i => i.Name == tbLastnik.Text).ToList();
if (lu !=null && lu.Count >0)
{
usr = lu[0];
}
}
if (usr == null)
{
usr = new Users();
usr.Name = tbLastnik.Text;
}
if (usr.Vehicles == null)
usr.Vehicles = new List<Car>();

usr.Vehicles.Add(carInst);
carInst.Owner = usr; //ce imamo notnull FK inverse mora biti true

m_Session.Save(usr);
tx.Commit();
tbOutput.Text = "Insert succeded";
}
catch (Exception ex)
{
tbOutput.Text = ex.Message;
}
}
}
}


//Select:
private void btIsci_Click(object sender, EventArgs e)
{
using (ISession m_Session = m_SessionFactory.OpenSession())
{
using (ITransaction tx = m_Session.BeginTransaction())
{
try
{
IQuery query = m_Session.CreateQuery("from Car d where d.Znamka = ?"); //hybernate query language
Car car = query.SetString(0, tbZnamka.Text).UniqueResult<Car>();

tx.Commit();
tbOutput.Text = "Found: " + System.Environment.NewLine + "Brand: " + car.Znamka
+ System.Environment.NewLine + "Model: " + car.Model
+ System.Environment.NewLine + "Year: " + car.Letnik
+ System.Environment.NewLine + "Lastnik: " + car.Owner.Name;
}

catch (Exception ex)
{
tbOutput.Text = ex.Message;
ResetSession();
}
}
}
}

//Update:
private void btOsvezi_Click(object sender, EventArgs e)
{
using (ISession m_Session = m_SessionFactory.OpenSession())
{
Users usr = null;
using (ITransaction tx = m_Session.BeginTransaction())
{
try
{
IQuery query = m_Session.CreateQuery("from Car d where d.Znamka = ?"); //hybernate query language
Car car = query.SetString(0, tbZnamka.Text).UniqueResult<Car>();
car.Model = tbModel.Text;
car.Letnik = Int32.Parse(tbLetnik.Text);
//trenutni user/tbLastnik:
usr = car.Owner;
//preverimo, če želimo spremeniti lastnika:
if (car.Owner.Name != tbLastnik.Name)
{
Users u = null;
IList<Users> _users = m_Session.CreateCriteria(typeof(Users)).List<Users>();
if (_users != null && _users.Count > 0)
{
IList<Users> lu = _users.Where(i => i.Name == tbLastnik.Text).ToList();
if (lu != null && lu.Count > 0)
u = lu[0];
}
if (u == null)
{
u = new Users();
u.Name = tbLastnik.Text;
}
if (u.Vehicles == null)
u.Vehicles = new List<Car>();
u.Vehicles.Add(car);
car.Owner = u;
m_Session.Save(u); //casscade nastavitev poskrbi da se updejtajo tudi chield entitete

}
else
m_Session.Update(car);
m_Session.Flush();
if (usr.Vehicles.Count == 0)
m_Session.Delete(usr);
tx.Commit();

tbOutput.Text = "Updated: " + System.Environment.NewLine + "Brand: " + car.Znamka
+ System.Environment.NewLine + "Model: " + car.Model
+ System.Environment.NewLine + "Year: " + car.Letnik
+ System.Environment.NewLine + "Lastnik: " + car.Owner.Name;

}
catch (Exception ex)
{
tbOutput.Text = ex.Message;
ResetSession();
}
}
}
}


//Delete (dopolni):
private void btBrisi_Click(object sender, EventArgs e)
{
using (ISession m_Session = m_SessionFactory.OpenSession())
{
using (ITransaction tx = m_Session.BeginTransaction())
{
try
{
IQuery query = m_Session.CreateQuery("from Car d where d.Znamka = ?"); //hybernate query language
Car car = query.SetString(0, tbZnamka.Text).UniqueResult<Car>();
Users usr = car.Owner;
usr.Vehicles.Remove(car);
if (usr.Vehicles.Count == 0)
m_Session.Delete(usr);
else
m_Session.Delete(car);

tx.Commit();

tbOutput.Text = "Deleted: " + System.Environment.NewLine + "Brand: " + car.Znamka
+ System.Environment.NewLine + "Model: " + car.Model
+ System.Environment.NewLine + "Year: " + car.Letnik
+ System.Environment.NewLine + "Lastnik: " + car.Owner.Name;

}
catch (Exception ex)
{
tbOutput.Text = ex.Message;
ResetSession();
}
}
}
}
}
}
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    c# Seznam forumov -> iseesharp Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu


MojForum.si - brezplačno gostovanje forumov. Powered by phpBB 2.