2016-06-04 12 views
0

Ich verstehe nicht, warum komplexe Typen nicht erlauben, auf Entitätstypen zu verweisen. Ich meine, sie tun das, aber alle Eigenschaften des refrenced Entity-Typs werden dann in der gleichen Tabelle wie die Klasse mit den komplexen Typen gespeichert.Warum komplexe Typen nicht erlauben, Entitätstypen zu referenzieren

Ich sehe keinen Grund dafür und es ist eine große Einschränkung.

+1

Könnten Sie ein Beispiel, was Sie meinen ? – Rob

Antwort

1

Es scheint, Entity Framework kann nicht zwischen den referenzierten Entitäten unterscheiden. Zum Beispiel ist es nicht in der Lage Schlüssel zu ihnen automatisch zuweisen:

SQL Server Image

Die Datenbank in dem vorherigen Bild wurde mit dem folgenden Code erstellt:

static void CreateAndSeedDatabase() 
{ 
    Context context = new Context(); 
    ReferencedClass anotherClass1 = new ReferencedClass(){Name="instance1"}; 
    ReferencedClass anotherClass2 = new ReferencedClass() { Name = "instance2" }; 
    ComplexTypeClass complexType1 = new ComplexTypeClass(){ReferencedClassProp = anotherClass1}; 
    ComplexTypeClass complexType2 = new ComplexTypeClass() { ReferencedClassProp = anotherClass2 }; 
    Parent parent1 = new Parent() { ComplexTypeClassProp = complexType1 }; 
    Parent parent2 = new Parent() { ComplexTypeClassProp = complexType2 }; 
    context.Parents.Add(parent1); 
    context.Parents.Add(parent2); 
    context.SaveChanges(); 
} 

public class Context : DbContext 
{ 
    public Context() 
    { 
     Database.SetInitializer<Context>(new DropCreateDatabaseAlways<Context>()); 
     Database.Initialize(true); 
    } 

    public DbSet<Parent> Parents { get; set; } 

} 

public class Parent 
{ 
    public int Id { get; set; } 
    public ComplexTypeClass ComplexTypeClassProp { get; set; } 
} 

[ComplexType] 
public class ComplexTypeClass 
{ 
    public ReferencedClass ReferencedClassProp { get; set; } 
} 

public class ReferencedClass 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
}