2012-03-25 12 views
0

Momentan verwendete ich geerbte DbContext-Classes, die DbSet <T> Mitglieder enthalten, um POCO-Objekte in der Datenbank zu speichern. Dies funktioniert gut für 'kompilierzeitbekannte' Klassen und ihre Strukturen.Benutzerdefinierte POCO-Objekte zu Tabelle

Jetzt habe ich eine Klasse wie

public class ResourceSet 
{ 
    public long Id 
    { 
     get; 
     set; 

    } 
    public long OwnerId 
    { 
     get; 
     set; 
    } 

    public double[] Resources 
    { 
     get; 
     set; 
    } 
} 

und würde es in eine Datenbank-Schema speichern möchten:

Id, ownerID, RES_1, Res_2, Res_3, ... (je nach Größe von Ressourcen, die während der Inbetriebnahme des Programms festgelegt werden).

  • Derzeit verwende ich CTP5 von EFCodeFirst
  • DbSet <ResourceSet> nicht natürlich. Indizierte Eigenschaften werden nicht unterstützt.
  • Ich möchte die .edmx Dateien

Meine Frage vermeiden:

Ist es möglich, einen Proxy/Wrapper/Transformation Klasse zu erstellen, die die Ressourcen Array in die Res_X Spalten abbildet. Hast du einen Hinweis in einem Dokument, wo ich anfangen kann?

LINQ zum Suchen in "Id" und "OwnerId" soll noch möglich sein, für Ressourcen ist es nicht notwendig.

Antwort

2

Wenn Resources in einer Linq-Abfrage nie benötigt werden, können Sie sie einer String-Backing-Eigenschaft zuordnen und dann in der Datenbank speichern.

public double[] Resources 
{ 
    get 
    { 
     var result = from r in ResourceString.Split(new string[] {";"}, StringSplitOptions.RemoveEmptyEntries) 
        select double.Parse(r); 

     return result.ToArray(); 
    } 
    set 
    { 

     ResourceString = string.Empty; 
     foreach (var d in value) 
     { 
      ResourceString += d + ";"; 
     } 
    } 
} 

private string ResourceString 
{ 
    get; 
    set; 
} 

Wenn Sie Ihren Entity Framework auf die neueste Version (Trog NuGet) aktualisieren und Ressourcen angeben, wie nicht sollte abgebildet alles funktionieren.

+0

'ResourceString' sollte' public' zugeordnet werden, oder? – Slauma

+0

Ziemlich clevere Lösung! Danke für den Hinweis. Aber ich möchte die Werte als Spalten haben ... Ich denke, ich werde DbConnection direkt für dieses Problem verwenden und EF überspringen. Oder gibt es einen schlaueren Weg, die Erstellung von SQL-Anweisungen zu vermeiden – UllaDieTrulla

Verwandte Themen