Kurzusok
/
C#
C#
/
Feladatok
/
Objektum-relációs leképezés
Objektum-relációs leképezés

Objektum-relációs leképezés

Tanulófeladat

Bevezetés

Erőforrások felszabadítása

Ha egy osztály megvalósítja az IDisposable interfészt, akkor a Dispose() metódusát minden alkalommal meg kell hívni, amikor egy példányra már nincs szükség. Ezt jellemzően egy catch vagy finally ágából, illetve valamely hívó Dispose() rutinjából szokás megtenni. A Dispose() lehetőséget ad arra, hogy a nem felügyelt erőforrások, például az operációs rendszer objektumai (amelyeket nem a .NET futtatókörnyezet kezel) felszabaduljanak, és a felügyelt erőforrások belső állapota visszaálljon.

Utasítások

Egy másik csapat által biztosított adatbázis fölé valósítasz meg egy ORM (objektum-relációs leképezés) rendszert.

Az adatbázis egyszerre egyetlen tranzakció kezelésére képes.

Ebben a szakaszban nincs szükség naplózásra vagy egyéb hibakezelésre.

Vedd figyelembe, hogy az adatbázis belső állapota több állapoton is keresztülmegy: Closed, TransactionStarted, DataWritten, Invalid, Closed. Számíthatsz arra, hogy minden feladat elején az adatbázis Closed állapotban van.

Az adatbázisnak a következő példánymetódusai vannak:

  • A Database.BeginTransaction() tranzakciót indít az adatbázison. Ha akkor hívod meg, amikor az adatbázis nincs Closed állapotban, akkor kivétel dobódik. Ha sikeres, az adatbázis belső állapota TransactionStarted lesz.
  • A Database.Write(string data) adatot ír az adatbázisba a tranzakción belül. Ha hibás adatot kap, kivétel dobódik. Ha úgy próbálod meghívni ezt a metódust, hogy előtte nem hívtad meg a BeginTransaction()-t, akkor kivétel dobódik. Ha sikeres, az adatbázis belső állapota DataWritten lesz.
  • A Database.EndTransaction() véglegesíti a tranzakciót az adatbázisban. Kivételt dobhat, ha nem tudja lezárni a tranzakciót, vagy ha a Database.BeginTransaction()-t nem hívták meg.
  • A Database.Dispose() meghívása rendbe hozza az adatbázist, ha a tranzakció során kivétel dobódik. Ettől az adatbázis állapota Closed lesz.

Az adatbázis állapota a database.DbState segítségével érhető el.

Az adatbázis állapota a következők egyikére állítható be:

  • TransactionStarted
  • DataWritten
  • Invalid
  • Closed

1. Tranzakció indítása

Valósítsd meg az Orm.Begin() metódust, amely tranzakciót indít az adatbázison. Ha az adatbázis belső állapota nem State.Closed, akkor InvalidOperationException kivételt dob.

var orm = new Orm(new Database());
orm.Begin();
// => database has an internal state of State.TransactionStarted

2. Adatok írása az adatbázisba

Valósítsd meg az Orm.Write() metódust, amely adatot ír az adatbázisba. Ha az adatbázis belső állapota nem State.TransactionStarted, vagy hibás adatot írnak, akkor InvalidOperationException kivétel dobódik. Ha az írás meghiúsul, az Orm-nak rendbe kell hoznia az adatbázist.

var orm = new Orm(new Database());
orm.Begin();
orm.Write("some data");
// => database has an internal state of State.DataWritten
orm.Write("bad write");
// => database has an internal state of State.Closed

3. A korábban írt adatok véglegesítése

Valósítsd meg az Orm.Commit() metódust az adatok véglegesítéséhez. Ha a véglegesítés meghiúsul, hozd rendbe az adatbázist. Ha az adatbázis belső állapota nem State.DataWritten, akkor InvalidOperationException kivétel dobódik.

var orm = new Orm(new Database());
orm.Begin();
orm.Write("some data");
orm.Commit();
// => database has an internal state of State.Closed
orm.Begin();
orm.Write("bad commit");
orm.Commit();
// => database has an internal state of State.Closed

4. Gondoskodj róla, hogy az adatbázis megfelelően rendbe jöjjön, ha az ORM-nek a tranzakció közben kell lezárulnia

Valósítsd meg az IDisposable felületet az Orm osztályon. A hívás biztosan sikeres lesz.

var db = new Database();
var orm = new Orm(db);
orm.Begin();
orm.Write("some data");
orm.Dispose();
// => database has an internal state of State.Closed
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
C# Exercism

Készen állsz elkezdeni a(z) Objektum-relációs leképezés feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C# nyelvet 62 fogalom178 feladat segítségével, valódi emberi mentorálással, mindez ingyen.