Contrainte d'Intégrité référentielle violation lors de la tentative de définir un FK à null
Je suis en train de mettre à jour une entité dans EF6. J'ai lu que si je veux changer une ForeignKey bien, je puis vous assurer la Propriété de Navigation est la bonne, ou la valeur null.
J'ai pris la valeur null approche, mais je reçois encore la Contrainte d'Intégrité Référentielle Exception:
A referential integrity constraint violation occurred: The property value(s) of 'Contact.idContact' on one end of a relationship do not match the property value(s) of 'Entity.id_EntityContactInfo' on the other end.
Mais vous pouvez le voir dans le débogueur, cette Entité.Le Contact est null, alors je crois que cela ne devrait pas être jeter.
Des Idées?
MODIFIER
C'est la façon dont l'entité est mise à jour:
public T CommitUpdate<T>(T obj) where T : class
{
_DbContext.Set<T>().Attach(obj);
_DbContext.Entry(obj).State = EntityState.Modified;
_DbContext.Commit();
return obj;
}
Pouvez-vous essayer de définir le FK id de la valeur à null?
Mais j'ai besoin de l'ID, et le compilateur l'habitude de permettre que son
Il vous suffit de modifier la valeur de l'id sans la mise à jour de la valeur liquidative de la propriété.
Si je change la valeur de l'ID de celui que je veux, je reçois l'exception. Si je change la valeur de l'ID de celui que je veux et définissez la valeur liquidative de la Propriété null, je reçois l'exception.
Si vous avez FK valeur de l'id qui est non nullable et vous avez FK propriété que vous avez mis à null? Cela signifie que le Contact est nécessaire, non? Pouvez-vous vérifier si le FK colonne dans la base de données est nullable ou pas ?
Mais j'ai besoin de l'ID, et le compilateur l'habitude de permettre que son
Non-Null
Il vous suffit de modifier la valeur de l'id sans la mise à jour de la valeur liquidative de la propriété.
Si je change la valeur de l'ID de celui que je veux, je reçois l'exception. Si je change la valeur de l'ID de celui que je veux et définissez la valeur liquidative de la Propriété null, je reçois l'exception.
Si vous avez FK valeur de l'id qui est non nullable et vous avez FK propriété que vous avez mis à null? Cela signifie que le Contact est nécessaire, non? Pouvez-vous vérifier si le FK colonne dans la base de données est nullable ou pas ?
OriginalL'auteur Simon | 2014-08-15
Vous devez vous connecter pour publier un commentaire.
De ce que je vois de commentaires, vous êtes à la résolution de ce problème:
Vous devriez avoir la cartographie quelque chose comme ceci:
Que FK est déclaré comme étant de ne pas accepter les valeurs null, vous devez le configurer.
Fondamentalement, vous avez plusieurs options pour le faire:
Ensemble
ContactId
de nom réel dans la base de données, définissezContact
nullDans ce cas, vous allez mettre à jour FK avec Contact existant dans DB - espérons-le, l'option dont vous avez besoin.
Ensemble
ContactId
à 0, et de définirContact
ànew Contact(..)
Dans ce cas, EF va essayer de créer de nouvelles
Contact
en DB d'abord, puis de l'utilisation de son PK pour nourrirContactId
FK.Créer vide
Contact
entité, l'ensemble de ses ID de contact ID. Ensuite, utilisez cette entité comme un champ de Contact pour votre entité en question. Fixez ensuite queContact
de contexte avec Inchangé état.Avoir cette, vous dire à EF que ce Contact est déjà existants, ne doivent pas être suivis et ne doit pas être changé, mais son ID sera utilisé comme FK pour votre entité mère. Il suffit de prendre soin que ce Contact doit être joint (à l'identique de l'état) dans le même contexte que son parent.
OriginalL'auteur Lanorkin
J'ai eu un problème similaire, vous pouvez essayer ceci:
Contact.ContactId
à la valeur désirée.new object()
.espérons que cela fonctionne pour vous.
OriginalL'auteur Mu'men Tayyem