Entité cadre optionnelle relation 1 à 1 aux deux extrémités

ef-code-first entity-framework entity-framework-6

Question

La plupart des questions que j'ai trouvées n'étaient pas du type que je cherchais.

J'ai 2 tables:

public class User
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid UserId { get; set; }

    public Guid? CustomerId { get; set; }

    [ForeignKey("CustomerId")]
    public Customer Customer { get; set; }
}

public class Customer
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid CustomerId { get; set; }

    public Guid? UserId { get; set; }

    [ForeignKey("UserId")]
    public User User { get; set; }
}

Un User peut exister sans être un Customer et un Customer peut exister sans être un User .

J'ai essayé l'API fluide comme ceci:

modelBuilder.Entity<Customer>()
    .HasOptional<User>(c => c.User)
    .WithOptionalDependent(c => c.Customer)
    .Map(c => c.MapKey("UserId"));

Mais cette erreur persiste lorsque j'essaie de créer la migration:

Customer_User_Source: : Multiplicity is not valid in Role 'Customer_User_Source' in relationship 'Customer_User'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'.

Mettre à jour

J'ai changé mon modèle pour ceci:

public class User
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid UserId { get; set; }

    public virtual Customer Customer { get; set; }
}

public class Customer
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid CustomerId { get; set; }

    public virtual User User { get; set; }
}

Avec l'API fluide:

modelBuilder
    .Entity<Customer>()
    .HasOptional(l => l.User)
    .WithOptionalPrincipal()
    .Map(k => k.MapKey("CustomerId"));

modelBuilder
    .Entity<User>()
    .HasOptional(c => c.Customer)
    .WithOptionalPrincipal()
    .Map(k => k.MapKey("UserId"));

Cela semble fonctionner, mais existe-t-il un moyen de définir la colonne dans le modèle au lieu d'utiliser MapKey ?

Réponse acceptée

Voir lien 1

Et lien 2 aussi

Le problème avec ces liens est que je ne sais pas s'ils fournissent une solution réelle au problème: je ne sais pas si cela fournit l'unicité de la clé étrangère dans les deux tableaux (comme ce lien l' indique). Parce que, n'ayant pas de contraintes spécifiques à EF, vous devez le créer manuellement (dans le générateur)

Enfin, link explique que la relation unique 1: * consiste à utiliser la clé étrangère de l’une des tables comme clé primaire de l’autre.

Bonne chance.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi