Ich habe zwei Einheiten User
und Profile
. Jede dieser Entitäten erbt von einer Entity
Klasse, die eine Id
Eigenschaft enthält. Die Beziehung zwischen dem Benutzer und dem Profil ist eine Eins-zu-Eins-Beziehung. Ich versuche, die gleiche ID zu verwenden, die für die Benutzer-Entität erstellt wurde, die ID für die Profil-Entität, d. H. User.Id == Profile.Id
.Entity Core FluentAPI - Eine ID als Primär- und Fremdschlüssel
Ich habe versucht, dies mit FluentAPI zu tun, aber ich kann nicht. Ich habe diese question gelesen und lese auch diese post, aber ich bin immer noch nicht in der Lage, eine Lösung für mein Problem zu finden. Hier
ist der Code für meine Entitäten:
public class Entity<TKey> : IEntity
{
/// <summary>
/// Unique identifier for this entity.
/// </summary>
public virtual int Id { get; set; }
}
public class User : Entity<int>
{
public virtual Profile ProfileItem { get; set; }
}
public class Profile : Entity<int>
{
}
Hier meine Versuche sind so weit, in dem alle fehlgeschlagen:
Diese Zuordnung einer
ProfileItemId
in derUser
Tabelle erzeugt:modelBuilder.Entity<User>().HasOne(u => u.ProfileItem) .WithOne() .HasForeignKey<Profile>(p => p.Id) .IsRequired() .OnDelete(DeleteBehavior.Cascade);
Ich habe versucht, ein in Vers Navigationseigenschaft in der
Profile
Einheit fürUser
. DieUser
Tabelle korrekt abgebildet, sondern eineUserId
Säule wurde dieProfile
Tabelle hinzugefügt:modeBuilder.Entity<User>().HasOne(u => u.ProfileItem) .WithOne(u => u.User) .HasForeignKey<Profile>(p => p.Id) .IsRequired() .OnDelete(DeleteBehavior.Cascade);
Die einzige Lösung für dieses Problem wie in der Frage berichtet, dass ich bereits erwähnt, ist, dass Sie hinzufügen müssen eine inverse Eigenschaft und verwenden Sie dann Datenanmerkungen. Ich habe folgendes versucht und es hat funktioniert:
public class Entity<TKey> : IEntity
{
/// <summary>
/// Unique identifier for this entity.
/// </summary>
public virtual int Id { get; set; }
}
public class User : Entity<int>
{
[InverseProperty("User")]
public virtual Profile ProfileItem { get; set; }
}
public class Profile : Entity<int>
{
[ForeignKey("Id")]
public virtual User User { get; set; }
}
Wie bekomme ich das gleiche um mit FluentAPI zu arbeiten?
Alle Ihre Versuche außer der letzten (Doppel-Mapping) sind korrekt und sollten funktionieren. Stellen Sie nur sicher, wenn Sie '.WithOne()' verwenden, gibt es keine Referenznavigationseigenschaft 'User' in' Profile'. Versuchen Sie, das Problem in einem sauberen Projekt zu reproduzieren (weil ich nicht kann - alles funktioniert wie erwartet) und wahrscheinlich finden Sie die Ursache. –
Wenn ich die Benutzereigenschaft aus dem Profil entferne, wird eine Spalte ProfileItemId in der Benutzertabelle erstellt. – ykh
Ich entfernte die dritte Studie von meiner Frage ... – ykh