web-dev-qa-db-fra.com

API EF Fluent First Fluent spécifiant la propriété Clé étrangère

J'ai une classe AgentBalance avec une association à Agent, donc:

public class AgentBalance
{
    ...

    public int AgentId { get; set; }

    public virtual Agent Agent { get; set; }

}

AgentId est détecté comme le FK pour la relation d'agent par convention, mais je veux le rendre explicite dans la classe Mapping, pour être plus sûr contre les changements futurs. Si l'agent avait une collection de soldes, je sais comment faire, par exemple:

HasRequired(t => t.Agent).WithMany(a => a.Balances).HasForeignKey(t => t.AgentId);

Cependant, l'agent ne possède pas possède une collection d'équilibres - je ne veux pas que cette association soit inversée. Mais sans le .WithMany dans le mappage, je n'ai pas la possibilité de spécifier .HasForeignKey. Y a-t-il un autre moyen? (N.B. Je sais que je pourrais également faire cela en utilisant des attributs, mais je veux utiliser le mappage d'API fluide).

42
Richard Pawson

Je pense que vous devriez pouvoir faire ceci:

HasRequired(t => t.Agent).WithMany().HasForeignKey(t => t.AgentId)
64
SOfanatic

Je préfère utiliser les annotations de données pour ces tâches, pas l'API Fluent. Il est beaucoup plus court et facile à comprendre. EF doit détecter automatiquement les propriétés terminées par "Id", mais pour être sûr, vous pouvez les spécifier explicitement:

using System.ComponentModel.DataAnnotations.Schema;
...
public int AgentId { get; set; }

[ForeignKey("AgentId")]
public virtual Agent Agent { get; set; }

Vous devrez les spécifier explicitement si vos accessoires FK ne se terminent pas par "Id", par exemple:

public int AgentCode { get; set; }

[ForeignKey("AgentCode")] // now this is needed if you'd like to have FK created
public virtual Agent Agent { get; set; }

Vous pouvez trouver plus de détails ici: https://msdn.Microsoft.com/en-us/data/jj591583.aspx

1
fifonik