0

私はEF6コードの最初のウォークスルーに従っており、自分のプロジェクトに合わせて少し修正しようとしましたが、データベースをシードする際に問題が発生しました。初期化子。イニシャライザと1対多ICollectionによるEF6シード処理

私は2クラスを作成しました:

プロパティモード:

namespace MyApp.Models 

{ 
    public class Property 
    { 
     public int ID { get; set; } 
     public string PropertyName { get; set; } 

     public virtual PropertyType PropertyType { get; set; } 
    } 
} 

とプロパティ型モード:

namespace MyApp.Models 
{ 
    public class PropertyType 
    { 
     public int ID { get; set; } 
     public string Type { get; set; } 

     public ICollection<Property> Properties { get; set; } 
    } 
} 

私の理解があるということです一対多これらの間の関係2.プロパティは1つのプロパティタイプにしかなりませんが、多くのプロパティは同じプロパティタイプを持つことができますか?

私はコンテキストを初期化して(以下のコードを使用して)データベースをシードしようとすると、しかし、私はエラーを取得:

public class MyAppInitializer : System.Data.Entity.DropCreateDatabaseIfModelChanges<MyAppContext> 
{ 
    protected override void Seed(MyAppContext context) 
    { 
     var propertytypedata = new List<PropertyType> 
     { 
      new PropertyType {ID = 1, Type="Villa" }, 
      new PropertyType {ID = 2, Type="Apartment" } 
     }; 

     propertytypedata.ForEach(p => context.PropertyType.Add(p)); 
     context.SaveChanges(); 

     var propertydata = new List<Property> 
     { 
      new Property {PropertyName="Property 1", PropertyType=1, } 
     }; 

     propertydata.ForEach(p => context.Property.Add(p)); 
     context.SaveChanges(); 
    } 
} 

問題は、私が上のプロパティタイプを設定しようとするということであり、私は播種していますプロパティは、それは言う:

Cannot implicitly convert type 'int' to 'MyApp.Models.PropertyType'

+0

'PropertyType = 1、'。 PropertyTypeは複雑なオブジェクトであり、整数ではありません。 –

答えて

1

例:

protected override void Seed(MyAppContext context) 
    { 
     var propertytypedata = new List<PropertyType> 
     { 
      new PropertyType {ID = 1, Type="Villa" }, 
      new PropertyType {ID = 2, Type="Apartment" } 
     }; 

     foreach(var propertyType in propertytypedata){     
      propertyType.Properties = new List<Property> 
      { 
       new Property {PropertyName="Property 1", PropertyType = propertyType, } 
      }; 
      context.PropertyType.Add(propertyType) 
     } 

     context.SaveChanges(); 
    } 

次の2つのseparatを必要としませんeが追加されます。 Entity Frameworkはサブコレクションをデータベースに追加します。そのプロパティにアクセスするたびに、ICollection<Property> Propertiesvirtualとマークすると、サブコレクションとして既にプロパティがロードされます。ロードしないと、include()が必要になります。

関連する問題