EF Core DBContext, ориентированный только на часть базы данных - PullRequest
2 голосов
/ 16 мая 2019

Я хотел бы спросить, можно ли настроить таргетинг только на одну таблицу с DbContext в Entity Framework Core?

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

Допустим, у меня есть что-то вроде:

        public virtual DbSet<Admin> Admins { get; set; }
        public virtual DbSet<User> Users { get; set; }        
        public virtual DbSet<Project> Projects { get; set; }        
        public virtual DbSet<AdminProject> AdminProjects { get; set; }        
        public virtual DbSet<UserProject> UserProjects { get; set; }        

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
           // something
        }        

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //modelBuilder for all of the tables
        }

но я бы предпочел просто:

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

и позже в OnModelCreating просто модель для сущности Проекта.

Спасибо за вашу помощь

Ответы [ 3 ]

1 голос
/ 17 мая 2019

Вы можете использовать отображение.Сначала создайте модель таблицы, которую вы будете использовать.Как

 public class Foo
    {

        public string Id { get; set; }
        public string Name { get; set; }
        public string Phone { get; set; }
    }

После отображения класса ящиков

 public class FooMapping : IEntityTypeConfiguration<Foo>
    {
        public void Configure(EntityTypeBuilder<Foo> builder)
        {
            builder.ToTable("FooTable");
            builder.Property(c => c.Id).HasColumnName("nameofyourcolumninsqltable").IsRequired();;
            builder.Property(c => c.Name).HasColumnName("nameofyourcolumninsqltable");;
            builder.Property(c => c.Phone).HasColumnName("nameofyourcolumninsqltable");
        }
    }

Наконец, инициализировать в DbContex

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

        }
        public Context()
        {

        }
        public DbSet<Foo> Foos { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.ApplyConfiguration(new FooMapping());
            base.OnModelCreating(modelBuilder);
        }
    }
0 голосов
/ 17 мая 2019

при условии, что ваш новый проект использует копию оригинала DbContext, вы можете просто удалить все, что вам не нужно.

Если вы не создадите миграцию из нового контекста , это не изменит вашу базу данных .


Возможно, стоит упомянуть: Подход, основанный на коде, в котором БД генерируется на основе вашего кода, обычно управляется общим DbContext, поскольку у вас не может быть несколько __MigrationHistory таблицы в одной базе данных.

0 голосов
/ 16 мая 2019

Вы можете использовать первый подход БД Entity Framework Core

Scaffold-DbContext "{Connection String}" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -t {TableName}

Если вы измените {Строка соединения} со строкой соединения и {TableName} с именем таблицы, это создаст вашу табличную сущность.

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