0

Я прохожу сначала по EF6-коду и стараюсь немного его адаптировать к моему собственному проекту, но у меня возникла проблема при посеве базы данных инициализатор.EF6 посев через инициализатор и один-ко-многим ICollection

Я создал 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(); 
    } 

Вам не нужно два separat добавляет. Entity Framework добавит подкаталог в базу данных. Всякий раз, когда вы получаете доступ к этому типу свойств, теперь он будет иметь свойства в качестве уже существующей подкатегории, если вы отметите ICollection<Property> Properties как virtual, иначе вам нужно будет include() его при загрузке.

Смежные вопросы