2011-10-19 39 views
0

2つのテーブルSubscriptionとPackageTypeがあります。 SubsはPackageTypeIdとしてFKを持ちます。今、EF 4.1を使用してサブスクリプションテーブルに新しいレコードを挿入しようとすると、例外がスローされますINSERTステートメントがEntity FrameworkのFOREIGN KEY制約と競合しました

INSERTステートメントがFOREIGN KEY制約"FK_Subscription_PaymentType"と競合しました。競合は、データベース "MyDatabaseName"、テーブル"dbo.PaymentType"、列'Id'で発生しました。 ステートメントが終了しました。

テーブル情報は、以下のとおりです。

サブスクリプション表:

Id (PK) 

    PaymentTypeId (FK) 

    Period 

    date 

PaymentType:

Id (PK) 

    Name 

とコードを以下に示すよう:これについて

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(); 

     } 
    } 

任意のアイデアiss ue?

+0

これを挿入するコードを入力してください – Ankur

+0

ここでPaymentTypeテーブルはどのように関連していますか、それ以上の情報を追加する必要があります。 – V4Vendetta

+0

Ankur&V4Vendettaコードとテーブルに関する詳細を追加しました。 –

答えて

0

私はすでに、このシナリオをテストしているし、それは素晴らしい作品:

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; } 
    } 

そして上

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, 

私は必ずしなければならない唯一のことはあり、このためのIDが1の支払い例はPaymentsテーブルに保持され、魅力的に機能します。

0

最近、主キーと外部キーではなく、親レコードと子レコードの主キーが一緒に使用されていました。この図では、基数が間違っていた(1 - > *の代わりに1 - > 0.130)

0

subs.PaymentTypeId(data.PaymentType)に割り当てる値は、 PaymentTypeテーブルの既存のレコードから有効なIDですか?

+0

はい、私はデバッガでダブルチェックしました。 –

0

データベースに表示されていない不正な参照テーブルの主キー値を挿入しようとしています。

関連する問題