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 Cannon
Thema: Wie kann ich Icons für alle Grössen in meiner Applikation darstellen?
Am im Forum: GUI: Windows-Forms

Ich greife das Thema mal wieder auf, auch wenn es schon sehr alt ist. Dennoch istd as aktuell, weil auch ich nicht mit der automatische Skalierung zufrieden sind. Weiß denn jemand, wie die Icons in der Resource so eingepackt werden, dass Windows auch automatisch die Richtige Größe nimmt? Ich finde dazu nichts so richtig. Das soll mindestens ab Windows 7 funktionieren.

Thema: Windows globales Lautstärke-Level ermitteln
Am im Forum: Grafik und Sound

Zitat von Sir Rufo
Das Icon der Anwendung 16-256 Pixel
Das Icon einer Form 16-32 Pixel

So habe ich das jetzt auch gemacht und ich bin damit zufrieden.

Grundsätzlich stimmt aber wohl, was die anderen sagen, dass man das Icon einfach in mehreren Größen einpacken soll. Fraglich ist allerdings, ob Windows dann auch das Richtige auswählt. Ich vermute mal, dass in Windows Forms zumindest, die Standardgrößen, wie oben angegeben fest verankert sind und die Rechtlinien für Resourcen für Kacheln und Symbole nicht wirklich funktionieren. Zumindest wohl nicht unter Windows 7.

Thema: Windows globales Lautstärke-Level ermitteln
Am im Forum: Grafik und Sound

Anscheinend ist das wirklich ein Bug von Windows 7. Bei meiner Recherche im Internet bin ich darauf gestoßen. Ich habe das Problem jetzt so gelöst, dass ich die 256er Icons aus dem Hauptfenster entfernt und durch 32er Icons ersetzt habe. Damit past das im Audio-Mixer von Windows 7, der die Icons leider nicht skaliert. Das Programmsymbol hat dennoch eine 256er Auflösung, damit man auch große Symbole anzeigen kann.

Thema: Windows globales Lautstärke-Level ermitteln
Am im Forum: Grafik und Sound

Ich glaube damit geht das nicht. Da kann ich ja nur die Lautstärke der Sprachausgabe ermitteln.

Ich habe das jetzt mit NAudio gelöst. Damit kann ich den PeakLevel messen und da taste ich dann eine Sekunde (im 1/10-Sekunden-Takt) ab. Dann habe ich schon entsprechende Werte.

Allerdings ist mir aufgefallen, dass unter Windows 7 im Audio-Mixer das Icon meiner App nicht herunterskaliert wird, deshalb ist die ganze Oberfläche das Lautstärke-Mixers kaputt. Anscheinend ist das ein Fehler in Windows 7. Wie kann ich den denn umgehen, ohne mein Icon zu reduzieren? Ich nutze dafür 256x256 Punkte.

Thema: Windows globales Lautstärke-Level ermitteln
Am im Forum: Grafik und Sound

Hallo,

ich suche nach einer Möglichkeit unter Windows die globale Ausgabe-Lautstärke zu ermitteln. Hintergrund ist, dass ich einen Ton ausgeben will, der von der Lautstärke her abhängig von der aktuellen Ausgabe in Windows ist.

Das heißt ich suche KEINE Möglichkeit zu ermitteln, wie die Master-Lautstärke eingestellt ist, sondern ich will den Lautstärke-Level über einen kurzen Zeitraum messen. Ich bin mir nicht sicher, ob ich den Peak-Level auslesen will oder eher etwas anderes, weil ich die subjektiv empfundene Lautsärke ermitteln will.

Gibt es da Ansätze? Ist mit NAudio eine Lösung möglich?

Thema: Zwischenablage mit Sondertasten (TAB) in mehrere Felder einfügen
Am im Forum: GUI: Windows-Forms

Naja SendKeys kann doch ganze Strings versenden und mit WaitSendKeys wartet der doch auch noch auf die Rückmeldung ..... wofür wäre dann der Sleep noch notwendig? Kann man den mit SendKeys einfach ein Tab einfügen?

Thema: Zwischenablage mit Sondertasten (TAB) in mehrere Felder einfügen
Am im Forum: GUI: Windows-Forms

Ich möchte mittels eigenem Hotkey die Zwischenablage als Tastendruck einfügen. Hintergrund ist der, dass ich ein Webformular habe, was ich mit Zahlen füllen muss. Diese Zahlen habe ich bereits mit Tabulator-Taste getrennt (aus Excel VBA) in die Zwischenablage kopiert. Tabulator, deshalb, um ins nächste Feld zu gelangen.

Allerdings habe ich 2 Methoden probiert, die beide nicht funktionieren:

1. SendInput: Was muss ich bei den TAB-Tasten beachten? Den String aus der Zwischenablage einfach an SendInput zu schicken geht jedenfalls nicht. Im Texteditor geht es. In Excel klappt das schon nicht (alle Werte werden OHNE Tab in eine Zelle gepackt).

2. SendKeys: Klappt auch nicht, da bei dem 2. Aufruf von SendKeys die Funktion einfach nichts ausgibt.

Welche wäre denn eigentlich die Richtige Lösung, um die komplette Zwischenablage, so wie sie ist als Tastendrücke in einem aktiven Fenster/Formular/Anwendung zu simulieren?

Thema: Abfrage, ob keine Werte vorhanden
Am im Forum: Datentechnologien

Danke.. ich habe anscheinend den Wald vor lauter Bäumen nicht gesehen. BaseUser war null ...


@Abt:
Mir ist nicht ganz klar, was Du mir mitteilen möchtest.

1. Ich nutzte EF 5.0 und Net 4.5. Wieso soll ich downgraden?
3. Ist nur ein byte, kein Enum.

Prüft man lieber mit Any() oder mit Count() ?? Gibt es da Performance-Unterschiede?

Thema: Abfrage, ob keine Werte vorhanden
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: EF 5.0

Ich schaffe es nicht herauszufinden, ob Daten vorhanden sind oder nicht. Meine Abfrage sieht folegndermaßen aus:


_dbSet = context.Set<User>();
var set = _dbSet.Where(e => (e.BaseUser.UserId == user.BaseUser.UserId || e.UserId == user.BaseUser.UserId) && e.AccessLevel ≤ user.AccessLevel);

Allerdings kann es durchaus passieren, dass Where keine Werte zurückgibt. Aber wie kann ich das prüfen? Ich bekomme immer nur eine Exception "Die statische Methode erfordert ein Ziel".

if (set == null) funktioniert ja nicht. .. achja LazyLoading ist aktiviert.

Thema: Lebensdauer von DataContext / DbContext - Wie lange offen halten?
Am im Forum: Datentechnologien

@Abt: In diese Fall geht es ja nicht darum Änderungen zu verfolgen, sondern um darüber zu reden, warum die UnitOfWork oder auch der DbContext nur eine "kurze" Lebensdauer haben sollte.

Ich sehe halt einfach die Gefahr, dass ich die Daten ständig vom Server lade, obwohl das unnötig wäre. Auf der anderen Seite sehe ich die Aktualisierung der Datensätze nicht, wenn ich die UnitOfWork auf Dauer behalte und irgendwann ist auch die gesamte Datenbank im Speicher gecacht. ;)

Thema: Lebensdauer von DataContext / DbContext - Wie lange offen halten?
Am im Forum: Datentechnologien

Ich arbeite bereits mit UnitOfWork und Repositories.

Auch, wenn ich die Artikel lese, hilft es mir nicht weiter, da sich mir nicht genau der Grund erschließt. Im Falle von WPF geht es darum die UnitOfWork pro ViewModel zu "erneuern". Aber warum? Ist SqlChangeNotifier nicht die bessere Alternative?

Thema: EF 5: CodeFirst - ohne Designer arbeiten
Am im Forum: Datentechnologien

Danke .. umgesetzt .. funktioniert!

Thema: Benutzersteuerung in einer Datenbankanwendung
Am im Forum: Datentechnologien

zu 1.: MAn könnte ja auch durchaus dass Passwort für den Datenbankzugriff in einem Dialog übergeben und nicht speichern. Die Sicherheit wäre am höchsten, da nur die, die das PAsswort können auf die Db zugreifen können.

zu 2.: Wenn Du das in C# schreibst kannst Du doch einen "Passwort ändern" (Dialog) schreiben. Das Passwort sollte aber verschlüsselt in der Datenbank gespeichert werden, z.B. md5.

zu 3.: Entweder kommt jeder Benutzer seine individuellen Zugriffsrechte mittels eines Levels oder separate, die man ja auch in der Db speichern kann. Bestimmte Bereiche im Programm werden dann abhängig vom Level oder von den Rechten ausgeblendet.

Thema: Lebensdauer von DataContext / DbContext - Wie lange offen halten?
Am im Forum: Datentechnologien

Nach einigen Experimenten mit dem Context unter dem Entity Framework (mit SQL-Server) konnte ich feststellen, dass Änderungen der Datenbank erst dann bemerkt werden, wenn der Context verworfen und neu erzeugt wird. Das heißt das ETF cacht sozusagen alle geladenen Datensätze (LazyLoading ist aktiviert). Jetzt gab es verschiedene Ideen:

1. Der Context bleibt solange am Leben, wie quasi die Datenbank benötigt wird - im Zweifelsfall solange, wie die Anwendung läuft. Vorteil: Ein Datenzugriff passiert nur dann, wenn Änderungen erfolgen und NICHT bei jedem Anzeigen der Daten. Nachteil: Ich bemerke andere (externe) Änderungen der Daten nicht - könnte das aber z.B. mit einem ChangeNotifier abfangen.

2. Der Context wird für den einmaligen Datenzugriff erzeugt und dann wieder verworfen, bleibt also in meinem Beispiel unter WPF nur für das aktuelle ViewModel aktiv, danach wird er wieder verworfen. Vorteil: Die Daten sind meist aktuell. Nachteil: Ich muss bei jedem Öfnen eines ViewModels alle Daten von der Datenbank erneut laden. Wenn das ViewModel lange offen steht, kann es sein, dass Daten dennoch nicht mehr aktuell sind.

Welche Methode ist die bessere unter der Maßgabe, dass die Anbindung zur Datenbank auch übers Internet oder VPN laufen kann? Oder gibt es ganz andere Gedankenansätze?

Thema: EF 5: CodeFirst - ohne Designer arbeiten
Am im Forum: Datentechnologien

Code First wird ja immer populärer. Deshalb möchte ich auch diese variante nutzen. Allerdings stehe ich vor ein paar Herausforderungen, die einen das Leben nicht unbedingt leichter machen.

1. Ich mag den EDMX-Designer nicht, denn es ist leichter die Datenbank direkt zu erstellen, als über den Designer das Model und daraus die DB zu generieren. Gibt es eine Möglichkeit auch ohne EDMX-Designer die Datenbank aus dem Model (per Hand in C#) zu generieren?

2. Ich nutze GUIDs (NEWSEQUENTIALID) um mir die Möglichkeit einer eventuellen späteren Replikation der Datenbank zu ermöglichen. Nun ist es aber so, dass der Designer das nicht in dem Db-Skript umsetzen kann, weil er das auch nicht weiß (StoreGeneratedPattern ist gesetzt). Wie kann man das für alle Tabellen automatisieren, um nicht per Hand jedes mal das DB-Skript nachzuarbeiten?

Thema: Benutzt ihr #region und wenn ja habt ihr ein bestimmtes Schema?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ich nutze die Regionen konsequent. Dann weiß ich genau, wo ich was finde. Events bekommen eine seperate Region. Ich trenne zwischen privaten, öffentlichen und vererbten Methoden (override) und separiere die entsprechend.

Thema: Asynchrone Operation: ContinueWith führt die Operationen nicht im Haupt-Thread aus
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke. Beide Lösungen funktionieren auf ihrer eigenen Art.

Lösung von herbicore:
Ich habe darüber bereits in diesem Forum gelesen, war aber der Meinung, da ich das mit dem Event anstoße sollte es kein Problem sein. Deine Lösung funktioniert, wenn ich Invoke über das Codebehind der View ausführe. Allerdings nicht, wenn ich mich nicht im Control befinde. Das heißt für externe Shutdown oder Close-Klassen scheidet das aus. Oder kann man irgendwo den Hauptthread ermitteln und mit übergeben?

Lösung von Khalid:
Einfach umzusetzen, da ich die gesamte Methode abkapseln kann und nirgends weiter auf andere Threads achten muss.

Ich habe eine interessanet Möglichkeit gefunden mit Multithreading unter WPF zu arbeiten. Mit AsyncDelegateCommand. Das ist super und einfach. Allerdings gibt es wieder das Problem, wenn ich irgendwie zurück zur UI will brauche ich den Haupthread. Kann man den irgendwo ermitteln und übergeben? Und wie kann ich Invoke ausführen, wenn ich mich NICHT im UI befinde? Zum Beispiel in meiner Shutdown-Klasse:

Application.Current.Shutdown();

Thema: Asynchrone Operation: ContinueWith führt die Operationen nicht im Haupt-Thread aus
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich greife hier auf eine Datenbank zu. Damit mir das UI nicht blockiert und ich nebenbei auch noch was anzeigen kann starte ich den Datenbankzugriff asynchron.

Das Ganze funktioniert wunderbar. Allerdings wird das ContinueWith wohl in einem anderen Therad gestartet. Eigentlich sollte es aber im Hauptthread starten, wenn der andere Thread aus ValidDbAsync fertig ist. Denn spätestens beim Zugriff auf Close(), was dazu führt das an späterer Stelle das Fenster geschlossen wird, wird eine Exception ausgelöst. Die Frage ist also, wie kann ich das vermeiden?

		void TryLogin()
		{
			if (String.IsNullOrEmpty(LoginUsername)) {
				LoginErrorInfo = "Bitte einen Benutzernamen eingeben!";
				StartLogin();
			} else {
				LoginShown = false;
				IsBusy = true;
				// init unitofwork and check database
				InitUnitOfWork(DatabasePassword);
				// validate datebase and connection
				WorkUnit.ValidDbAsync().ContinueWith((t) => {
					IsBusy = false;
					if (t.Result == UnitOfWork.DbResult.DatabaseNotFound) {
						ShowDialog("Die Verbindung zu Datenbank konnte nicht hergestellt werden. Bitte prüfen Sie Ihre Internetverbindung oder probieren Sie es zu einem späteren Zeitpunkt erneut.",
							"Fehler", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK, ShutdownCallBack);
					} else if (t.Result == UnitOfWork.DbResult.IncorrectSchema) {
						ShowDialog("Die Programmversion ist veraltet. Aktualisieren Sie das Programm, um fortzufahren!",
							"Fehler", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK, ShutdownCallBack);
					} else if (t.Result == UnitOfWork.DbResult.UnknownOpenError) {
						ShowDialog("Unbekannter Fehler beim öffnen der Datenbank. Probieren SIe es zu einem späteren Zeitpunkt erneut!",
							"Fehler", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK, ShutdownCallBack);
					} else if (t.Result == UnitOfWork.DbResult.UserOrPasswordFailed) {
						LoginErrorInfo = "Der Sicherheitschlüssel ist nicht korrekt.";
						StartLogin();
					} else {
						// validate checkin
						User user = WorkUnit.Users.QueryFirst(u => u.UserName == LoginUsername);
						if (user != null) {
							if (String.Compare(user.Password, LoginPassword) == 0) {
								WorkUnit.LoginUser = user;
								Close();
							} else {
								LoginErrorInfo = "Das eingegebene Passwort ist falsch!";
								StartLogin();
							}
						} else {
							LoginErrorInfo = "Der Benutzername existiert nicht!";
							StartLogin();
						}
					}
				}, TaskContinuationOptions.OnlyOnRanToCompletion);
			}
		}

		public async Task<DbResult> ValidDbAsync()
		{
			DbResult result = DbResult.Ok;
			try {
				SqlConnection con = new SqlConnection(_context.Database.Connection.ConnectionString);
				await con.OpenAsync();
				con.Close();
			} catch (SqlException ex) {
				switch (ex.Number) {
					case 11001:
					result = DbResult.DatabaseNotFound;
					break;

					case 18456:
					result = DbResult.UserOrPasswordFailed;
					break;

					default:
					result = DbResult.UnknownOpenError;
					break;
				}
			}
			if (result == DbResult.Ok) {
				var versions = Versions.FirstOrDefault();
				if (versions != null) {
					if ((_majordbversion != versions.MajorVersion) || (_minordbversion != versions.MinorVersion)) result = DbResult.IncorrectSchema;
				}
			}
			return result;
		}

Thema: MVVM & PasswordBox: sinnvolle Lösung
Am im Forum: GUI: WPF und XAML

Also wieder was neues gelernt. Das Beispiel mit dem Event funktioniert soweit, alllerdings befindet sich dann zu viel Model Code im ViewModel. Außerdem ist natürlich die Frage, wie bekomme ich die PasswordBox dann nach mit IDataErrorInfo zum funktionieren. Das setzt ja ein Binding vorraus. Zumindest in meinem Beispiel.

Ich möchte ja angezeigt bekommen, wenn die Passwörter nicht übereinstimmen.

Thema: MVVM & PasswordBox: sinnvolle Lösung
Am im Forum: GUI: WPF und XAML

Ich versuche schon seit geraumer Zeit eine einfache Lösung für das Problem zu finden. Wie zum Teufel bekomme ich das Passwort in mein ViewModel. Das Passwort sollte nicht unverschlüsselt im Speicher liegen, demnach macht es keinen Sinn Dependency-properties zu nutzen, um das PW zu binden. Weiterhin ist es nicht möglich von meiner View (Codebehind) aufs Viewmodel zuzugreifen, um das verschlüsselte Passort (MD5) ans ViewModel zu übertragen. Wie kann man das Problem elegant lösen?

Thema: EntityFramework 5 - komplexe Queries
Am im Forum: Datentechnologien

Die Queries gehen ja auch problemlos. Aber eben nur mit den bereits beschriebenden Einschränkungen.

Gibt es denn eine gute Alternative zum EF? Es gibt ja doch immer wieder neue Haken, z.B.: CodeFirst oder DbFirst -> Handarbeit ist immer angesagt, wenn man die Db aus dem Model generieren will oder das Model aus der Db, weil entweder StoreGeneratedPattern im Model nachträglich gesetzt werden muss oder in dem Db-Skript der Default-Wert für den Primärschlüssel gesetzt werden muss, wenn man mit GuiIds arbeitet.

Thema: Validation mit mehreren Controls (IDataErrorInfo)
Am im Forum: GUI: WPF und XAML

Deien Hinweise haben mir geholfen, dass Problem zu lösen. Ich speichere jetzt alle "Fehlerstrings".. (ich muss die mal so nennen) in einem Dictionary und rufe PropertyChanged auf, wenn sich Änderungen ergeben. Die IDataErrorInfo-Schnittstelle bediene ich dann aus dem Dictionary. Das Ganze nutze ich jetzt als Basisklasse für meine Models.

Thema: EntityFramework 5 - komplexe Queries
Am im Forum: Datentechnologien

Das klingt alles logisch. Aber irgendwann muss ich ToList() aufrufen, sonst erhalte ich Fehlermeldungen, dass irgendwelche DataReader noch geöffnet sind - vermutlich weil der Lesevorgang noch nicht abgeschlossen ist.

Grundsätzlich geht es ja auch nicht darum mehrere Queries verschachtelt aufzurufen, sondern die komplexen überhaupt nutzen zu können.

Die FK-Spalte kann ich nicht zufügen, da im Model die "tabelle" ja garnicht mehr direkt vorhanden ist - es handelt sich hier wie gesagt nur um eine reine Join table, die keien FK enthalten darf. Gibt es den zu dem Thema noch weitere Quellen, wo ich mal lesen könnte?

Mir erschließt sich nur der Sinn nicht ganz. Wenn das EF so "bequem" entwickelt wurde, dass man eben diese Join-Tables ausblendet, wenn man Tabellen mit n:m - Beziehungen anspricht, dann stelle ich mir die Frage, wie man die überhaupt jemals filtern können soll, ohne alle Daten zu laden und die auf diem Client einzeln durch zu iterieren.

Thema: Validation mit mehreren Controls (IDataErrorInfo)
Am im Forum: GUI: WPF und XAML

Ja und genau da ist die Frage, wie stoße ich die Validierung der anderen Werte idealerweise an. Ich brauche ja ein PropertyChanged-Event, um die Validierung des Wertes durchzuführen und ggf. einen Fehlerstring zurückzugeben, der dann im View angezeigt wird. Oder sehe ich das falsch?

Thema: EntityFramework 5 - komplexe Queries
Am im Forum: Datentechnologien

Es geht aber nicht immer eine Id zu übergeben. Nämlich genau dann, wenn keine Id existiert, die ich abfragen könnte, da die Tabelle EmployeeOffice nur eine Join-Tabele ohne Ids ist und die in EF auch ausgeblendet wird.


var employees = WorkUnit.Employees.GetAll();
foreach (Employee employee in employees) {
	if (employee.Offices.Contains(CurrentOffice)) Employees.Add(employee);
}

In diesem Beispiel, muss ich alle Employees aus der Datenbank laden, nur um ein paar zu wählen, die diesem bestimmten Office zugeordnet sind. Sinnvoll wäre es die doch irgendwie in eine Query zu packen. Allerdings ist natürlich die Frage, ob das überhaupt in SQL so umsetzbar wäre, ohne alle Datensätze erst einmal zu laden.

Sinnvoll wäre doch:


var employees = WorkUnit.Employees.Query(e => e.Offices == CurrentOffice);

oder:


var employees = WorkUnit.Employees.Query(e => e.Offices.Contains(CurrentOffice));

Aber selbst, wenn ich die zerlege fällt mir keine Möglichkeit ein zu verhindern alle Datensätze zu laden.

Thema: [erledigt] Ef to Sql
Am im Forum: Datentechnologien

DU könntest es andersherum machen. Das Model nicht aus der Datenbank generieren, sondern die Datenbank aus dem Model generieren. Wenn ich es richtig verstanden habe, wolltest du ja ohnehin die Datenbank aus dem Code updaten.

Grundsätzlich sehe ich selten einen Sinn vom EF irgendwas zu SQL zu extrahieren. Dann macht es doch mehr Sinn gleich mit SqlConnection und SqlCommand zu arbeiten.

Thema: Validation mit mehreren Controls (IDataErrorInfo)
Am im Forum: GUI: WPF und XAML

Ich nutzte die IDataErrorInfo-Schnittstelle um meine Steuerelemente zu validieren. Nun möchte ich aber gleichzeitig mehrere Steuerelemente validieren, wenn die irgendwas mit einander zu tun haben. Einfaches Beispiel:

3 Textboxen: Die Zahlen 1, 1 und 2 sind deren Inhalt. Die Fehlerüberprüfung soll nun feststellen, wenn das Ergebnis nicht mehr oder es stimmt. Das heißt jetzt ist alles okay, sobald ich aber in dem Beispiel eine Textbox ändere sollen alle 3 einen Fehler melden.

| 1 | + | 1 | = | 2 |

Der UpdateSourceTrigger ruft ja die Validierung auf, wenn PropertyChanged eintritt, aber eben nur für die eine TextBox und nicht auch für die anderen. Ich könnte natürlich das PropertyChanged für die andren TextBoxen wären der Validierung aufrufen, aber dann befinde ich mich ja in einer Endlosschleife.

Habt ihr da einen Tipp?

Thema: EntityFramework 5 - komplexe Queries
Am im Forum: Datentechnologien

Das EF macht einen vieles leichter. Die Abfragen sind einfach und bringen schnell Ergebnisse. Aber wenn ich komplexe Abfragen machen möchte, dann geht das nicht. Beispiel:

_dbSet ist ein IDbSet<T>


public IEnumerable<T> Query(Expression<Func<T, bool>> filter)
{
	return _dbSet.Where(filter).ToList();
}

funktioniert:


var phones = WorkUnit.Phones.Query(e => e.UserId == CurrentUser.UserId);

funktioniert nicht, da nur primitive Typen unterschützt werden:


var phones = WorkUnit.Phones.Query(e => e.User == CurrentUser);

Das ist nur ein vereinfachtes Beispiel, da es mir nur um den Sinn an sich geht. Das Ziel soll ja auch sein sich von den Ids zu lösen und es gibt ja auch nicht immer ein Id-Spalte. Nämlich dann, wenn es um reine Jointabelle (Pure Join Table, PJT) handelt.

Habt ihr da eine Idee zu?

Thema: n:n Enities mit CheckBoxen
Am im Forum: GUI: WPF und XAML

Ich habe das inzwischen auch so ähnlich wie witte gemacht. Nur, dass ich die Zurodnung direkt in der Personal-Klasse mache und die manuell setzen kann. Sonst wird es wegen der Repositories un dem UnitOfWork etwas umständlich.


		void Load()
		{
			// load users
			Users.Clear();
			var users = WorkUnit.Users.Query(e => e.AccessLevel ≤ AccessLevelProperties.Level);
			foreach (User user in users) {
				Users.Add(user);
			}
			UserCollection.MoveCurrentToFirst();
			// load clubs
			Clubs.Clear();
			var clubs = WorkUnit.Clubs.GetAll();
			foreach (Club club in clubs) Clubs.Add(club);
			ClubCollection.MoveCurrentToFirst();
		}

		void LoadAssigns()
		{
			foreach (Club club in Clubs) {
				club.IsUserAssigned = (club.Users.Contains(CurrentUser)) ? true : false;
			}
			_assignsloaded = true;
		}

		void SaveAssigns()
		{
			if (!_assignsloaded) return;
			foreach (Club club in Clubs) {
				if ((club.IsUserAssigned) && (!club.Users.Contains(CurrentUser))) {
					club.Users.Add(CurrentUser);
				} else if ((!club.IsUserAssigned) && (club.Users.Contains(CurrentUser))) {
					club.Users.Remove(CurrentUser);
				}
			}
		}

LoadAssigns() und SaveAssigns() wird über CurrentChanging und CurrentChanged-Ereignisse der UserCollection gesteuert.

Thema: Dezimalen in SQL speichern
Am im Forum: Datentechnologien

Die Frage ist dann evtl. wie die Zahlen umgewandelt wurden?