2016-05-16 9 views
2

Ich versuche Dapper und Dapper-Extensions zu verwenden und meine enums in der Datenbank als string zu serialisieren.Dapper und Enums als Strings

Im Moment werden sie stattdessen als Integer (in einem Feld VARCHAR) serialisiert.

Gibt es eine Möglichkeit, dies zu tun? Jede benutzerdefinierte Art Zuordnung, die ich hinzufügen kann?

Ich brauche vielleicht wieder zu EF bewegen, wenn ich dies durch

.. nicht ziehen kann
+0

Mögliche Duplikat [Store Enum als String in der Datenbank] (http://stackoverflow.com/questions/6192512/store-enum-as-string-in-database) –

+1

Könnten Sie zeigen uns ein Beispiel bitte ? Es liegt an Ihnen, Dapper die korrekten Werte in den Parametern anzugeben. Können Sie auch eine Ganzzahl in einem Varchar-Feld speichern? Das scheint nicht richtig zu sein. – Rob

+0

Ich verwende Dapper Extensions - also habe ich keine Kontrolle über die Parameter. Auch - die Ganzzahl im varchar-Feld wird von Dapper gespeichert - ich finde "1" in der Datenbank - fügt am Morgen Codebeispiel hinzu. – MaurGi

Antwort

0

Dank Marc GRA Antwort:

Der einzige Weg ist, die Einsätze von Hand zu tun.

Sie sich auch die folgenden Beitrag: How do I perform an insert and return inserted identity with Dapper?

Im Folgenden meine Lösung.

Beachten Sie, dass automatisch ausgewählt wird: Sie können Dapper (Extensions) direkt GetList<T> verwenden, es ist keine Zuordnung zur Enum-Rückseite erforderlich.

public enum ComponentType 
{ 
    First, 
    Second, 
    Third 
} 

public class Info 
{ 
    public int Id { get; set; } 
    public ComponentType InfoComponentType { get; set; } 

    public static void SaveList(List<Info> infoList) 
    { 
     string ConnectionString = GetConnectionString(); 

     using (SqlConnection conn = new SqlConnection(ConnectionString)) 
     { 
      conn.Open(); 

      foreach (Info info in infoList) 
      { 
       string sql = @"INSERT INTO [Info] ([InfoComponentType]) 
           VALUES (@InfoComponentType); 
           SELECT CAST(SCOPE_IDENTITY() AS INT)"; 

       int id = conn.Query<int>(sql, new 
       { 
        InfoComponentType = info.InfoComponentType.ToString() 
       }).Single(); 

       info.Id = id; 
      } 

      conn.Close(); 
     } 
    } 
}