2016-12-16 2 views
0

Ich versuche, ein einfaches Konsolenprogramm zu realisieren, das einige Daten erstellt und speichert es in einer Datenbank. Das Problem ist, dass das Programm nur funktioniert, wenn ich die Datensätze über Code einfüge. Wenn ich versuche, einige Datensätze aus einer Tabelle zu lesen, die ich mit SqlServer Management Studio erstellt habe, funktioniert es nicht und es werden 0 Datensätze gelesen. Außerdem scheint der Versuch, diese Werte zu lesen, irgendwie die Daten auf dem Tisch zu löschen. Wenn ich SqlServer nach der Ausführung überprüfe, sind die zuvor eingefügten Datensätze verschwunden. Dies ist der Teil, wenn ich das Lesen durchführen:Fluent Nhibernate: Keine Datensätze aus der Datenbank gelesen, die über SqlServer Management Studio eingefügt wurden

using(var session = NHibernateHelper.OpenSession()) 
{ 
    using(var transaction = session.BeginTransaction()) 
    { 
     var DepartmentObject = InsertDepartment("IT", "962788700227"); 
     var firstEmployee = InsertEmployee("Jacopo", "disoccupated", DepartmentObject); 
     var secondEmployee = InsertEmployee("Andrea", "programmatore", DepartmentObject); 
     var thirdEmployee = InsertEmployee("Davide", "fashion-blogger", DepartmentObject); 
     session.Save(DepartmentObject); 
     session.Save(firstEmployee); 
     session.Save(secondEmployee); 
     session.Save(thirdEmployee); 
     transaction.Commit(); 
     var elencoEmployee = session.Query<Employee>().ToList(); // this reading is working because I create the table and insert values via code 
     var elencoTabTest = session.Query<TabTest>().ToList(); // this reading return a list of 0 elements but on the db there is a table named TabTest with 2 records 
    } 
} 

Die InsertEmployee und InsertDepartment Funktionen nur eine Employee/Department Objekt Einstellung seiner Eigenschaften erstellen.

Dies ist die Klasse TabTest, die die Tabelle zuordnen sollte, die ich lesen will:

class TabTest 
{ 
    public virtual int Id { get; set; } 
    public virtual string Descrizione { get; set; } 
} 

class TabTestMap : ClassMap<TabTest> 
{ 
    public TabTestMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Descrizione); 
     Table("TabTest"); 
    } 
} 

Wenn jemand ein paar Ideen hat bitte teilen.

Antwort

0

Nein, NHibernate löscht Ihre Datensätze nicht, wenn Sie nur nach ihnen suchen. Ich kann mir mindestens drei mögliche Erklärungen vorstellen:

Sie zeigen nicht den vollständigen Code, also haben Sie irgendwo Code, der die Zeilen löscht oder die Tabelle abschneidet oder die Tabelle löscht und neu erstellt.

Alternativ verwenden Sie eine Transaktion, wenn Sie die Zeilen erstellen und die Transaktion vor dem Schließen nicht abschließen.

Eine andere Möglichkeit ist, dass das Programm aufgrund von Konfigurations- oder Mapping-Fehlern einfach von einer anderen Tabelle oder einer anderen Datenbank liest.

+0

Ich bearbeitet den Code mit dem Code in der Klasse, die die Tabelle zuordnen, in Bezug auf den zweiten Punkt in dieser Tabelle mache ich nichts durch Code nur das Lesen mit Session.Query . – jacopinho04

+1

Nichtsdestotrotz ist "Auswahl nicht unterbrochen" (https://blog.codinghorror.com/the-first-rule-of-programming-its-always-your-fault/). Der Code, den du hinzugefügt hast, beweist nichts (diese Teile sind immer noch kein komplett lauffähiges Programm, also hast du eindeutig mehr Code). Sie müssen alles überprüfen, was Sie tun - versuchen Sie wirklich, von der gleichen Tabelle in der genau gleichen Datenbank zu lesen? Sind Sie wirklich sicher, dass Sie das Skript programmieren oder testen oder die Datenbank bei jedem Lauf nicht neu initialisieren? Aktivieren Sie die Protokollierung für NHibernate.SQL, oder verwenden Sie SQL Profiler, um das vollständige Bild zu erhalten. –

Verwandte Themen