La mise à jour de clé Étrangère associations dans le Cadre de l'Entité de Code 4.1-Première
Je suis arrivé à une conclusion que je devais définir à la fois une Association Indépendante et la Clé Étrangère de l'Association dans Mon Code-Première conception. e.g:
public class Book
{
public int ID {get; set;}
public int AuthorID {get; set;}
[ForeignKey("AuthorID")]
public Author Author {get; set;}
}
-
Avec la définition ci-dessus, dois-je mettre à jour AuthorID lorsque je veux changer le livre de l'auteur, Ou tout simplement en utilisant la ligne ci-dessous est-elle suffisante?
myBook.Auteur = auteur; -
Que je vais avoir une exception nulle sur la ligne ci-dessus, si c'est la première fois que je suis à la définition d'un auteur pour le livre? (EF ne initialiser auteur du livre automatiquement quand je affecter une valeur pour elle?) Dois-je l'initialiser dans la définition:
Le code:
public class Book
{
public int ID {get; set;}
public int AuthorID {get; set;}
private Author m_Author;
[ForeignKey("AuthorID")]
public Author Author {get
{
get
{
if (m_Author == null)
m_Author = new Author();
return m_Author;
}
set
{
this.m_Author = value;
}
}
}
OriginalL'auteur Kamyar | 2011-04-19
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous ne pouvez pas utiliser les deux indépendant et la clé étrangère de l'association - vous utiliser la première ou à la seconde. La différence est que si vous utilisez FK bien ou pas. Si vous utilisez la clé étrangère de l'association, vous devez utiliser de clé étrangère pour construire une relation. C'est la raison pour laquelle FK association a été introduit dans EFv4.
Edit:
Exemple Simple pourquoi devriez-vous utiliser FK à la place de la navigation lors de l'utilisation d'personnalisée POCOs (commun à EFv4.1) et FK relations:
Cela fonctionne sans aucun problème:
Cela lève une exception:
Ce nouveau fonctionne sans problème:
OriginalL'auteur Ladislav Mrnka
L'exemple ci-dessous a le même problème:
Si je lier une propriété d'un Contrôle à la Joueur1nom propriété-je obtenir une NullPointerException. Dans la base de données, je peux voir la table et il semble avoir la bonne clé de valeurs.
Pour résoudre le problème il suffit de remplacer:
par
OriginalL'auteur Simon