Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Fracoon
Thema: Liste in Objekt soll gekippt in DGV angezeigt werden.
Am im Forum: Datentechnologien

Ich glaub ich hab eine echt tolle Lösung gefunden. Wenn alles funzt und ich genug Zeit habe stell ich sie hier noch rein.

Thema: Liste in Objekt soll gekippt in DGV angezeigt werden.
Am im Forum: Datentechnologien

Das ist mir klar. Die Daten liegen jedoch nicht in einer Datatable sondern in Objekten vor (siehe Oben). Also müsste ich die Daten zuerst aus den Objekten in eine Datatable kippen.

Thema: Liste in Objekt soll gekippt in DGV angezeigt werden.
Am im Forum: Datentechnologien

Zitat
  • Am ende musst du die Datenquelle natürlich noch an den DataGridView binden =)

Genau diese möglichkeit würde ich mir doch dann nehmen?!?! Mit Databinding hat das ja nichts mehr zu tuen. Und mit einem DataAdapter kann ich dann auch nichtm ehr arbeiten?!?!

Thema: Liste in Objekt soll gekippt in DGV angezeigt werden.
Am im Forum: Datentechnologien

Zitat von Floschi
Ansonsten muß das ganze komplett generisch sein.

Genau. Das ist das Problem.

Ich habe nichtmal ansatzweise eine Idee wie ich es realisieren könnte.

Thema: Liste in Objekt soll gekippt in DGV angezeigt werden.
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: Postgres

Hi@all...

ich hoffe ich bin im richtigen Forum. Wenn nicht bitte verschieben.

Es geht um Folgendes :

Ich habe eine Klasse die eine List<> von einer anderen Klasse enthält. Etwa so :


class Probe
{
      public string Journalnummer;
      public string Schale;
      public List<Messung> messungen;

}

class Messung
{
      public string name;
      public string ergebnis;
}

Beispiel mit Daten:



Probe probe1 = new Probe();
probe1.Journalnummer = "1002";
probe1.Schale = "A1"

Messung messung1 = new Messung();
messung1.name = "Leer";
messung1.ergebnis = "11.11";

Messung messung2 = new Messung();
messung2.name = "Voll";
messung2.ergebnis = "11.11";

probe1.messungen.add(messung1);
probe1.messungen.add(messung2);

Probe probe2 = new Probe();
probe2.Journalnummer = "1003";
probe2.Schale = "A4"

Messung messung3 = new Messung();
messung3.name = "Leer";
messung3.ergebnis = "11.11";

Messung messung4 = new Messung();
messung4.name = "Verbrannt";
messung4.ergebnis = "11.11";

probe2.messungen.add(messung3);
probe2.messungen.add(messung4);

Jetzt würde ich gerne in einer Tabelle wie die im Anhang haben. Also für jede Messung in der Liste muss (wenn nicht schon von einer anderen Probe erstellt) eine Spalte erstellt werden. Am besten noch mit DataBinding, dass die Messungen beim Eintragen automatisch in der Probe erstellt werden.

In meinem Beispiel fehlt z.B. bei der zweiten Probe der "Voll" Wert aber ein "Verbrannt" werd ist hinzugekommen der wiederum in der ersten Probe fehlt.


Ich hoffe ich habe mein anliegen klar ausgedrückt. Ich hab auch schon sehr viel über Google und im Forum gesucht. Aber ohne erfolg.. Kennt jemand eine Möglichkeit dies zu realisieren?

Thema: WCF Service Authentifizierung und Rechteabhängiges verhalten
Am im Forum: Netzwerktechnologien

Hallo Norbert,

bin ein WCF Neuling, aber beschäftige mich grade mi etwas verlgeichbarem.
Sieh Fein justierbare Authentifizierung in WCF??


1. Nicht jeder soll sich mit dem Service verbinden dürfen.
Wie kann man dies am einfachsten Realisieren ?
Ich löse das über die Windows Authentifizierung. Die kann man in der wcf Konfiguration einstellen.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="HelpDeskSRV.Test" behaviorConfiguration ="DefaultTCP">
        <host>
          <baseAddresses>
            <add baseAddress ="http://192.168.2.23:8000/HelpDeskSRV"/>
          </baseAddresses>
        </host>
        <endpoint address="net.tcp://192.168.2.23:2310/Test" binding="netTcpBinding" bindingConfiguration ="DefaultTCP" contract="HelpDeskSRV_API.ServiceContracts.ITest"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultTCP">
          <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" />
          <!-- <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" /> -->
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <netTcpBinding>
        <binding name ="DefaultTCP">
          <security mode ="Transport">
            <transport clientCredentialType ="Windows" />
            <message clientCredentialType ="Windows"/>
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>
</configuration>
(Nur ein Test =))

Soweit ich weiß kann man für WCF auch eigene Authentifizierungsdienste schreiben, die dann in deinem Fall die Tabelle mit den Usern abfragen könnte.

Zitat
2. Wenn man sich verbunden hat und eine Funktion aufruft, dann muß innerhalb der Funktion in abhängigkeit dieses Benutzers ggf ein leicht unterschiedliches (eben benutzerabhängiges) Verhalten implementiert werden.
Hier könnte ich zwar beim Aufruf der Funktion jeweils von außen den Benutzer mit übergeben, aber das ist recht nervig, weil es später sehr viele Services geben wird.

Funktioniert bei mir so :


class Test : ITest
    {
        
        #region ITest Members
        
        public Boolean logtest(string bla)
        {
            string username;
            Permissions s = Permissions.getInstance();
            username = ServiceSecurityContext.Current.WindowsIdentity.Name;

            if (!s.Users[username].Contains(permissions.callTest))
            {

                throw new FaultException<SecurityFault>(new SecurityFault("Access Denied"));
                
                //throw new FaultException("Access Denied");
            }

            Console.WriteLine(username + " identified");

            return true;
        }
Dazu ist zu sagen, dass man den für den Service die Sessions aktivieren muss. Sonst kann man nicht bestimmen welcher Benutzer gerade verbunden ist.

Ich hoffe ich konnte dir ein wenig helfen.

Thema: Fein justierbare Authentifizierung in WCF??
Am im Forum: Netzwerktechnologien

Vielen dank für die Zeit die du dir nimmst Rainbird...

Irgendwie habe ich das Gefühl wir reden aneinander vorbei.

Ich wollte wissen ob es eine bessere Möglichkeit gibt PRO METHODE Sicherheitsrichtlinien zu implementieren. Aus deinem ersten Posting entnehme ich, dass du denkst dass es über ein Ticket besser gelöst werden kann.

Ich vermute aber folgendes : Das verhalten was bei dir durch das Ticket erreicht wird, macht bei mir der WCF Service von ganz alleine. Ich habe ihn so konfiguriert, dass nur Benutzer die es auch in Windows gibt eine Session aufbauen können.

Zitat
Die Rechteprüfung kommt aber erst dann überhaupt zum Einsatz, wenn ein Benutzer sich erfolgreich angemeldet hat. Benutzer ohne gültige Sitzung haben von vorn herein keine Rechte.
Bei mir : Wer nicht über ein gültiges Windows Konto verfügt hat von vorn herein keine Rechte.
Zitat
Um eine rollenbasierte Sicherheit zu haben, muss die nötige Rolle natürlich bei jedem Funktionsaufruf geprüft werden
Genau das tue ich. Unabhängig von der Windows Gruppe in der sich jemand befindet. Die Berechtigungsprüfung findet über meinen Permissions Singleton statt.
Zitat
Hinzu kommt, dass die Identität des Aufrufers bei einer Aufrufkette über mehrere Dienste (Also Dienst A konsumiert intern Dienst B) nicht weitergegeben wird (Der Aufruf von Dienst B würde im Kontext des AppServer-Dienstkontos laufen). Also wird ein Ticket benötigt, welches man an den Aufrufkontext hängt. Der Sicherheitsdienst zieht dann die gespeicherte Benutzeridentiät der Sitzung heran (welche er anhand der Ticketkennung ermittelt) Bei mehreren Hops hätte der Sicherheitsdienst arge Probleme, den ursprünglichen Client-Benutzer herauszufinden. Bei mehreren Applikationsservern könnte man die Sitzungsliste auf replizieren. Das Ticket ist also nur für die Authentifizierung nützlich, aber nur indirekt für die eigentliche Rechteprüfung.
Darüber habe ich mir noch keine Gedanken gemacht. Könnte mir aber vorstellen das WCF da auch eine Integrierte Lösung bereithällt.



Ich würde also sagen das unser Ansatz sehr ähnlich ist. Dein Ansatz ist nur etwas vorausschauender?!?!?!?

Thema: Fein justierbare Authentifizierung in WCF??
Am im Forum: Netzwerktechnologien

Hallo Rainbird,

vielen Dank für deine Antwort. Ich habe mir deinen Applikationsserver mal angesehen. Kann aber nicht ganz verstehen wo der Vorteil gegenüber meiner Lösung sein soll.

Machst du nicht an dieser stelle "genau" das selbe wie ich?


// Wenn der Aufrufer in der Rolle "Product Reader" ist ...
if (ApplicationServer.IsInRole("Product Reader";))
{
// Aufruf an Geschäftslogik delegieren
return new ProductManager().GetProduct(productID);
}


Um nochmal kurz meine Situation zu beschreiben (vieleicht war es etwas unklar) :

Hier ist der Auszug von dem ich denke, dass er dem Ansatz von dir sehr Ähnlich ist


string username;
Permissions s = Permissions.getInstance();
username = ServiceSecurityContext.Current.WindowsIdentity.Name;

if (!s.Users[username].Contains(permissions.call_logtest)
{
//TODO : Zugriffsverweigerung an Client melden, Methode beenden (Mit Exception??)
}

"Permissions" ist ein Singleton, welcher ein Dictionary enthält. In diesem Dictionary steht der Benutzername (String) als Key und eine List von Rechten (Gebildet aus einem ENUM).
Um den Dienst überhaupt nutzen zu können, muss der Clientuser auf dem Rechner auf dem der Server läuft angelegt sein.


Kannst du mir bitte erklären wo der Vorteil des von dir genannten Tickets besteht? Ich steig nicht dahinter, weil es für mich so aussieht als würdest du (genau wie ich) in jeder Methode des Dienstes eine Gruppenzugehörigkeit abfragen).

Thema: Fein justierbare Authentifizierung in WCF??
Am im Forum: Netzwerktechnologien

Hi@all,

ich möchte gerne eine Serveranwendung schreiben die WCF benutzt um mit den Clients zu kommunizieren.

Das nur in Windows bekannte Benutzer zugriff auf den Service-Host haben ist mir bereits gelungen. Ist auch so gewollt.

Jetzt hätte ich aber gerne eine feinere Kontrolle darüber welcher User was machen darf.

Das ganze sollte auf Methodenebene einstelbar sein.


So ist die Lösung die ich mir ausgedacht habe :


class Test : ITest
    {
        #region ITest Members
        
        public Boolean logtest(string bla)
        {
            string username;
            Permissions s = Permissions.getInstance();
            username = ServiceSecurityContext.Current.WindowsIdentity.Name;

            if (!s.Users[username].Contains(permissions.call_logtest)
            {
                //TODO : Zugriffsverweigerung an Client melden, Methode beenden (Mit Exception??)
            }

            return true;
            
        }

        #endregion
    }

Innerhalb des Methodenaufrufs im Service wird also überprüft ob der User berechtigt ist die Methode testlog aufzurufen (permissions.call_logtest)

Somit könnte ich wirklich auf Methodenebene steuern ob ein User berechtigt ist oder nicht.


Was ich nicht schön an dieser Lösung finde ist, dass der Benutzer wirklich bei jedem aufruf von logtest überprüft wird.

Gibts ne schönere Lösung?

Thema: NHibernate: one-to-many, fehlende aktualisierung von Child
Am im Forum: Datentechnologien

Nein Sorry... habe mich bis jetzt noch nicht intensiv mit hql beschäftigt... nur mit den mapping und dem persistieren von objekten!

Thema: NHibernate: one-to-many, fehlende aktualisierung von Child
Am im Forum: Datentechnologien

Hallo Spike24,

bin zwar noch nicht der Hibernate Experte, aber ich habe ähnliche Erfahrungen gemacht wie du.

Meiner Meinung nach ist das von dir beschriebene Verhalten "normal". Du musst dem Child den Parent "zuweisen". Am besten bevor du commitest.

Ich bin mir da relativ sicher, da ich das Probloem selbst hatte und über Google mehrere Quellen gefunden habe die das Verhalten als "normal" bezeichnen!

Thema: Realisierungsfrage für verteilte Anwendung
Am im Forum: Netzwerktechnologien

Pack doch einfach 2 oder 3 Grafikkarten mit jeweils 2 Anschlüssen in einen Rechner.. Dann brauchst deine Anwendung nicht verteilen =)

Thema: Zugriff direkt über Datenbank oder "zwischengeschalteten WCF Server" (Performance) ??
Am im Forum: Netzwerktechnologien

Danke =)

hab mir in der zwischenzeit mal das wcf etwas angeschaut. Finde jedoch nur wirklich Einführungs Tutprials. Kennt jemand was, das etwas tiefgreifender das WCF behandelt?

Thema: Zugriff direkt über Datenbank oder "zwischengeschalteten WCF Server" (Performance) ??
Am im Forum: Netzwerktechnologien

Hallo Rainbird,

mit deiner Antwort habe ich gerechnet, da ich deinen Applikationsserver schon gesehen und getestet habe =).

Vielen Dank für deine Antwort. Verstehe ich dich also richtig? Du sagst ein Applikationsserver ist also in jedem fall dem direkten zugriff vorzuziehen?

Thema: Zugriff direkt über Datenbank oder "zwischengeschalteten WCF Server" (Performance) ??
Am im Forum: Netzwerktechnologien

Hi@all,

hab da mal wieder ne Frage =).

Was ist schneller? Warum? und Wieviel?

1. Clientapplikation greift direkt auf einen MSSql 2005 Server mittels LinqToSQL oder NHibernate zu,

2. Client greift auf einen Server mit WCF zu um sich die Daten aus der DB zu holen. Der Server holt die Daten mittels Linq oder NHibernate aus der Datenbank und stellt sie mittels WCF zur verfügung.


Ich würde gerne WCF benutzen:
- um dann auf der "Serverebene" Berechtigungen zu vergeben
- Die authentifizierung durchzuführen
- Eine "Locking" funktionalität zu Implementieren, sodass Datensätze nur einmal zum bearbeiten geöffnet werden können.


Welche Nachteile hätte ich mit WCF gegenüber dem direkten Datenbankzugriff?
Möglichkeit 1 habe ich schon ausprobiert. Mein Hauptproblem hierbei ist, dass man so keine Datensätze auf vernünftigem Weg sperren kann!

Bevor ich mich jetzt in Möglichkeit 2 stürze wollte ich mal eure Meinungen hören.

Oder ist eine Kombination aus beidem denkbar / sinnvoll?

Thema: NHibernate, Objekt zum bearbeiten "kopieren"
Am im Forum: Datentechnologien

Zitat von FZelle
Das ist ein komplexeres Problem.

Willst Du wirklich die ganze liste Clonen?
Macht das sinn?

Sinn des ganzen wäre, dass ich für den gesamten Kunden eine "Undo" Funktion habe! (wenn man auf Abbrechen im Bearbeiten-Fenster klickt)!!

Thema: NHibernate, Objekt zum bearbeiten "kopieren"
Am im Forum: Datentechnologien

Danke FZelle für die tipps!

Hab jetzt mit meiner implementierung noch ein anderes problem!

Hab BEginEdit CancelEdit und EndEdit nun in eine eigene Klasse gepackt. Meine Kunde und Ansprechpartner erben davon!

Funtioniert soweit!

Aber : Der Kunde hat eine List<ansprechpartner>. Für die geht es nicht. Ich vermute, dass beim "kopieren" der Properties für List<> nur eine Referenz übergeben wird!
Ist das richtig? Kann man das irgendwie so generisch lösen wie für die anderen Properties?

Thema: NHibernate, Objekt zum bearbeiten "kopieren"
Am im Forum: Datentechnologien

Für alle die es interessiert, ich hab jetzt folgendes gemacht :


public class ansprechpartner : IEditableObject
    {
        Hashtable props = null;
        
        private long ansprechpartner_id;
        private string vorname;
        private string nachname;
        private string email;
        private string telefon;
        private kunde kunde_fk;
        private int version;


        #region Fields
        public virtual long Ansprechpartner_id
        {
            get { return ansprechpartner_id; }
            set { ansprechpartner_id = value; }
        }
        
        public virtual string Vorname
        {
            get { return vorname; }
            set { vorname = value; }
        }
        
        public virtual string Nachname
        {
            get { return nachname; }
            set { nachname = value; }
        }
        
        public virtual string Email
        {
            get { return email; }
            set { email = value; }
        }
        
        public virtual string Telefon
        {
            get { return telefon; }
            set { telefon = value; }
        }
        public virtual kunde Kunde_fk
        {
            get { return kunde_fk; }
            set { kunde_fk = value; }
        }
        public virtual int Version
        {
            get { return version; }
            set { version = value; }
        }
 
        #endregion

        public virtual void BeginEdit()
        {
            

            //enumerate properties

            PropertyInfo[] properties = (this.GetType()).GetProperties
                        (BindingFlags.Public | BindingFlags.Instance);

            props = new Hashtable(properties.Length - 1);

            for (int i = 0; i < properties.Length; i++)
            {
                //check if there is set accessor

                if (null != properties[i].GetSetMethod())
                {
                    object value = properties[i].GetValue(this, null);
                    props.Add(properties[i].Name, value);
                }
            }
        }
        public virtual void CancelEdit()
        {
            //check for inappropriate call sequence

            if (null == props) return;

            //restore old values

            PropertyInfo[] properties = (this.GetType()).GetProperties
                (BindingFlags.Public | BindingFlags.Instance);
            for (int i = 0; i < properties.Length; i++)
            {
                //check if there is set accessor

                if (null != properties[i].GetSetMethod())
                {
                    object value = props[properties[i].Name];
                    properties[i].SetValue(this, value, null);
                }
            }

            //delete current values

            props = null;
        }
        public virtual void EndEdit()
        {
            //delete current values

            props = null;
        }



        
    }

Funktioniert bist jetzt ganz gut! Unf vor allem muss man nicht für jede Property die man hinzufügt noch etwas an der "Transaktionslogik" ändern!

Edit : Ist übrigens von Codeproject "geklaut"!

Thema: NHibernate, Objekt zum bearbeiten "kopieren"
Am im Forum: Datentechnologien

Danke für den Tipp FZelle.

Ich vermute mal wenn bei ie.CancelEdit(); eine NullReference Exception kommt, heißt das, dass die Klasse IeditableObject nicht implementiert?!!?

Thema: NHibernate, Objekt zum bearbeiten "kopieren"
Am im Forum: Datentechnologien

Schau ich mir an danke!

Thema: NHibernate, Objekt zum bearbeiten "kopieren"
Am im Forum: Datentechnologien

Hab jetzt was ähnliches wie deinen 2. Lösungsansatz implementiert :

Hab mir in der Ansprechpartner Klasse eine Statische methode geschrieben die einen Ansprechpartner mit einem anderen vergleicht und veränderte werte überschreibt.

Bevor nun das Bearbeiten fenster geöffnet wird erstelle ich einen neuen Ansprechparter un jage ihn zusammen mit dem "originalen" ansprechpartner durch diese methode. So bekomme ich eine "Kopie". Wenn der Benutzer dann auf Übernehmen klickt mache ich das ganze umgekehrt. Wenn er abbrechen klickt passiert nichts..

Ist halt ein "hoher" Aufwand wenn der Ansprechpartner Klasse felder hinzugefügt werden sollen!

Aber denke so bin ich auf dem sichersten weg!

Thema: NHibernate, Objekt zum bearbeiten "kopieren"
Am im Forum: Datentechnologien

Danke fü die Antwort. Hab grade gemerkt das die serialisierung tatsächlich nicht funktioniert wenn das Objekt aus der Datenbank kommt...

zu deinen Lösungsvorschlägen :

zu 1 : Wie geht das? Klingt sehr interessant wenn es einfach zu implementieren ist!
zu 2 : Hab ich mir auch shcon gedacht. Ist aber bei Objekten mit vielen Properties ein RIESEN aufwand!
zu 3 : auch seeeehr viel Aufwand!

Thema: NHibernate, Objekt zum bearbeiten "kopieren"
Am im Forum: Datentechnologien

Hab jetzt folgendes gemacht :

Das Ansprechpartner-Objekt wird zuerst mitels Evict aus dem NHibernate cahe entfernt und dann mit dem neuen Objekt ersetzt.

Funktioniert!

Würde mich aber trotzdem über antworten freuen... gibt bestimmt bessere methoden!

Thema: NHibernate, Objekt zum bearbeiten "kopieren"
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: Postgres

Hi@all...

ich habe eine Klasse Kunde mit einer "List" von ansprechpartner (klasse).

Die Ansprechpartner lass ich mir in einem Datagrid anzeigen.
Habe einen bearbeiten Button, der einen Dialog öffnet indem ich den Ansprechpartner bearbeiten kann. Zur Zeit übergebe ich das Ansprechpartner Objekt an den Dialog und mach ein Databinding an Textboxen. Wenn ich nun Felder verändere werden sie direkt um Objekt verändert. Ich hätte aber gerne einen Abbrechen Button der die Änderungen dann verwirft!

Hab hier und auch bei Codeplex schon einige interessante Artikel zum Thema "Transaktionen auf Objektebene" gelesen. Ist aber alles sehr kompliziert.

Was ich schon versucht habe ist : Objekt Serialisieren => an Dialog übergeben => nur bei OK das Objekt aus der Liste mit dem geänderten Objekt ersetzen.
Das funktioniert soweit auch.

ABER! Ich benutze NHibernate. Beim Speichern des Objekts (Kunde) wirft er eine Exception, dass ein Objekt mit der gleichen ID bereits existiert.

Hat jemand ne Idee wie ich das lösen könnte?

Thema: NHibernate Transaction verständnissfrage.
Am im Forum: Datentechnologien

Vielen Dank FZelle für dein endloses Engagement.

Meine Frage ist damit vorerst mal beantwortet. Ich werde wahrscheinlich in meinem Lernprozess auf noch viele andere Fragen stoßen und freue mich, dass es einen Ort wie diesen hier gibt!!

Thema: NHibernate Transaction verständnissfrage.
Am im Forum: Datentechnologien

ok eine Sache ist mir jetzt noch aufgefallen. Mit dieser Methode bekomme ich immer alle Properties. Macht ja nicht unbedingt immer sinn, weil manche Properties durch den Benutzer gar nicht geändert werden können. Kann ich properties in einer Klasse "Markieren" um diese Markierung später auszuwerten?

Also ob das Attribut im Vergleich angezeigt werden soll oder nicht?!?!

Thema: NHibernate Transaction verständnissfrage.
Am im Forum: Datentechnologien

Hab mir das ganze jetzt mal o zurecht gelegt :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            test org = new test();
            test db = new test();
            test changed = new test();

            org.Id = 1;
            org.Nachname = "BlaBLubb";
            org.Name = "Hans";

            db.Id = 1;
            db.Nachname = "Mustermann";
            db.Name = "Hans";

            changed.Id = 1;
            changed.Nachname = "Wurst";
            changed.Name = "Hans";
            
            Type t = typeof(test);

            foreach (System.Reflection.PropertyInfo pi in t.GetProperties())
            {
                
                Console.WriteLine(pi.Name + " | " + pi.PropertyType);
                Console.WriteLine("Original   : " + pi.GetValue(org, null).ToString());
                Console.WriteLine("DB-Value   : " + pi.GetValue(db, null).ToString());
                Console.WriteLine("Your-Value : " + pi.GetValue(changed, null).ToString());
                Console.WriteLine();
            }

            Console.ReadLine();

        }
    }

    class test
    {
        private int id;

        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private string nachname;

        public string Nachname
        {
            get { return nachname; }
            set { nachname = value; }
        }
    }
}

sieht eigentlich ganz net aus. Wenn ich das jetzt in eine Funktion packe die 3 Objecte entgegennimmt könnte ich mir ja aufgrund der einzellnen Typen eine GUI generieren lassen (String,Integer = Textbox,Bool = Checkbox)
In der könnte man dann alle 3 Versionen des objects anzeigen und den Benutzer entscheiden lassen was er tut.

Klingt gut oder?

Thema: NHibernate Transaction verständnissfrage.
Am im Forum: Datentechnologien

Zitat von FZelle
Tja, gute frage.
Ich lese dann den neuen Datensatz ein, habe für meinen ORMapper dann eine Funktion, die generisch
die Objekte vergleicht, und mir eine Liste der Änderungen bietet.
Die kann ich dann ganz oder je nach Wunsch teilweise ausgeben.

hört sich interessant an!! Mir (als "Anfänger") drängt sich jedoch die Frage auf :

Wie kann ich für VERSCHIEDENE Objekte/Klassen generisch die Attribute vergleichen? Ohne diese in der generischen funktion angeben zu müssen? Hast vieleicht nen Link? oder Codeschnippsel für mich?

Thema: NHibernate Transaction verständnissfrage.
Am im Forum: Datentechnologien

Ok, hab mitlerweile die "versionierung" vin nhibernate eingebunden. funktioniert gut.

Aber für einen Endanwender wäre es natürlich unschön wenn er viele änderungen vornimmt, um dann festzustellen, dass er nicht speichern kann weil eine concurency Exception auftritt.

Wie geht man damit um? Muss ich für alle verschiedenen Datensätze die man Speichern kann eine "vergleichsroutine" schreiben bei der man dann die differenzen sehen und dementsprechend reagieren kann?
Oder kann man sowas generisch für alle schreiben irgendwie?

Finde die Lösung mit der concurency Exception zwar gut, für den Endanwender in gewissen Fällen aber eher unschön.

Wie kann man sowas handhaben?

Thema: NHibernate Transaction verständnissfrage.
Am im Forum: Datentechnologien

vieleicht noch ergänzend warum ich das frage:

Das datenbankeigene Locking funktioniert immer nur innerhalb einer Transaktion(oder?)

Ich würde es in meiner Applikation gerne verwenden habe jedoch nur eine Globale Session (Singleton)

Wenn ich jetzt mehrere z.B. Kunden zum bearbeiten öffne bräuchte ich ja mehrere Transaktionen damit das Locking funktioniert?!?!