Entity Framework 5 - Suppression D'Enregistrements Enfant

VS 2012 (11.0.60315.01 mise à Jour 2), C# 5, Entity Framework 5.0.0.0 (Runtime v4.0.30319)

Je sais que des questions similaires ont été publiés dans le passé, mais il ne semble pas y avoir de réponse. Je crois que je comprends l'erreur, mais je suis plus intéressé à trouver le 'désiré' solution. Tout ce que je veux faire est de supprimer un enregistrement de la table Enfant. Quelqu'un peut-il aider?

C'est un plein et simple exemple. Le SaveChanges() jette l'exception suivante:

"L'opération a échoué: La relation ne peut pas être changé parce que l'un ou plusieurs de la clé étrangère propriétés est pas les valeurs null. Lorsqu'une modification est apportée à une relation, la clé étrangère de la propriété est définie sur une valeur null. Si la clé étrangère ne prend pas en charge les valeurs null, une nouvelle relation doit être définie, la clé étrangère de la propriété doit être attribuée à une autre valeur non nulle, ou sans rapport avec l'objet doit être supprimé."

Le code ressemble à ceci:

using System.Linq;

namespace EFDeleteTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (EFTestEntities context = new EFTestEntities())
            {
                var parent = context.Parents.Single(p => p.Id == 1);

                var child = parent.Children.Single(c => c.Id == 1);

                parent.Children.Remove(child);

                context.SaveChanges(); //Throws the above Exception
            }
        }
    }
}

La Base de données ressemble à ceci:

Parent
    Id   (PK, int, not null)   IDENTITY
    Name (nvarchar(50), null)

Child
    Id       (PK, int, not null)  IDENTITY
    ParentId (FK, int, not null)  -- Foreign Key to the Parent Table (Id column))
    Name     (nvarchar(50), null)

Il y a un enregistrement dans la table Parent (Id = 1) et il y a 2 enregistrements dans la table Enfant (Id 1 et 2). Les deux enregistrements de l'Enfant ont un ParentId = 1.

Vous devez inclure plus de balises dans votre question, comme C#, VS2012 balises etc. Vous obtiendrez plus de points de vue et les réponses de cette façon.

OriginalL'auteur Rob L | 2013-06-12