2012-02-23 4 views
0

間違った順序でデータベースに追加します。順序はどのように定義されていますか?EFコードファースト:私はコンテキストにいくつかの項目を追加しましたが、項目が追加されているので、私は、私は推測参照整合性エラーを取得していますDatabaseInitializerの「種子」メソッドのオーバーライドに播種項目について、インサートの注文

デシベルは、私がデータに何か問題がないと思うので、生成された後、私は生のSQLをDBに項目を追加することができます。

など。

  new List<PropertyType> 
      { 
       new PropertyType {Name = "Text"}, 
       new PropertyType {Name = "Colour"}, 
       new PropertyType {Name = "Image"} 
      }.ForEach(e => context.PropertyTypes.Add(e)); 

     base.Seed(context); 

     new List<Property> 
      { 
       new Property {Name = "font", PropertyTypeId = 1}, 
       new Property {Name = "colour", PropertyTypeId = 2}, 
       new Property {Name = "background-image", PropertyTypeId = 3} 
      }.ForEach(e => context.Properties.Add(e)); 

     base.Seed(context); 

私は最初のシードを単独で実行することができます。 2番目のシードで参照整合性エラーが発生します。全く単純な関係。インサートの

public class Property 
{ 
    [Key] 
    public int PropertyId { get; set; } 

    [Required, StringLength(100)] 
    public string Name { get; set; } 

    [Required] 
    public int PropertyTypeId { get; set; } 
    public PropertyType PropertyType { get; set; } 
} 

public class PropertyType 
{ 
    [Key] 
    public int PropertyTypeId { get; set; } 

    [Required, StringLength(50)] 
    public string Name { get; set; } 

    public IList<Property> Properties { get; set; } 
} 
+0

'base.Seed'は何ですか? –

+0

基本クラスのSeedの呼び出しです。私はそれを取り除こうとしました。違いはありません。私はどこかを読んで、それを呼び出すと上記のコードでエラーを捕まえることができると思っていますが、私はそうは思いません。 –

+0

それはあなたの親クラスがどのイニシャライザであるかによって異なります。デフォルトの初期化子はこのメソッドを空にします。また、「第二の種」とはどういう意味ですか?その2つの部分は一緒に実行されていますか? –

答えて

2

を使って、RAW SQLでデータをシードすることができます...

  new List<PropertyType> 
      { 
       new PropertyType 
        { 
         Name = "Text", 
         Properties = new List<Property> {new Property {Name = "font"}} 
        }, 
       new PropertyType 
        { 
         Name = "Colour", 
         Properties = new List<Property> {new Property {Name = "color"}} 
        }, 
       new PropertyType 
        { 
         Name = "Image", 
         Properties = new List<Property> {new Property {Name = "background-image"}} 
        } 
      }.ForEach(e => context.PropertyTypes.Add(e)); 
0

注文はお使いのモデルによって定義されます。データベースに参照制約がある場合、リレーション(ナビゲーションプロパティ)の制約を反映するようにモデルを正しく設定する必要があります。それ以外の場合は、EFはこれらの制約を認識しません。

あなたは私が探していたが、この作品はない、まさにcontext.Database.ExecuteSqlCommand

+0

さて、私はそれが動作するとは確信していないと私はcontext.Database.ExecuteSqlCommandを実行した後、同じエラーのように見えた。例外が非常に一般的であるため、エラーが何であるかを知ることは困難です。 –

+0

ああはい、私は、SQLの例外とその参照整合性エラーが見つかりました。 –