Как добавить данные в базу при создании?

Добрый день, есть 2 модели:
public class Service : EntityBase
    {
        public Guid Id { get; set; }
        public override string H1 { get; set; }
        public virtual Category Category { get; set; }
    }

[Owned]
    public class Category : EntityBase
    {
        public Guid Id { get; set; }
    }

Хочу сделать чтобы при добавлении таблицы так же создавалась связь между этим моделями т.е. заполнялось поле public virtual Category Category { get; set; }
В AppDbContext добавил:
public DbSet<Entities.Service> Services { get; set; }
public DbSet<Entities.Category> Categories { get; set; }
        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);


            builder.Entity<Entities.Service>(b =>
            {
                b.HasData(new Entities.Service
                {
                    Id = new Guid("666599D8-EAC4-4F43-9F15-B7063C583B76"),
                    Url = "usluga-1",
                    H1 = "Услуга 1"
                });
                b.OwnsOne(x => x.Category).HasData(new Category
                {
                    Id = new Guid("309035C6-9489-41CA-A395-717243880814"),
                    Url = "default",
                    H1 = "По умолчанию",
                });
            });
        }

но при создании миграции выдаётся ошибка
The seed entity for entity type 'Category' cannot be added because there was no value provided for the required property 'ServiceId'.
Не понимаю при чём тут ServiceId если полю задаётся объект, в общем как прописать связь?
  • Вопрос задан
  • 470 просмотров
Решения вопроса 1
Wintego
@Wintego Автор вопроса
Нужно было создать объект анонимного типа чтобы в CategoryId можно было прописать значение, при этом само поле CategoryId создавать не нужно, модель остаётся той же
builder.Entity<Category>().HasData(new Entities.Category
            {
                Id = new Guid("309035C6-9489-41CA-A395-717243880814"),
                Url = "default",
                H1 = "По умолчанию"
            });
            builder.Entity<Entities.Service>().HasData(new
            {
                Id = new Guid("666599D8-EAC4-4F43-9F15-B7063C583B76"),
                Url = "usluga-1",
                H1 = "Услуга 1",
                CategoryId = new Guid("309035C6-9489-41CA-A395-717243880814")
            });
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kttotto
пофиг на чем писать
Связь указывается либо через атрибуты, либо через fluent api, это легко гуглится. У Вас связь одни ко многим, один сервис имеет много категорий, поэтому EF при создании таблиц добавит поле ServiceId в таблицу Category. По-видимому, Вам надо явно указать туда id сервиса для связи данных, для этого в модель Category это поле нужно добавить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы