2012-03-29 6 views
6

ich eine Entity in der Code Erstes Entity Framework, die derzeit wie folgt aussieht:Entity Framework - Wiederverwendung komplexer Typ

public class Entity 
{ 
    // snip ... 

    public string OriginalDepartment { get; set; } 
    public string OriginalQueue { get; set; } 

    public string CurrentDepartment { get; set; } 
    public string CurrentQueue { get; set; } 
} 

Ich mag würde komplexen Typen für diese Typen als so etwas schaffen:

public class Location 
{ 
    public string Department { get; set; } 
    public string Queue { get; set; } 
} 

ich möchte diese gleiche Art verwenden, um sowohl aktuelle als auch Original:

public Location Original { get; set; } 
public Location Current { get; set; } 

Ist dies möglich, oder tun Ich muss zwei komplexe Typen CurrentLocation und OriginalLocation erstellen?

public class OriginalLocation 
{ 
    public string Department { get; set; } 
    public string Queue { get; set; } 
} 

public class CurrentLocation 
{ 
    public string Department { get; set; } 
    public string Queue { get; set; } 
} 

Antwort

7

Es wird von Anfang an unterstützt, Sie müssen nicht zwei komplexe Typen erstellen.

Sie können auch Ihre komplexe Typen explizit mit Modellbauer

modelBuilder.ComplexType<Location>(); 

konfigurieren, um Spaltennamen anpassen, können Sie sie von übergeordneten Einheit Konfiguration

public class Location 
{ 
    public string Department { get; set; } 
    public string Queue { get; set; } 
} 

public class MyEntity 
{ 
    public int Id { get; set; } 
    public Location Original { get; set; } 
    public Location Current { get; set; } 
} 

public class MyDbContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.ComplexType<Location>(); 

     modelBuilder.Entity<MyEntity>().Property(x => x.Current.Queue).HasColumnName("myCustomColumnName"); 
    } 
} 

Diese MyEntity.Current.Queue-myCustomName Spalte abbildet

konfigurieren sollte
+0

Ich denke, ich bin mir nicht sicher, wie es aus der Box unterstützt wird. Die 'ComplexTypeConfiguration ' Klasse hat eine 'Property()' Methode, die mich auffordert, einen Spaltennamen anzugeben. Der Spaltenname wird für jeden – Dismissile

+0

unterschiedlich sein. Ich denke, ich sollte klarstellen, dass ich die Spaltennamen für beide komplexen Typen anpassen kann. Wird das unterstützt? – Dismissile

+0

Möchten Sie sie nur mit einem anderen Präfix versehen oder vollständig angepasst haben? – archil

Verwandte Themen