Laden...
Avatar #avatar-3200.jpg
unconnected myCSharp.de - Member
Softwareentwickler Oerlinghausen/NRW Dabei seit 13.08.2006 849 Beiträge
Benutzerbeschreibung

Forenbeiträge von unconnected Ingesamt 849 Beiträge

27.10.2010 - 21:09 Uhr

Erstmal danke für die vielen Antworten 😃 Vorallem Dir Daniel(Sarc) 😉

Table Splitting scheint vielversprechend.. und lazy Loading auf Property ebene auch..

Ich muss mich aber in beide Themen erstmal kurz einarbeiten. Mit Views habe ich im EF noch nicht gearbeitet, war ich aber auch noch nie der Fan von. Werde aber trotzdem mal schauen.

Wie gesagt, danke für die Posts. Wozu ich mich entschieden habe poste ich Morgen 😃

Grüße an alle
Jan

27.10.2010 - 08:22 Uhr

verwendetes Datenbanksystem: <SqlServer>

Hallo,

ich bin gerade über ein Problem gestolpert das ich mir einfacher vorgestellt habe.

Ich habe in meinem Entity eine recht complexe Klasse User, die ein Property Password hat.
Ich möchte nun nicht das der Password Hash jedesmal mit zum client übertragen wird, wenn einen User abrufe.

Ich wollte das mit Vererbung lösen. Sprich eine Klasse UserInternal bauen, die von User erbt und das Password Property übernimmt. Leider wirft mir hier das EF ein paar Steine in den Weg. Ich müsste über eine Column Bedingung vorher schon wissen ob mein Object UserInternal oder User ist, um das zu Mappen, sonst gibt es einen Mapping fehler.

Sprich Vererbung fällt aus.

Wie würdet ihr das lösen?

Ich habe mir schon die ein oder andere Alternative ausgedacht..

  1. Eine Sehr kleine Klasse UserInternal mit nur Id und Password.
  2. Wenn User abgerufen wird, Password nullen. (Wobei ich noch nicht weis wie ich verhindere das ein bestimmtes Property beim speichern ausgeschlossen wird.)
    ....

Würde mich freuen wenn ihr ein paar Denkanstösse für mich hättet.

Gruß

Jan

25.10.2010 - 14:34 Uhr

Hallo,

Eine Möglichkeit die Methoden zu testen bevor man sie aufruft, gibt es imho nicht.

Auf einen User mit if abzufragen finde ich auch eher ungünstig.
An deiner Stelle würde ich mit Rollen arbeiten und mir diese im client merken. Redundanzen lassen sich an dieser Stelle nie ganz vermeiden, da der Server geschützt werden will, und der User kein Bock hat auf eine Exception vom Server zu warten. So musst du eigentlich immer die Authorisierung von Gui und Server getrennt behandeln.

Natürlich lässt sich das meiste davon Kapseln. Aber eine Zuordnung Button -> (Role/user) wird sich nicht vermeiden lassen, und somit hast halt eine Redundanz zu deiner WebMethod.

25.10.2010 - 14:15 Uhr

ctrl ist eine variable vom Typ Control. Hier sollte das Control drin stecken das aufgerufen werden soll.

20.10.2010 - 21:24 Uhr

Hallo Findom,

hört sich für mich nicht nach einem verhalten an, was bei Async Methoden auftreten sollte. Wie rufst du es denn auf? Wartest du aufs AsyncResult?

20.10.2010 - 07:36 Uhr

Hallo,

Kommt drauf an was Du vor hast. Wenn Du nur Punkte die n felder linear vom ausgangspunkt weg sind haben willst, reicht es deine new Point befehle in eine for schleife zu packen und statt 1 die variable der schleife zu nehmen.

Wenn man dabei auch abbiegen darf wirds komplizierter.

20.10.2010 - 07:22 Uhr

Hatte ich eigentlich auch nur zum anzeigen, und verändern des CellContents gemeint. Suchen solltest Du nur auf der ItemSource. (Was Du ja scheinbar jetzt machst).

19.10.2010 - 14:44 Uhr

Hat mich mal interressiert, und habe ein kleines Test Project gemacht..

Wenn du bevor du GetCellContent aufrufst ScrollIntoView aufrufst klappt es einwandfrei.. leider weis ich nicht ob das in deinem Fall erwünscht ist..

19.10.2010 - 13:27 Uhr

Weis immer noch nicht ob ich dich richtig verstanden habe..

aber merk Dir doch statt dem nächsten Index das nächste Item und setz dann das SelectedItem.

Das müsste dann auch im nicht sichtbaren Bereich helfen.

19.10.2010 - 13:09 Uhr

Hallo punkdevil,

normalerweise durchsucht man tatsächlich die ItemSource. Aber GetCellContent() ist doch normalerweise bestandteil des datagrid. Also wie kannst Du GetCellContent auf die ItemSource aufrufen... confused

14.10.2010 - 09:31 Uhr

Hallo, mit dem BinaryFormatter kannst du jede art von serialisierbaren Objecten binär in einen Stream verbannen.

Gruß

Jan

13.10.2010 - 11:04 Uhr

Demhab ich auch so getan, die Exception wird geworfen.. CountOf ist nicht zufällig 0?

13.10.2010 - 07:38 Uhr

Hallo ludden,

an deiner Stelle würde ich da auf csv dateien gehen, die versteht Excel auch und lassen sich recht gut erzeugen. Es sei denn Du brauchst Formatierte Excel Sheets.

Oder sollte ich vlt doch Überzeugungsarbeit leisten bzgl XML?

Ja

Gruss

Jan

11.10.2010 - 14:13 Uhr

Hallo,

wie wäre es mit netstat -e parsen..

08.10.2010 - 15:43 Uhr

Das Problem kenne ich.. Das CollectionChanged / PropertyChanged ist nicht wirklich für rekursion bestimmt.

Du hast recht wenn Du sagst, das es beim Add und removed auslöst. Es löst aber nicht beim ändern eines Childs aus.

Um das zu bewerkstelligen müsstest Du von ObservableCollection erben, InsertItem und RemoveItem überschreiben und jeweils PropertyChanged für die Childs registrieren/deregistrieren um dann in deiner Collection ein eigenes Event "ChildChanged" zu feuern. CollectionChanged sollte hierfür nicht herhalten.. könnte nebenwirkungen geben.

08.10.2010 - 11:33 Uhr

Also PropertyChanged ist nur nicht null, wenn es irgendjemanden interessiert ob mit dem Object was passiert.

Sprich entweder du hast dein MenuViewModel an irgendetwas gebunden was PropertyChanged abonniert, oder du abonnierst es selbst.
Deinem Model sollte es egal sein ob es abonniert wird oder nicht, was du ja mit if(PropertyChanged != null) unterstrichen hast.

Ich glaube wir texten immer noch ein wenig aneinander vorbei.

Also du führst durch den Button ein Command aus. Die Methode wird ausgeführt, was erwartest du jetzt, und was passiert? Denn den Fehler das PropertyChanged null ist, hast du ja jetzt behoben indem du es vorher abfragst.

08.10.2010 - 10:53 Uhr

Hmm, puh.. dein Text ist schwer zu verstehen, zumindest für mich. Vllt solltest du ihn mit ein paar CodeSnippets untermalen.

OnPropertyChanged ist nicht gesetzt? diese Fehlermeldung sagt mir nichts.. Meinst vllt das PropertyChanged null ist? mit nem simpelen if(PropertyChanged != null) ist es nicht getan oder?

06.10.2010 - 15:29 Uhr

sorry, dein Beispiel ist mir für heute zu verworren.

Entweder ich habe heute nen Knoten im Hirn, oder dein Model bedarf einer Überarbeitung. Aus diesen Teilstücken kann ich nichts mehr herleiten.

Grüße

06.10.2010 - 12:54 Uhr

*confused*

SitzeListe ist doch vom typ List<A_Sitze>.. wieso kannst du mit SitzeListe.Bezeichnung darauf zugreifen ?!?

06.10.2010 - 11:23 Uhr

Hallo,

Wann und wie füllst/erstellst du denn deine Liste? Bei List<t> wird nicht aktualisiert wenn du items nachträglich hinzufügst.
Dazu brauchst du ObservableCollection<t>. Erstellst du gar die Liste erst nachträglich nach dem Binding muss dein Model INotifyPropertyChanged implementieren.

06.10.2010 - 10:36 Uhr

Hi, probier mal Text="{Binding Bezeichnung} in der listbox geht das Binding schon auf das einzelne Element der Liste.

06.10.2010 - 10:06 Uhr

Hallo, nur mal innen Wind geschossen, aber ich denke das in value nicht wie geglaub deine Binding Group drin ist.

01.10.2010 - 10:55 Uhr

Genaue Syntax müsste ich nachschauen aber ich würde mit modulo arbeiten

select * where NumColumn -> modulo 5<- (gegen richtigen ausdruck zu ersetzen) = 0

30.09.2010 - 07:54 Uhr

und für die Pausen Thread.Sleep() 😃

24.09.2010 - 07:50 Uhr

Hallo Cyberhunter,

ich denke ohne das Du uns sagst, was "einiges mehr" ist, können wir dir nicht weiter helfen. Silverlight ist ein wenig anders aufgebaut, gerade was WebServices angeht.
Wie du schon festgestellt hast sind alle Methodenaufrufe auf die Services async. Microsoft will damit verhindern das die Gui während des aufrufs blockiert. Das ist ein guter Gedanke, denn ein User will keine Blockierenden Oberflächen. Leider ist dann ein wenig umdenken, was die Aufrufe dieser Services angeht, angesagt.
Um die Methoden sync aufzurufen musst du immer den generierten Code umschreiben oder nen Wrapper schreiben -> kein gute Idee.

21.09.2010 - 09:34 Uhr

Hallo,

du kannst auch deine Common.dll an deinem client referenzieren, und dann deinen Proxy mit der einstellung reuse types in referenced assemblies generieren.

dann werden die klassen nicht nochmal neu erzeugt. und du kannst die aus deiner common.dll benutzen.

17.09.2010 - 15:07 Uhr

Hallo Corpsegrinder, lass mal folgenden Code Laufen.. Du wirst sehen das Objekte auch mit gleichen Werten verschiedene Hashcodes haben.

Dieses kann nur mit der Implementierung von GetHashcode umgangen werden.

Und nein, wenn zwei Objecte den selben Hashcode liefern, heisst das nicht das sie auf den selben Speicher verweisen.


static void Main(string[] args)
        {
            Console.WriteLine(new Test { TestString = "Test" }.GetHashCode());
            Console.WriteLine(new Test { TestString = "Test" }.GetHashCode());
            Console.ReadLine();
        }

        public class Test
        {
            public string TestString { get; set; }
        }  

17.09.2010 - 14:01 Uhr

ToString ist eine möglichkeit. Leider gilt das dann auch für alle Stellen wo dieses Object angezeigt wird.

Meist haben ListControls (wie auch ListBox) eine eigenschaft names DisplayMember, ich denke die ist vorzuziehen. ToString benutze ich zumindest nur noch für die Anzeige im Studio beim debuggen.

14.09.2010 - 10:16 Uhr

Das wirst Du nur mit Reflection lösen können. Schau Dir mal die klasse PropertyInfo oder das schlüsselwort dynamic (neu in .Net4 & VS2010) an.

Reflection hat natürlich Performance technische nachteile. Das wirst du nicht bei 10 Aufrufen merken, aber bei 100000.

10.09.2010 - 13:27 Uhr

Hallo,

ich habe das mal mit sql Server Ce gemacht.. da gibts auch eine 64 bit und eine 32 Bit dll. Ich habe beide dlls in verschiedenen unterverzeichnissen mitgeliefert, und bei Programmstart einfach die richtige dll ins Programmverzeichnis kopiert.

Hat geklappt, hat mir aber auch nie so richtig gefallen.

09.09.2010 - 07:50 Uhr

Naja, fasst richtig. Du hast ja hier eine rekursion. Sprich mit return verlässt du die Funktion, aber da diese wiederum aus einer foreach schleife (ein level höher) aufgerufen wird, wird diese Schleife natürlich nicht beendet. Du gehst nur wieder ein level höher, da die abarbeitung der childs beendet ist, oder wie in diesem Fall maxlevel erreicht ist.

Gruß

01.09.2010 - 16:06 Uhr

Hi, wo tritt den deine NullReferenz auf? ich habe beim kurzen durchprobieren viele fehler gehabt, aber eine Null Reference war nicht dabei.

Aber ich denke ich weis worauf du hinaus willst. schau Dir mal das Attribute XmlInclude an.

01.09.2010 - 14:27 Uhr

Genau das wollte ich sagen^^

typeof geht zur compilezeit nicht. Weil die Referenz fehlt, und Type.GetType("Special") geht auch nicht, weil Attribute ja nur constanten fressen 😃

01.09.2010 - 13:48 Uhr

Weil er die speziellen Typen (denke ich) in einer anderen Assembly als die ConfigurationsKlasse definiert und XmlInclude brauch soweit ich weis einen Type.


pulic class Configuration
{
[XmlInclude(typeof(SpecialModulConfig))] <-- geht nicht (wahrscheinlich andere assembly)
public ModulConfig Config {get;set;}
}

31.08.2010 - 15:47 Uhr

Hallo,

bitte berichtige mich mal jemand der sich damit auskennt... 😉

Ich denke das das Problem darin besteht das newComer4435 in seinem Code binärDaten(verschlüsselt) in char (java UTF16 wenn ich mich nicht irre) verwandelt und es dann auf der anderen Seite mit UTF8 decodiert.

Zumal ich denke das mache Werte dann das UTF8 Encoding dazu veranlassen werden, zu denken hier wird pro char nur 1 oder gar 4 Byte verwendet...

newComer vergleiche dochmal die Byte folgen auf ausgangs und eingangs Seite & Versuch mal UTF16 zum decodieren zu verwenden. (Die Schlüssel hab ich nu nicht nachgerechnet.)

Gruß

31.08.2010 - 14:01 Uhr

Vllt solltest Du dich einmal mit Remoting und Serialisation auseinander setzen.

Grüße

14.08.2010 - 16:20 Uhr

Hi manullino,

du kannst beim Erzeugen des Proxy sagen, das er "bekannte" Klassen verwenden soll.

Sprich wenn du deine Datenklassen in eine eigene Dll verpackst, und diese Option verwendest, kannst Du deine orginalen Klassen inkl. dem Interface verwenden. Musst halt von deiner Service dll und der dll in der du den Proxy erzeugst referenzieren.

Gruß

Jan

12.08.2010 - 11:24 Uhr

Resharper ist ein mächtiges Tool aber auch wie michlG so schön sagt ein Bremsklotz. Und das wird mit größe der Solution / geöffnete Dokumente immer schlimmer.

Muss man halt wissen, ob es einem das Wert ist, oder nicht.

Ich hab die selbe Maschine auch mit ReSharper drauf. Und bei ca. 60 Projekten wird das ganze echt grenzwertig.

Gruß

06.08.2010 - 07:41 Uhr

Ich weis auf alle fälle das es möglich ist. Hab ich schon mit gearbeitet. Leider komme ich bis Montag nicht an den Code herran, also googlen 😃

06.08.2010 - 07:03 Uhr

Leider findet meine Anwendung beim ausführen diese Assembly trotzdem nicht. UNd ist es normal, dass ich zum kompilieren die Assembly trotzdem im Projekt als Referenz haben muss?

Nicht wenn Du gegen eine Interface dll programmierst. Oder machst es kompl. mit Reflection.

05.08.2010 - 14:37 Uhr

Ohne es ausprobiert zu haben..

ich würde versuchen die verschlüsselte dll anders zu benennen, und dann AppDomain.CurrentDomain.AssemblyResolve abonnieren.

-> Die dll wird nicht gefunden
-> Assembly Resolve
-> verschlüsselte Assembly decodieren
-> mit Assembly.Load laden
-> Decodierte Assembly zurückgeben.

sollte klappen denke ich.

03.08.2010 - 12:02 Uhr

Hmm, also das es so etwas gibt wäre mir nicht bekannt.
Ausserdem haben Fremdanbieter immer die angewohnheit neue Propertys zu benutzen, das auf WinForms runterzubrechen, wird auf jeden Fall eine Heraussforderung.

Ich würde sagen, das das ein Fall für Handarbeit ist.

Da diese Controls nicht mehr zeitgemäß aussehen, möchte mein Arbeitgeber diese durch Standard WinForms Controls ersetzen.

Hmm warum dann zu WinForms?? Keine gute Idee wenn man von "zeitgemäß" spricht.
Wenns den unbedingt WinForms sein soll dann würde ich hier wieder zu Fremdanbietern aka Infragistics etc greifen. Soweit ich weis werden WinForms auch nicht mehr weiterentwickelt. Alles scheint in Richtung WPF zu gehen.

02.08.2010 - 10:49 Uhr

Hallo iceman87,

dein Problem ist das Du mit select new {} einen anonymen typ erzeugst und ihn dann mit einer Instanz von deiner Klasse vergleichst (BegrGBez)

Du müsstest auch direkt in dem select eine Instanz vom Typen BegrGBez erzeugen, dann sollte es klappen

27.07.2010 - 19:25 Uhr

Kleiner ausschnitt aus der doku zu Memberwise Clone

Die MemberwiseClone-Methode erstellt eine flache Kopie, indem ein neues Objekt erstellt wird und anschließend die nicht statischen Felder des aktuellen Objekts in das neue Objekt kopiert werden. Wenn ein Feld ein Werttyp ist, wird das Feld bitweise kopiert. Wenn es sich bei dem Feld um einen Verweistyp handelt, wird nicht das Objekt, auf das verwiesen wird, sondern der Verweis kopiert. Daher verweisen das ursprüngliche Objekt und der Klon auf dasselbe Objekt.

So eine flache Kopie kann man wirklich in den seltensten Fällen gebrauchen.

27.07.2010 - 16:07 Uhr

Hmm, also als Abschluss vllt. noch einmal als Erklärung warum ich mich beim (nicht performance kritischen) clonen nicht auf IClonable verlasse..

a. bei großen Daten Objecten sagen wir 20 Propertys aufwärts wird die Clone Methode unübersichtlich, und wenn dann noch collections dabei kommen irgendwann unwartbar.

b. Ich arbeite mit mehreren Entwicklern zusammen, die auch an den erstellten Objecten arbeiten.. und wenns dann mal wieder schnell gehen muss, wird meistens :IClonable und Clone() übersehen, und einfach ein Property hinzugefügt, das dann beim clonen fehlt. (Ich will mich selber da nicht ausschliessen).

Klar wenns um performance geht, ist das natürlich grottig. Aber es läuft stabil und hat sich bewährt.

und wie JunkyXL schon sagte benutze ich tatsächlich den Binary Formatter bzw. den DataContractSerializer (Silverlight)

Grüße

27.07.2010 - 15:42 Uhr

Hallo Freeman4gu



public void method(IMessage message)
{
  IMessage source =  Activator.CreateInstance(message.GetType()) as IMessage;

  if(message != null)
  {
    GetSourceObject(source, message.id);
    UpdateObject(source, message);
  }
}


26.07.2010 - 16:34 Uhr

Hallo vanKurt,

die Nodes haben ein Property Tag in dem du eine Referenz auf jedliche Art von Object verstauen kannst.

Gruß

25.07.2010 - 23:17 Uhr

Hallo,

wenn ich eine wirkliche Kopie eines Objectes brauche, serialisiere ich es in einen MemoryStream und deserialisiere es wieder. Bisher imho die wirksamste Methode (wenn auch nicht die performanteste).

grüße

22.07.2010 - 09:28 Uhr

Hallo Punkdevil,

nachdem Du das Property hinzugefügt hast, kannst du mit einem rechtsklick darauf TableMappings aufrufen. Hier hast Du auf der Linken Seite die Tabellen Spalten und auf der rechten die zugehörigen Propertys.

Alle Propertys müssen gemappt sein...(finde ich persönlich nicht so gut..)

Mein vorgehen ist immer so:

In dem Datenbank script Spalte hinzufügen -> in der Datenbank veröffentlichen -> im edmx file Update Model from Database aufrufen -> eventuell Property noch umbennen -> fertig.

Das mit dem Property hinzufügen mache ich in der Form eigentlich nicht, da wir mit einem Sql script zur Datenbank erstellung arbeiten. Aber wenn du es so machst, musst du entweder die Spalte auch in der Datenbank erstellen und mit Update Model from Database dem edmx File bekannt machen, oder in die andere richtung in dem du die Datenbank aus dem Edmx generierst. Bei ersterem musst du dann noch das Mapping per Hand übernehmen.

Grüße