我想问一下,是否可以在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
中仅为项目实体建模。
谢谢您的帮助
答案 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
个表。