2015-03-22 2 views
5

Ich habe eine Klasse Einheit:Verwenden von EF6 Store-Funktionen für Entity Framework-Code, kann ich einen benutzerdefinierten Typ zurückgeben?

public class SomeClass { 
    public int Id { get; set; } 
    public int Value { get; set; } 
    public string Name { get; set; } 
} 

mit dem EF6 Store Functions for Entity Framework code-first von Moozzyk, ich Beispielcode sehen, die eine Funktion zu einem Entitätstyp abbildet.

Wenn ich jedoch einen Typ verwende, der noch nicht als Entität zugeordnet ist, erhalte ich eine Ausnahme, die besagt, dass der Typ kein gültiger Entitätstyp ist.

Beispiel:

[DbFunction("MyContext", "GetValueSum")] 
public IQueryable<SomeClassSummary> GetValueSum() 
{ 
    return ((IObjectContextAdapter)this).ObjectContext 
      .CreateQuery<SomeClassSummary>(string.Format("[{0}].{1}", GetType().Name, 
      "[GetValueSum]()")); 
} 

Wie kann ich Ausgang der Aufruf dieser Funktion auf einen bestimmten Typ?

Antwort

7

Der Typ, der zurückgegeben werden soll, muss Spalten haben, die wie die Funktion benannt sind. Wenn zum Beispiel die Funktion gibt Spalten:

Name nvarchar 
Sum int 

dann sollte SomeClassSummary sein:

public class SomeClassSummary { 
    public string Name { get; set; } 
    public int Sum { get; set; } 
} 

Dann im Kontext der Klasse als komplexer Typ hinzufügen:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.ComplexType<SomeClassSummary>(); 
    modelBuilder.Conventions.Add(new FunctionsConvention<MyContext>("dbo")); 
} 
+2

Complex war die bisschen ich wurde vermisst. Die CodeFirstStoreFunction-Dokumentation ist ein wenig Licht um diese, könnte wahrscheinlich mit ein paar Beispielen in der umfangreichen Dokumentation tun. – jolySoft

+1

DANKE! Ich stolperte über den Versuch, es als Entity hinzuzufügen. Das Hinzufügen als ComplexType hat es gelöst. – user3524983