Sorry, hätte vielleicht erwähnen sollen, dass die DependencyProperty von einem Control ist, was auf der View ist.
Bisher hatte ich das einfach uber eine direktes Binding in XAML gloest. Nun habe ich aber eine baseclass des Controls und diese soll als default an den EditCommand des ViewModels gebunden werden.
wie kann man denn ein default Binding fuer ein ICommand in einer DependencyProperty festlegen?
Mein Ziel ist ein default Binding zu dem "EditCommand" herzustellen, das EditCommand befindet sich auf dem ViewModel, meine base class kennt das ViewModel jedoch nicht.
new Binding("EditCommand"), steht als Platzhalter.
public ICommand DoubleClickCommand
{
get { return (ICommand)GetValue(DoubleClickCommandProperty); }
set { SetValue(DoubleClickCommandProperty, value); }
}
// Using a DependencyProperty as the backing store for DoubleClickCommand. This enables animation, styling, binding, etc...
public static readonly DependencyProperty DoubleClickCommandProperty =
DependencyProperty.Register("DoubleClickCommand", typeof(ICommand), typeof(DataGrid), new PropertyMetadata(new Binding("EditCommand")));
Mittlerweile ist die MSSQL auch auf eine SSD, was das Ganze schon ungemein schneller macht.
Das Problem, dass es immer langsamer wird, bleibt aber bestehen.
Meinen MYSQL Datenbank ist auch 1,5TB, daher hinkt der Verleich evtl. ein bisschen... ;-)
@T-Virus
Vielen Dank fuer den Hinweis, aber es ist nur eine Test Umgebung.
Einer der Tabellen enthaelt 500GB an Daten, da werde ich den Bulk Insert versuchen / anwenden.
ich importiere gerade 5 Mio. Datensaetze in 100.000er Schritten.
(Select aus MYSQL, Insert into im MSSQL)
Pro Durchgang dauert das ganze unglaubliche 11 Minuten.
Also der Import startete, lag die Dauer bei 4 Minuten.
Je groesser die Tabelle ist, desto langsamer wird der import.
Index oder Primary Key ist/sind keine vorhanden.
Ich habe festgestellt, dass die Schreibrate bei nur 3BM/s liegt.
RAM liegt bei 60% Auslastung, und die CPU hat so gut wie nichts zu tun.
Die beiden Datenbanken sind auf getrennten HDDs. (keine SSDs!)
Kopiere ich eine Datei im Explorer, liegt die Schreibrate deutlich ueber den 3MB/s.
Im Resource Monitor ist die Queue Length der HDD waehrend des INSERT INTO ganz am Anschlag.
Wie kann ich den SQL Server dazu bewegen, in INSERT INTO schneller zu machen? ;-)
Sorry fuer den Doppelpost!
Dachte ich mach einen Thread auf, da ich das Problem nun mehr eingegrenzt und besser beschrieben haben.
Was mir nicht in den Kopf will, dass ein Insert Into abhängig von der vorhandenen Datenmenge langsamer wird, auch wenn kein Index oder Trigger definiert sind und die Hardware noch deutlich mehr Resourcen zur Verfuegung stellen koennte.
Das wurde Quasi bedeuten, dass eine Tabelle mit Mio. von Records, keine Sinn macht?!
In einem SQL Script soll eine Schleife erzeugt werden, die den aktuellen Count als Parameter an ein weiteres SQL Script uebergibt. Das Script wird im SQL Management Studio im SQLCMD Query Modus aufgerufen.
Leider scheitere ich gerade an dem Parameter. (Zeile 10)
:SetVar CountScript ??
[Edit:]
Fehlermeldung:
Fehler
Incorrect syntax near '@Count'.
Habe bisher auch noch keine Info gefunden, wie man den Parameter als Variable uebergeben kann. Weiss das jemand von Euch?
:setvar path "c:\temp\"
DECLARE @Count int, @Max int
SET @Count = 0
SET @Max = 10
WHILE @Count < @Max
BEGIN
PRINT @Count
:SetVar CountScript @Count
:r $(path)\2ndScript.sql
SET @Count = @Count + 1
END
vielen Dank fuer den Tipp, das werde ich gleich testen!
Mittlerweile ist der Test mit den 100.000 Records auch fertig. Es hat sage und schreibe 13,5h gedauert.
10.000 Records dauerten nur 20Min.
Was auch interessant ist, die Tablle mit 100.000 Records hat in MSSQL eine Datengroesse von 15,3GB, der Index ist 5GB gross. Die komplette Tabelle mit 1,3Mio Records hat in MYSQL aber nur 8GB.
ich bin gerade dabei eine Datenbank mit 1,5TB von MySQL nach MSSQL zu konvertieren.
Ich verwende dazu SQL Scripts im SQL Management Studio und einen Link (MySQL) Server wie hier angegeben. Für jede Tabelle verwende ich ein Script.
Meine Test Umgebung ist:
MySQL 5.6.20
MSSQL 2017 (Developer)
Windows Server 2012R mit 8GB RAM. (etwa 4 GB stehen zur Verfügung)
Beide Datenbanken sind auf dieser Maschine lokal installiert.
Bei kleinen Tabelle oder wenn ich das MySQL Select Statement auf eine gewisse Anzahl begrenze (z.B. 1.000 oder 10.000) funktioniert die Konvertierung schnell. Erweitere ich aber die Anzahl die Sätze wird es sehr langsam.
Ich habe ein paar Test gemacht, u. A.:
10.000 Datensätze benötigen etwa 10x so lange wie 1.000 und 1.000 etwa 10x so lange wie 100.
Bei 100.000 trifft das leider nicht zu. (Diese Tabelle hat eine Größe von 8GB und 1.3 Mio. Datensätze)
Ich habe das Gefühl, dass sobald die Größe (In MB) der Datensätze die Größe meines Arbeitsspeichers überschreitet, diese Problem eintrifft.
Kann das jemand bestätigen? Bin für jeden Tipp dankbar!
Grüße,
Manullino
bisher habe ich meine WPF Anwendungen zusammen mit einem WCF Service Layer erstellt. Nun moechte ich allerdings auch Xamarin & ASP verwenden. Wuerdet Ihr da weiterhin auf WCF als Service Layer setzen?
Wie sind Eure Erfahrungen mit WEB API oder SingalR z.B.?
hab das nun recht simpel mit einem statischen Konstruktor im DBContext umgesetzt. Darin wir der SQL Server gepingt, klappt das nicht, wird der andere SQL Server verwendet.
falls EF die Verbindung zur Datenbank verliert, sollte ein Fallback Datenbank verwendet werden. Habt Ihr Erfahrungen wie das mit EF 6 umgesetzt werden kann?
Mir geht es nur um den Switch von DB1 zu DB2, dass die Daten dann noch synch. werden muessen, ist ein anderes Thema.
Es ist ja wohl mehr als logisch, dass ich offline keine Daten in der Clould speichern kann.
Alles was ich will, ist die Moeglichkeit lokal zu arbeiten, wenn ich offline bin. Danach sollen die Daten wieder mit Azure abgeglichen werden. Jeder kennt das doch von zig Apps die man selbst verwendet.
Habe oben bereits geschrieben, dass die Azure DB hinter einem Webservice sein soll.
Zitat
Wie von Euch beschrieben, soll die Kommunikation mit Azure auch per Webservice stattfinden.
Nur ist eben die Fragen, wie das mit dem lokalen cachen funktioniert, bzw. wie die lokalen Daten in die Clould kommen, wenn der Client offline ist. Offline DB für ein Webservice sozusagen.
vielen Dank für die Nachricht. Jetzt ist mir klar warum wir ein bisschen aneinander vorbei gesprochen haben. Es lag am Wort "synchronisieren".
Du würdest die Azure Daten lokal cachen, ich will die lokalen Daten zu Azure synchronisieren. Im Endeffekt ist es das selbe, die Daten sollen im Server und auf dem Client die selben sein.
Vielleicht habe ich auch deshalb kaum etwas bei Google gefunden, weil ich nach „synchronisieren“ gesucht haben.
Hast Du etwas zur Hand, wie man Azure Daten lokal cachen kann?
Ist das jetzt gut oder schlecht, wenn sich fast 2 Jahren nichts mehr auf GitHub getan hat?!
Meine konkrete Problematik/Frage:
Eine UWP/Android/IOS App hat eine (via EF Core angebundene) lokale offline Datenbank, diese möchte ich mit einer Azure Datenbank synchronisieren. Wie stellt man das an?
Vielen Dank zur Erläuterung der Architektur, das war aber gar nicht die Frage. ;)
Wie von Euch beschrieben, soll die Kommunikation mit Azure auch per Webservice stattfinden.
Nur wie wird/soll die Synchronisation umgesetzt werden, da finde ich eben nur den Verweis zu AzureMobileService?! Das ist das eigentliche Problem.
Gibt des denn eine Alternative zu AzureMobileService, wenn man eine lokale Datenbank mit Azure DB synchronisieren will?
Hintergrund: Ich habe mit EF Core und dem .NET Standard 2.0 Projekt Type eine Basis Library erstellt die ich unabhängig von der verwendeten GUI verwenden koennte. Ich mochte eine App für Windows (WPF), Anriod und IOS entwickeln.
Den MySQL Query habe ich gefixt, es lag am IFNULL().
SELECT usName, CreateT, ChangeT, IF(DelT = '0000-00-00 00:00:00',CAST(NOW() AS DATETIME),DelT) AS DelT FROM Users
Allerdings gibt OPENQUERY fuer das Feld DelT nun einen falschen Wert (varbinary) zurueck.
0x323031372D31322D31322031323A35333A3338
Erwartet wird aber DateTime()
SELECT * FROM OPENQUERY(MYSQL, 'SELECT usName, CreateT, ChangeT, IF(DelT = "0000-00-00 00:00:00",CAST(NOW() AS DATETIME),DelT) AS DelT FROM Radex.Users')
nach langer Zeit habe ich nun mal wieder ein bisschen Freiraum fuer WPF. :)
Hierzu habe ich gleich mal eine Frage bzgl. Localization.
Ich nutze eine Extension um in XAML meine String zu uebersezten.
Hier auf Codeplex beschrieben: Klick
Nun wuerde ich den Code gerne in eine Basisklasse (z.B. des Label oder des Buttons) verschieben, damit ich nicht jedes mal die Extension "lex:Loc" tippen muss, ist das moeglich?