2010-12-28 11 views
11

Qualcuno sa di qualsiasi versione ottimizzata del modello POCO T4 che genera interfacce insieme alle classi? Ad esempio, se ho le entità Film e Attore nel file .edmx, ho bisogno di ottenere le seguenti classi e interfacce.C# POCO modello T4, generare interfacce?

interface IMovie 
{ 
    string MovieName { get; set; } 
    ICollection<IActor> Actors { get; set; } //instead of ICollection<Actor> 
} 

class Movie : IMovie 
{ 
    string MovieName { get; set; } 
    ICollection<IActor> Actors { get; set; } //instead of ICollection<Actor> 
} 

interface IActor 
{ 
    string ActorName { get; set; } 
} 

class Actor 
{ 
    string ActorName { get; set; } 
} 

Inoltre, nel caso in cui scrivo i miei soggetti, fa proxy POCO (li ho bisogno per il caricamento pigro) lavorare con le dichiarazioni di interfaccia come sopra indicato?

+0

Jonna, sarei molto interessato a sapere se hai avuto successo con il vostro approccio mentre si adatta il codice nella risposta seguente per la generazione dell'interfaccia POCO +. Stiamo cercando di utilizzare le interfacce allo stesso modo e non abbiamo ancora capito come procedere. Cordiali saluti, Timo –

risposta

4

È possibile modificare il modello T4 predefinito che genera le entità POCO per generare anche interfacce. L'ho fatto per un po 'di tempo su un progetto al lavoro. This link copre il succo di come l'abbiamo fatto. È relativamente facile.

Ecco uno snippet del nostro modello T4, potrebbe aiutare. Abbiamo inserito questo codice nel modello T4 predefinito che genera le entità POCO.

<# 
    GenerationEnvironment.Clear(); 
    string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);  
    string outputPath = Path.Combine(templateDirectory + @"..\..\Models\Interfaces\Repositories\IEntitiesContext.cs"); 
#> 

using System; 
using System.Data.Objects; 
using Models.DataModels; 

namespace Interfaces.Repositories 
{ 
    #pragma warning disable 1591 
    public interface IEntitiesContext : IDisposable 
    { 
    <# 
     region.Begin("ObjectSet Properties", 2); 

     foreach (EntitySet entitySet in container.BaseEntitySets.OfType<EntitySet>()) 
     { 
#> 
     IObjectSet<<#=code.Escape(entitySet.ElementType)#>> <#=code.Escape(entitySet)#> { get; } 
<# 
     } 
     region.End(); 

     region.Begin("Function Imports", 2); 

     foreach (EdmFunction edmFunction in container.FunctionImports) 
     { 
      var parameters = FunctionImportParameter.Create(edmFunction.Parameters, code, ef); 
      string paramList = String.Join(", ", parameters.Select(p => p.FunctionParameterType + " " + p.FunctionParameterName).ToArray()); 
      if (edmFunction.ReturnParameter == null) 
      { 
       continue; 
      } 
      string returnTypeElement = code.Escape(ef.GetElementType(edmFunction.ReturnParameter.TypeUsage)); 

#> 
    ObjectResult<<#=returnTypeElement#>> <#=code.Escape(edmFunction)#>(<#=paramList#>); 
<# 
     } 

     region.End(); 
#> 

     int SaveChanges(); 
     ObjectContextOptions ContextOptions { get; } 
     System.Data.Common.DbConnection Connection { get; } 
     ObjectSet<T> CreateObjectSet<T>() where T : class; 
    } 
    #pragma warning restore 1591 
} 
<# 
     System.IO.File.WriteAllText(outputPath, GenerationEnvironment.ToString()); 
     GenerationEnvironment.Clear(); 
#> 
+2

Questo T4 genererà un'interfaccia per il contesto, ma non sembra generare interfacce per le entità effettive (IMovie, IActor, ecc.), Giusto? –

+0

è possibile scaricare un esempio funzionante dei file T4 personalizzati per generare interfacce insieme alle classi: https://entityinterfacegenerator.codeplex.com/ – Believe2014

0

Qualcuno sa di qualsiasi versione ottimizzato di template POCO T4 che genera le interfacce con le classi?

Non esiste un supporto ufficiale di Microsoft sulla generazione di interfacce.

C'è una passeggiata che mostra come forzare Entity framework per implementare un'interfaccia. http://blogs.msdn.com/b/efdesign/archive/2009/01/22/customizing-entity-classes-with-t4.aspx

In alternativa, è possibile scaricare un esempio di lavoro dei file T4 personalizzati per generare interfacce insieme con le classi:

https://entityinterfacegenerator.codeplex.com/

Problemi correlati