10.26.2016

EF liefert falsche Werte aus View auf SQL-Server

Manchmal liefert das EF falsche Werte aus einer View, die sich auf dem SQL-Server befindet (eventuelle auch aus anderen DBs, keine Erfahrung).

Das Problem wird durch fehlende bzw. falsche Entitäts-Schlüssel verursacht. Wenn das EF keine PrimaryKeys erkennt - und manchmal erkennt es auch die vorhandenen Keys in einer View nicht - dann wird ein ComponentKey aus allen nicht nullable Properties gebildet. Und der ist sowohl inhaltlich beliebig falsch als das er auch zu falschen Daten führt.

Abhilfe schafft die manuelle Korrektur der Entitätschlüssel im EF-Diagramm.

Hier noch eine Möglichkeit, wenn die View eigentlich keinen Schlüssel bietet. Diese verwendet eine Zeilennummer als Key (isnull(ROW_NUMBER() OVER (ORDER BY xy),-1) as rId). Isnull ist notwendig, da sonst die Zeilennummer manchmal nullable ist.

Das Verhalten kann komplett vermieden werden, wenn man eine Stored Procedure zwischenschaltet. Diese erlaubt auch das Sortieren der Daten.

9.20.2016

Sicherer Filename

VB:


Imports System.IO

Namespace Helper

    Public Class FileNameHelper
        Public Shared Function GetSafeFilename(filename As StringAs String
            Return String.Join("_", filename.Split(Path.GetInvalidFileNameChars()))
        End Function
    End Class
End NameSpace

c#

public string GetSafeFilename(string filename) 

return string.Join("_", filename.Split(Path.GetInvalidFileNameChars())); 
}

Kopierversionen:

Imports System.IO Namespace Helper Public Class FileNameHelper Public Shared Function GetSafeFilename(filename As String) As String Return String.Join("_", filename.Split(Path.GetInvalidFileNameChars())) End Function End Class End Namespace

public string GetSafeFilename(string filename) { return string.Join("_", filename.Split(Path.GetInvalidFileNameChars())); }

8.18.2016

VS kopieren der Build-Ergebnisse in bestimmten Ordner

Relativ zur Solution:
xcopy $(TargetDir)*.*  $(SolutionDir)..\dlls\ /y


Absolutes Ziel:
xcopy $(TargetDir)*.*  c:\dlls\ /y
 

5.24.2016

VS2013 meldet "EditorPackage does not load correctly"

Unter

%LOCALAPPDATA%\Microsoft\VisualStudio\12.0
das Verzeichnis ComponentModelCache löschen.

4.28.2016

WPF - Kultur in Bindings nutzen

Folgende Zeile muss in der App.cs im OnStartup ergänzt werden:
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

4.21.2016

IP-Adresse des Client in einem Web.API 2.x Controler ermitteln

Nach dem Einbinden von System.ServiceModel funktioniert folgender Code:


private string GetClientIp(HttpRequestMessage request = null)
       {
           request = request ?? this.Request;

           if (request.Properties.ContainsKey("MS_HttpContext"))
           {
               return ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
           }
           else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
           {
               RemoteEndpointMessageProperty prop = (RemoteEndpointMessageProperty)this.Request.Properties[RemoteEndpointMessageProperty.Name];
               return prop.Address;
           }
           else if (HttpContext.Current != null)
           {
               return HttpContext.Current.Request.UserHostAddress;
           }
           else
           {
               return null;
           }
       }

1.14.2016

WPF Listbox mit bleibender Markierung

Auch wenn ein anderes Element den Focus bekommt, bleibt der Eintrag "aktiv" markiert.

Events als Behaviors / Events in MVVM

Für WPF:
Verweis auf Microsoft.XAML.Interactions notwendig
...
xmlns:i=http://schemas.microsoft.com/expression/2010/interactivity
...
<i:Interaction.Triggers>


<i:EventTrigger EventName="Loaded">


<i:InvokeCommandAction Command="{Binding LoadedCommand}" />


</i:EventTrigger>


</i:Interaction.Triggers>


Für WinPhone 8.1:
Verweis auf Behaviors SDK (XAML)
...
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"


xmlns:core="using:Microsoft.Xaml.Interactions.Core"
...
<interactivity:Interaction.Behaviors>


<core:EventTriggerBehavior EventName="Tapped">


<core:InvokeCommandAction Command="{Binding RufeNummerAnCommand, Mode=OneWay}"/>


</core:EventTriggerBehavior>


</interactivity:Interaction.Behaviors>

1.13.2016

Veröffentlichen von ASP.NET Web-API RESTService per FileCopy

Vorbereitung des Codes

  1. Im Projektmappenexplorer von VisualStudio das Webserver-Projekt rechtsklicken
  2. Neues "Custom"-Profil anlegen
  3. Publis method:"File System" wählen und Pfad angeben
  4. Assistent bis zu Ende benutzen
  5. Inhalt des Zielverzeichnisses auf den Server kopieren, auf dem der IIS läuft

Vorbereitung des IIS

Neue Website einrichten deren physikalischer Pfad auf das Verzeichnis verweist, in dem der Code auf dem Server liegt.