2011-07-21 10 views
0

イニシャライザを使用してDBを設定しようとすると、いくつか問題が発生します。私はLabTest-> LabValue < -LabIndicator、3つのテーブルをしましたが、これは私がそれをコーディングする方法である:MVC 3、EF4、コードの最初のデータベースイニシャライザエラー

public class SummumnetDB : DbContext 
{ 
    public DbSet<LabIndicator> LabIndicators { get; set; } 
    public DbSet<LabTest> LabTests { get; set; } 
    public DbSet<LabValue> LabValues { get; set; } 

    public class MyFirstInitializer : DropCreateDatabaseIfModelChanges<SummumnetDB> 
    { 
    protected override void Seed(SummumnetDB context) 
    { 
      new List<LabTest> 
      { 
       new LabTest{ ApplicationDate = DateTime.Now}, 
       new LabTest{ ApplicationDate = DateTime.Now}, 
      }.ForEach(l => context.LabTest.Add(l)); 

      new List<LabIndicator> 
      { 
       new LabIndicator{ Name="CHOLESTEROL", Description = "Cholesterol lvl"}, 
       new LabIndicator{ Name="HEMOGLOBIN", Description = "Hemoglobin lvl"}, 
       new LabIndicator{ Name="GLUCOSE", Description = "Glucose lvl"}, 
      }.ForEach(l => context.LabIndicators.Add(l)); 

      new List<LabValue> 
      { 
       new LabValue{ LabTestID = 1, LabIndicatorID = 1, Value = 2.3m }, 
       new LabValue{ LabTestID = 1, LabIndicatorID = 2, Value = 5.8m }, 
       new LabValue{ LabTestID = 1, LabIndicatorID = 3, Value = 5.2m }, 
       new LabValue{ LabTestID = 2, LabIndicatorID = 1, Value = 6.7m }, 
       new LabValue{ LabTestID = 2, LabIndicatorID = 2, Value = 9.8m }, 
       new LabValue{ LabTestID = 2, LabIndicatorID = 3, Value = 4.3m }, 
      }.ForEach(l => context.LabValue.Add(l)); 

      base.Seed(context); 
    } 
} 

もの:

public class LabTest 
    { 
     public int ID { get; set; } 
     public DateTime ApplicationDate { get; set; } 
     public virtual ICollection<LabValue> LabValues { get; set; } 
    } 

public class LabValue 
    { 
     public int ID { get; set; } 
     public decimal Value { get; set; } 
     public int LabTestID { get; set; } 
     public int LabIndicatorID { get; set; } 
     public virtual LabTest LabTest { get; set; } 
     public virtual LabIndicator LabIndicator { get; set; } 
    } 

    public class LabIndicator 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
     public virtual ICollection<LabValue> LabValues { get; set; } 
    } 

これは私が私のDBContextで私のDbの初期化子をコード化する方法であります私はそれを実行すると、EFは、データベースを作成しようとすると、私はこのエラーが表示されます:

INSERTステートメントは、FOREIGN KEY制約 "LabIndicator_LabValues"と競合しました。競合はデータベース "SummumnetDB"、テーブル "dbo.LabIndicators"、列 'ID'で発生しました。 ステートメントが終了しました。どうもありがとうございます。

答えて

0

モデルバインドで何か問題が発生しているように思えます。モデルのバインダーを教えてください。あなたがそれを持っていない場合、あなたはそれを作成しようとする必要があります。さらに、インサート・ステートメントが実際に行っていることを知ることができます。

+0

new LabTest new LabIndicator new LabValue 

は、私はSQL Serverに移動して、挿入を行った場合は、手動でも問題はありません、それが正常に行われていますもちろんEFはデータベースの構造を正常に作成します。 dbを作成しても、それでもモデルバインダーを作成する必要がありますか?、thanxs;) –

0

インサートの順序が間違っていますか?

LabIndicatorには、既存のLabValueレコードへの参照が含まれています。

最後の2つのクラスについてSeedの注文を元に戻しましたか?

:私は、モデルバインダーを作成する必要がdidntは、この場合の

new LabTest 
new LabValue 
new LabIndicator 
関連する問題