Распределение данных отношения один ко многим в .NET Core - PullRequest
0 голосов
/ 29 октября 2019

У меня проблемы с отправкой данных в мою базу данных по методу OnModelCreating.

Я хочу заполнить базу данных Странами , Состояниями и Города , но я не знаю, как это сделать, если у них есть отношения один ко многим .

Модели:

public class City
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public virtual State State { get; set; }
}

public class State
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public virtual ICollection<City> Cities { get; set; }
    public virtual Country Country { get; set; }
}

public class Country
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public virtual ICollection<State> States { get; set; }
}

Контекст:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // ....
        modelBuilder.Entity<State>()
            .HasMany(p => p.Cities)
            .WithOne(c => c.State)
            .IsRequired();

        modelBuilder.Entity<Country>()
            .HasMany(s => s.States)
            .WithOne(s => s.Country)
            .IsRequired();

        var BsAs = new State
        {
            Id = 1,
            Name = "Buenos Aires",
        };

        var Argentina = new Country
        {
            Id = 1,
            Name = "Argentina",
            States = new[] { BsAs }
        };

        modelBuilder.Entity<Country>(s => {
            s.HasData(Argentina);
            s.OwnsMany(e => e.States).HasData(BsAs);
        });
    }

Вышеприведенный код выдает:

Тип 'State' нельзя пометить как принадлежащий, поскольку он не принадлежиттип сущности с таким именем уже существует.

, когда я пытаюсь AddMigration .

Моя цель - заполнить базу данных одной страной и соответствующими ей государствами. и города.

1 Ответ

2 голосов
/ 29 октября 2019

Начало работы с EF Core и Отношения * На страницах 1004 * есть хороший пример отображения один-ко-многим.

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

В вашем случае a City должен иметь StateId, а State должен иметь CountryId.

public class City
{
    public int Id { get; set; }
    (...)
    public int StateId { get; set; }
    public State State { get; set; }
}

public class State
{
   public int Id { get; set; }
   (...)
   public int CountryId { get; set; }
   public Country Country { get; set; }
}

public class Country
{
    public int Id { get; set; }
}

EF Core Data Seeding содержит пример данных заполнения для одного-модель отношения ко многим.

modelBuilder.Entity<Blog>().HasData(new Blog {BlogId = 1, Url = "http://sample.com"});

modelBuilder.Entity<Post>().HasData(
    new Post() { BlogId = 1, PostId = 1, Title = "First post", Content = "Test 1" });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...