Сначала используйте динамическое свойство навигации или BaseEntity в коде EF - PullRequest
0 голосов
/ 14 февраля 2019

Этот вопрос может быть простым, но логика важна, и я запутался в этом.В Asp.Net Core 2.1 с Entity Framework Core Code First я хочу научиться моделировать, поэтому я упростил задачу.Одно и то же свойство навигации (Фото) в двух разных объектах (Центр и Статья).Центр может иметь много фотографий, а статья может иметь одну фотографию.Фотография может иметь один пост или один центр, поэтому может иметь один MyEntityBase.Пример:

public class Photo
{
    public int Id { get; set; }
    public string Url { get; set; }

    //The question/relation problem is here???
    //public int CenterId { get; set; }
    //public virtual Center Center { get; set; }

    //public int ArticleId { get; set; }
    //public virtual Article Article{ get; set; }

    //public int MyEntityBaseId { get; set; }
    //public virtual MyEntityBase ArticleOrPost{ get; set; }
}

public class Article: MyEntityBase
{
    [Key]
    public int Id { get; set; }

    public string Title { get; set; } 

    //Common Photo property
    //One article has one photo
    public virtual Photo ArticlePhoto { get; set; }

}
public class Center: MyEntityBase
{
    [Key]
    public int Id { get; set; }

    public string Name{ get; set; } 

    //Common Photo property
    //One center has many photo
    public virtual List<Photo> CenterPhotos { get; set; }

}  

1 Ответ

0 голосов
/ 14 февраля 2019

На первый взгляд, если вы используете Entity Framework Core ... не используйте virtual

, поэтому ваш объект Article должен выглядеть следующим образом

public class Article: MyEntityBase
{
    [Key]
    public int Id { get; set; }

    public string Title { get; set; } 

    public int ArticlePhotoId { get; set; }

    //Common Photo property
    //One article has one photo
    public Photo ArticlePhoto { get; set; }

}

ваш фотообъектВыглядит корректно с CenterId строкой под ним, удаляя virtual

в вашем объекте Center, используйте ICollection вместо List

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

Редактировать: Что касается virtual, если вы используете отложенную загрузку, то, похоже, он поддерживается, но для его настройки необходима конфигурация.Сначала я хотел бы сделать все как можно проще и убедиться, что это работает, а затем добавить ленивую загрузку.

ссылка: свойство навигации должно быть виртуальным - не требуется в ef core?

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