EF Zusammengesetzten Schlüssel, der fluent-API
Ich versuche die Karte einen zusammengesetzten Schlüssel für eine Entität.
public class Customer
{
public int CustomerId { get; set; }
public virtual List<CustomerImage> CustomerImages { get; set; }
}
Und seine Karte:
public class CustomerMap : EntityTypeConfiguration<Customer>
{
public CustomerMap()
{
HasKey(t => t.CustomerId);
ToTable(DbConstants.k_CustomersImageTable);
}
}
Einem Bild:
public class Image
{
public int ImageId { get; set; }
}
Und seine Karte:
public class ImageMap : EntityTypeConfiguration<Image>
{
public ImageMap()
{
HasKey(t => t.ImageId);
ToTable(DbConstants.k_ImagesTable);
}
}
Und die navigation Immobilie:
public class CustomerImage
{
public int CustomerId { get; set; }
public int ImageId { get; set; }
public virtual Customer CustomerRelated { get; set; }
public virtual Image ImageRelated { get; set; }
}
Und seine Karte:
public class CustomerImageMap : EntityTypeConfiguration<CustomerImage>
{
public CustomerImageMap()
{
HasKey(t => new { t.CustomerId, t.ImageId });
Property(t => t.CustomerId).IsRequired().HasColumnOrder(0);
Property(t => t.ImageId).IsRequired().HasColumnOrder(1);
HasRequired(t => t.ImageRelated).WithMany().HasForeignKey(x => x.ImageId);
HasRequired(p => p.CustomerRelated)
.WithMany(p => p.CustomerImages)
.WillCascadeOnDelete(false);
ToTable(DbConstants.k_CustomersImageTable);
}
}
Aber ich bekomme immer folgende exception:
Einen oder mehrere Fehler bei der Validierung festgestellt wurden, während Modell-generation:
System.Daten.Entität.Edm.EdmEntityType: : EntityType 'CustomerImage' hat keine definierten Schlüssel. Definieren Sie den Schlüssel für diese EntityType.
System.Daten.Entität.Edm.EdmEntitySet: EntityType: "EntitySet 'CustomerImages' basiert auf Typ 'CustomerImage', die hat keine Tasten definiert.
Jedoch, wenn ich definieren Sie den composite-Schlüssel mit Daten-Anmerkungen, die ist nicht sehr schön, es funktioniert perfekt:
public class CustomerImage
{
[Key, Column(Order = 0)]
public int CustomerId { get; set; }
[Key, Column(Order = 1)]
public int ImageId { get; set; }
}
Und seine Karte:
public class CustomerImageMap : EntityTypeConfiguration<CustomerImage>
{
public CustomerImageMap()
{
ToTable(DbConstants.k_CustomersImageTable);
}
}
Habe ich versucht, viele Variationen der Definitionen, aber keiner scheint zu funktionieren.
Irgendeine Idee? Ist es EF bug?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es stellte sich heraus, dass ich einfach vergessen haben setzen Sie die Karte auf der DbContext:
Sagte, die composite-Id noch nicht aufgefüllt, auf die $Metadaten auf diese Weise. Und so mit Daten annotaion dies ist die Metadaten, die generiert:
Allerdings, wenn mit fluent-API anstelle von Daten Anmerkung, das wichtige ist, nicht erzeugt überhaupt.
Warum?