2011-10-19 1 views
0

J'ai deux tables Subscription et PackageType. Subs a FK comme PackageTypeId. Maintenant, lorsque j'insère un nouvel enregistrement dans la table Abonnement en utilisant EF 4.1, il lève une exceptionL'instruction INSERT était en conflit avec la contrainte FOREIGN KEY dans Entity Framework

L'instruction INSERT est en conflit avec la contrainte FOREIGN KEY "FK_Subscription_PaymentType". Le conflit s'est produit dans la base de données "MyDatabaseName", table "dbo.PaymentType", colonne 'Id'. La déclaration a été terminée.

informations tableaux sont:

Abonnement Tableau:

Id (PK) 

    PaymentTypeId (FK) 

    Period 

    date 

PaymentType:

Id (PK) 

    Name 

Et le code est donné ci-dessous:

public void Proceed(SubscriptionSessionData data) 
    { 

     if (data != null) 
     { 
      PMSCatalogEntities entities = new PMSCatalogEntities(); 

       Subscription subs = new Subscription(); 
       subs.Id = Guid.NewGuid(); 
       subs.ApplicableFrom = data.ApplicableFrom; 
       subs.TenantId = tenant.Id; 

       subs.PackageId = data.PaymentType; 
       subs.PaymentTypeId = data.PaymentType; 

       entities.AddToSubscriptions(subs); 
       entities.SaveChanges(); 

     } 
    } 

Toute idée sur ce iss ue?

+0

S'il vous plaît fournir le code qui fait cette insertion – Ankur

+0

Comment la table de PaymentType est liée ici, vous devez ajouter plus d'informations à partir de maintenant cela n'a aucun sens – V4Vendetta

+0

Ankur & V4Vendetta J'ai ajouté plus d'informations liées au code et mes tables. –

Répondre

0

Je l'ai déjà testé ce scénario et il fonctionne très bien:

class Program 
    { 
     static void Main(string[] args) 
     { 
      PMSCatalogEntities entities = new PMSCatalogEntities(); 

      Subscription subs = new Subscription(); 
      subs.Id = Guid.NewGuid(); 
      subs.Date = DateTime.Now; 
      subs.PaymentId = 1; 

      entities.Subscriptions.Add(subs); 
      entities.SaveChanges(); 
     } 
    } 

    public class PMSCatalogEntities : DbContext 
    { 
     public DbSet<Subscription> Subscriptions { get; set; } 

     public DbSet<Payment> Payments { get; set; } 

    } 

    public class Subscription 
    { 
     public Guid Id { get; set; } 

     public DateTime Date { get; set; } 

     public Payment Payment { get; set; } 

     public int PaymentId { get; set; } 
    } 

    public class Payment 
    { 
     public int Id { get; set; } 

     public string Type { get; set; } 
    } 

Et sur la DB

TABLE [dbo].[Payments](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Type] [nvarchar](max) NULL, 

TABLE [dbo].[Subscriptions](
    [Id] [uniqueidentifier] NOT NULL, 
    [Date] [datetime] NOT NULL, 
    [PaymentId] [int] NOT NULL, 

La seule chose que je dois être sûr est qu'un paiement avec Id 1 pour cette exemple est conservé sur la table Payments, et cela fonctionne comme un charme !!

0

Je l'ai vu récemment lorsque la relation utilisait les clés primaires de l'enregistrement parent et enfant ensemble, au lieu de la clé primaire et de la clé étrangère. Il y avait une indication sur le diagramme pour ceci que la cardinalité était erronée (1-> 0.1 au lieu de 1 -> *)

0

Etes-vous sûr que la valeur que vous affectez à subs.PaymentTypeId (data.PaymentType) est un ID valide d'un enregistrement existant dans la table PaymentType?

+0

Oui, j'ai vérifié dans le débogueur. –

0

Vous essayez d'insérer une valeur de clé primaire de table de référence incorrecte, qui n'est pas présentée dans la base de données.

Questions connexes