2010-12-28 5 views
11

Kennt jemand eine gezwickt Version von POCO T4-Vorlage, die Schnittstellen mit Klassen erzeugt? das heißt, wenn ich Film und Schauspieler Einheiten in .edmx Datei haben, muss ich die folgenden Klassen und Schnittstellen bekommen.C# POCO T4 Vorlage, Schnittstellen generieren?

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; } 
} 

Auch für den Fall, ich meine eigene Einheiten zu schreiben, hat POCO-Proxys (Ich brauche sie für ein träges Laden) mit den Interface-Deklarationen wie oben gezeigt?

+0

Jonna, würde ich am meisten daran interessiert zu hören, wenn Sie Erfolg mit Ihrem Ansatz haben während Sie den Code in der folgenden Antwort für die Generierung der POCO + -Schnittstelle anpassen. Wir beschäftigen uns mit der Verwendung von Schnittstellen auf die gleiche Weise und haben noch nicht herausgefunden, wie das geht. Mit freundlichen Grüßen, Timo –

Antwort

4

Sie können die Standard-T4-Vorlage bearbeiten, die auch Ihre POCO Einheiten erzeugt, um Schnittstellen zu generieren. Ich habe das vor einer Weile bei einem Projekt bei der Arbeit gemacht. This link deckt die jist, wie wir es gemacht haben. Es ist relativ einfach.

Hier ein Ausschnitt aus unserer T4-Vorlage ist, könnte helfen. Wir haben diesen Code in die Standard-T4-Vorlage eingefügt, die die POCO-Entitäten generiert.

<# 
    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

Diese T4 wird eine Schnittstelle für den Kontext erzeugen, aber es scheint nicht, Schnittstellen für die eigentlichen Einheiten zu erzeugen (IMovie, IActor, etc.), nicht wahr? –

+0

können Sie ein funktionierendes Beispiel für die benutzerdefinierten T4-Dateien herunterladen, um Schnittstellen zusammen mit Klassen zu generieren: https://entityinterfacegenerator.codeplex.com/ – Believe2014

0

Hat jemand eine gezwickt Version von POCO T4-Vorlage kennen, die Schnittstellen mit Klassen erzeugt?

Es gibt keine offizielle Unterstützung von Microsoft zum Generieren von Schnittstellen.

Es gibt einen Spaziergang durch das zeigt, wie Entity Framework zu zwingen, eine Schnittstelle zu implementieren. http://blogs.msdn.com/b/efdesign/archive/2009/01/22/customizing-entity-classes-with-t4.aspx

Alternativ können Sie ein funktionierendes Beispiel für die kundenspezifischen T4-Dateien herunterladen Schnittstellen generieren zusammen mit Klassen:

https://entityinterfacegenerator.codeplex.com/