2 Stimmen

Abbildung mit Entity Framework "code first"

Ich versuche, meine Entitäten mit Entity Framework "Code first" zu mappen, aber ich habe ein Problem mit dem Mapping eines komplexen Typs. Hier mein vereinfachtes Beispiel:

Das Domänenobjekt sieht wie folgt aus:

public class Customer
{
    public Address DeliveryAddress {get; set;}
}

public class Address
{
    public string StreetName {get; set;}
    public string StreetNumber {get; set;}
    public City City {get; set;}
}

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

und die Kartierung:

public class CustomerConfiguration : EntityConfiguration<Customer>
{
    public CustomerConfiguration()
    {
        this.HasKey(b => b.Id);
        this.Property(b => b.Id).IsIdentity();

        this.MapSingleType(x => new
        {
            Id = x.Id,
            DeliveryAddress_StreetName = x.DeliveryAddress.StreetName,
            DeliveryAddress_StreetNumber = x.DeliveryAddress.StreetNumber,
            DeliveryAddress_CityId = x.DeliveryAddress.City.Id, // this line causes an exception
        }).ToTable("Customer");
    }
}

public class AddressConfiguration : ComplexTypeConfiguration<Address>
{
    public AddressConfiguration()
    {           
        this.Property(b => b.StreetName).HasMaxLength(100).IsRequired().IsUnicode();
        this.Property(b => b.StreetNumber).HasMaxLength(6).IsRequired().IsUnicode();
}

public class CityConfiguration : EntityConfiguration<City>
{
    public CityConfiguration()
    {
        this.HasKey(b => b.Id);
        this.Property(b => b.Id).IsIdentity();
        this.Property(b => b.Name).IsRequired().HasMaxLength(200).IsUnicode();

        this.MapSingleType(x => new
        {
            Id = x.Id,
            Name = x.Name,
        }).ToTable("City");
    }
}

Die Ausnahme, die ausgelöst wird, lautet: "Der angegebene Schlüssel war nicht im Wörterbuch vorhanden.

Kann mir jemand helfen?

2voto

Devart Punkte 114874

Sie versuchen, den Entitätstyp "Standort" zum Typ "Adresskomplex" hinzuzufügen. Dies ist nicht möglich. Wie Entitäten bestehen auch komplexe Typen aus skalaren Eigenschaften oder anderen Eigenschaften komplexer Typen. Da komplexe Typen keine Schlüssel haben, können Objekte komplexen Typs vom Entity Framework nicht getrennt vom übergeordneten Objekt verwaltet werden.
Werfen Sie einen Blick auf die Artikel vom Typ Komplex für weitere Informationen.

0voto

Shiraz Bhaiji Punkte 62129

Ihre Adresskonfiguration verbindet die Adresse nicht mit der Stadt.

0voto

Seth Paulson Punkte 790

Die Klassenreferenz ist vorgesehen, wenn Sie die Navigationseigenschaften des Entity Frameworks nutzen wollen. Dazu sollten Sie Klassenreferenzen virtuell machen. In Address sollte die Eigenschaft City also virtuell sein. Auch für die Einfachheit der Einstellung (vor allem, wenn Sie MVC verwenden) sollten Sie den ID-Wert auf der Seite, die den Verweis wie folgt hält enthalten

public virtual City City {get; set;}
public int CityId {get; set;}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X