Механизм заполнения EF Core не работает с отношениями - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь просто заполнить две таблицы EF core 3, но это не работает. Это такая маленькая операция, но кажется, что EF не может это сделать.

Модель объекта

public class Object
    {
        [Key]
        public int Id { get; set; }

        [Required]
        public string Name { get; set; }

        [ForeignKey("Building")]
        public int BuildingId { get; set; }

        public Building Building { get; set; }
    }

Модель здания

public class Building
    {
        [Key]
        public int Id { get; set; }

        [Required]
        public string Name { get; set; }

        public virtual List<Object> Objects { get; set; }
    }

Класс контекста

public class AppDatabaseContext : DbContext
    {
        private static readonly DbContextOptions options = new DbContextOptionsBuilder<AppDatabaseContext>().UseInMemoryDatabase("INMEM-DB").EnableSensitiveDataLogging().Options;

        public AppDatabaseContext() : base(options)
        {

        }

        public DbSet<Building> Buildings { get; set; }

        public DbSet<Object> Objects { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Object>().HasOne(i => i.Building).WithMany(b => b.Objects);
            modelBuilder.Entity<Building>().HasMany(b => b.Objects).WithOne(i => i.Building);*/


            Building testBuilding = new Building()
            {
                Id = 1,
                Name = "Test Building"
            };

            modelBuilder.Entity<Building>(b =>
            {
                b.HasData(testBuilding);
            });


            modelBuilder.Entity<Object>(o =>
            {
                o.HasData(new Object()
                {
                    Id = 1,
                    Name = "Test Object",
                    Building = testBuilding,
                });
            });
        }
    }

Сообщение об ошибке

System.InvalidOperationException: 'Начальный объект для Тип сущности «Объект» со значением ключа «Id: 1» не может быть добавлен, поскольку для него установлена ​​навигация «Строительство». Для заполнения отношений необходимо добавить начальный объект связанной сущности в «Building» и указать значения внешнего ключа {'BuildingId'}. '

Почему это не работает? Пожалуйста, помогите мне. Я собираюсь отследить sh всю эту чушь и переписать ее в Java (что будет намного быстрее).

1 Ответ

1 голос
/ 03 февраля 2020

Как и в сообщении об ошибке: «Чтобы заполнить отношения, вам нужно добавить начальный объект связанной сущности в« Построение »и указать значения внешнего ключа»

В EF у вас есть «Свойства внешнего ключа» и « Свойства навигации ". Для большинства операций вы можете использовать любой из них, но EF Core Data Seeding требует, чтобы вы непосредственно установили значение внешнего ключа.

   modelBuilder.Entity<Object>(o =>
    {
        o.HasData(new Object()
        {
            Id = 1,
            Name = "Test Object",
            //Building = testBuilding,
            BuildingId = 1 
        });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...