假设我在数据库中有一个表已经填充了数据(从excel导入)。
我正在使用.NET Core和EF Core(均为v.1.1.2)构建MVC网站
我想要做的是创建一系列模型,其数据来自一个原始的“源数据”表。源数据表有150列,虽然我现在不需要它们,但我确实希望保留所有列,以便我可以在以后需要时使用它们。
使用“dotnet ef dbcontext scaffold”命令,我能够生成:
模型 - 包含每列的所有公共get / set属性
DbContext 类 - 使用DbSet&用于引用表和列的流畅API语句
通过这种设置,是否可以通过简单地创建各种模型类(多对多关系)来设置一种“虚拟”关系数据模型,并且它们的属性等于原始中已定义的属性“来源”实体?
我希望避免的是必须在DB中维护一个实际的关系数据结构(由PK,FK,连接表等链接的独立表)。
原因是...我只想从批量导入Excel工作表中每晚更新源数据表,并且不必持久或跟踪数据的任何更改(只读)。因此,我不想处理在导入过程中将源数据映射到关系表,列,键等所涉及的额外开销/设置/维护。
我可以简单地创建各种模型,然后在DbContext中覆盖OnModelCreating方法,传递模型构建器的实例以将这些DbSet实体映射到源表中的列吗?
namespace VTracker.Contexts
{
public partial class DataContext : DbContext
{
public DataContext(DbContextOptions options) : base(options)
{
}
public DbSet<SourceData> Data { get; set; }
public DbSet<SomeModel1> Model1 { get; set; }
public DbSet<SomeModel2> Model2 { get; set; }
public DbSet<SomeModel3> Model3 { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SourceData>(entity =>
{
// some key must be defined?
entity.HasKey(e => e.SourceIDColumn);
entity.ToTable("SourceDataTable");
entity.Property(e => e.SourceIDColumn)
entity.Property(e => e.SourceColumn1)
.HasColumnName("SourceColumn1")
// ...... continue mapping .....
// Some Model 1 Entity Builder
entity.ToTable("SourceDataTable");
// ...... continue mapping .....
// Some Model 2 Entity Builder
entity.ToTable("SourceDataTable");
// .... and so on for other models......
}
}
}
}
或者只是将一个实体用于所有内容并且根据需要构建SQL / LINQ查询以检索/加入数据会更好吗?