EF создает в базе данных столбец реляционного идентификатора, который не является частью модели - PullRequest
2 голосов
/ 26 февраля 2020

У меня есть эта модель:

public class Project
{
    public int Id { get; set; }
    public int? ParentId { get; set; }
    // some more properties...

    public List<Project> ChildProjects { get; set; }
}

В базе данных создан столбец "ProjectId", который используется для отслеживания связи с родительским проектом.

Так как «ProjectId» не является частью сущностной модели, я не могу ссылаться на него в своих запросах.

Как я могу предотвратить создание этого столбца и использовать вместо него «ParentId»?

ОБНОВЛЕНИЕ

Это мой DbContext:

public class ProjectsDbContext : DbContext
{
    public ProjectsDbContext(DbContextOptions<ProjectsDbContext> options) : base(options) { }

    public DbSet<Project> Projects { get; set; }
}

1 Ответ

2 голосов
/ 26 февраля 2020

ProjectId - это обычное имя свойства EK Core FK - {Entity Name}{Entity PK Property Name}.

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

modelBuilder.Entity<Project>()
    .HasManye(e => e.ChildProjects)
    .WithOne()
    .HasForeignKey(e => e.ParentId); // <--

Подробнее см. в разделе Отношения документации EF Core.

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