2015-03-22 3 views
5

devo una classe di entità:Utilizzo delle funzioni di archivio EF6 per Entity Framework in base al codice, è possibile restituire un tipo personalizzato?

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

utilizzando il EF6 Store Functions for Entity Framework code-first da Moozzyk, vedo codice di esempio che associa una funzione per un tipo di entità.

Tuttavia, quando si utilizza un tipo che non è già mappato come entità, viene visualizzata un'eccezione che indica che il tipo non è un tipo di entità valido.

Esempio:

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

come posso uscita il richiamo di quella funzione per un tipo specifico?

risposta

7

Il tipo da restituire deve avere colonne uguali a quelle della funzione. Ad esempio, se la funzione restituisce colonne:

Name nvarchar 
Sum int 

poi SomeClassSummary dovrebbe essere:

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

Poi, nel contesto, aggiungere la classe come un tipo complesso:

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

ComplexType era il un po 'mi mancava. La documentazione di CodeFirstStoreFunction è un po 'di luce intorno a questo, probabilmente potrebbe fare con alcuni esempi nella vasta documentazione. – jolySoft

+1

GRAZIE! Stavo inciampando nel tentativo di aggiungerlo come entità. L'aggiunta come ComplexType l'ha risolto. – user3524983