是否可以在MVC站点中使用EF Core使用Just One Table?

时间:2017-08-23 02:47:24

标签: entity-framework linq database-design asp.net-core asp.net-core-mvc

假设我在数据库中有一个表已经填充了数据(从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查询以检索/加入数据会更好吗?

0 个答案:

没有答案