EF Core DBContext仅定位数据库的一部分

时间:2019-05-16 11:56:31

标签: c# entity-framework asp.net-core entity-framework-core

我想问一下,是否可以在Entity Framework Core中仅使用DbContext定位一个表?

在快捷方式中,我有一个系统来管理有关数据库及其中所有表的所有内容,但是现在我正在编写新系统,该系统使用相同的数据库,但只需要其中一个表。另外,我真的不需要方法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 个答案:

答案 0 :(得分:1)

您可以使用映射。 首先创建您将使用的表的模型。喜欢

 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);
        }
    }

答案 1 :(得分:0)

您可以使用Entity Framework Core的db first方法

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

如果您将{Connection String}更改为连接字符串,将{TableName}更改为表名称,则会创建表实体。

答案 2 :(得分:0)

假设您的新项目使用原始DbContext副本,则可以删除不需要的任何内容。

除非您从新上下文创建迁移,否则这不会更改数据库


可能值得一提:一种代码优先方法,即根据您的代码生成数据库,通常将由共享的DbContext管理,因为您不能拥有多个单个数据库中的__MigrationHistory个表。