假设我在数据库中有一个表已经填充了数据(从excel导入) .
我正在使用.NET Core和EF Core构建MVC网站(均为v.1.1.2)
我想要做的是创建一系列模型,其数据来自一个原始的“源数据”表 . 源数据表有150列,虽然我现在不需要它们,但我确实希望保留所有列,以便我可以在以后需要时使用它们 .
使用“dotnet ef dbcontext scaffold”命令,我能够生成:
-
Model - 包含每列的所有公共get / set属性
-
DbContext 类 - 使用DbSet和Fluent API语句来引用表和列
通过这种设置,是否可以通过简单地创建各种模型类(多对多关系)来设置一种“虚拟”关系数据模型,并且它们的属性等于原始“源”中已定义的属性实体?
我希望避免的是必须在DB中维护一个实际的关系数据结构(由PK,FK,连接表等链接的独立表)
原因是......我只想从批量导入Excel工作表中每晚更新源数据表,并且不必持久或跟踪数据的任何更改(只读) . 因此,我不想处理在导入过程中将源数据映射到关系表,列,键等所涉及的额外开销/设置/维护 .
我可以简单地创建各种模型,然后在DbContext中重写OnModelCreating方法,传递modelBuilder的实例以将这些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查询来检索/加入数据会更好吗?