EF Core Navigation Property Cycle - PullRequest
       78

EF Core Navigation Property Cycle

0 голосов
/ 30 апреля 2018

Рассмотрим следующее

Модели:

public class Blog
{
    public Guid ID {get; set;}
    public string Name {get; set;}
    // more fields...

    // Navigation Property
    public IList<Post> Posts {get; set;}
}

public class Posts
{
    public Guid ID {get; set;}
    public Guid BlogID {get; set;}
    public string Author {get; set;}
    // more fields...

    // Navigation Property
    public Blog Blog {get; set;}
}

In DbContext.OnModelCreating :

// Primary Keys
modelBuilder.Entity<Blog>()
            .HasKey(c => c.ID);

modelBuilder.Entity<Post>()
            .HasKey(c => c.ID);

modelBuilder.Entity<Blog>()
            .HasMany(c => c.Posts)
            .WithOne(c => c.Blog)
            .HasForeignKey(c => c.BlogID)
            .HasPrincipalKey(c => c.ID);

modelBuilder.Entity<Post>()
            .WithOne(c => c.Blog)
            .HasMany(c => c.Posts)     
            .HasForeignKey(c => c.BlogID)
            .HasPrincipalKey(c => c.ID);

Это все работает, проблема в том, что я получаю Блог , который содержит Пост , который содержит Блог , который содержит список Сообщений каждый из которых содержит блог и так далее.

enter image description here

Как я могу ограничить это определенным уровнем вложенности? Я проверил документы и не смог найти решение.

1 Ответ

0 голосов
/ 30 апреля 2018

Я не думаю, что вы можете ограничить это вообще. Но я также не думаю, что это может вызвать какие-либо проблемы.

EntityFramework работает с navigation properties, заменяя (переопределяя) их функциональные возможности фактическим запросом к базе данных. Этот подход называется LazyLoading.

Это означает, что каждый раз, когда вы получаете доступ к свойству, он просто вызывает базу данных и приносит вам данные, и может делать это вечно, как вы и просили.

Надеюсь, это объясняет?

Дополнительное объяснение можно найти здесь .

Привет

...