Entity Framework Database/Code First实现对表进行压缩配置

我采用Database First,用Sql很容易就可以做到对一个表进行压缩。如以下:

CREATE TABLE [dbo].[Entities](
     [Id] [int] IDENTITY(1,1) NOT NULL,
     [Name] [nvarchar](max) NULL,

     Primary Key Clustered ([Id] ASC) WITH (DATA_COMPRESSION=PAGE)
 );

遗憾的是当我采用Database First反向之后。再利用反向后的DbContext(我命名为MyContext)自动生成另外一个数据库时,我发现新生成的数据库里并没有对Entities这个表进行Page级别的压缩,或者说压根就没有压缩。

因为在同一个MyContext下我要求可以自动生成新的数据库。Database First反向之后,再利用DbContext去生成新的数据库,这就有点类似于Code Frist了。一开始,我是打算override OnModelCreating(DbModelBuilder modelBuilder)在这里实现的。两方面的原因让我发现做不到。首先,我没能找到相应的C#版本的Api;其次,如同这个方法的名称一样,在模型的创建时,相关的表还没有建立出来,因此我无法对表进行修改。

最后,我只能采用另一种方式了。继承 CreateDatabaseIfNotExists类,并override Seed(MyContext context)方法了。这个方法的执行时间是在数据库第一次生成之后。这个时候是最适合对表进行修改的。具体如下:

  public class CreateDatabaseWithCompressionIfNotExists : CreateDatabaseIfNotExists<MyContext>
    {
        protected override void Seed(testEntities context)
        {
            var cmd = new SqlCommand();
            var con = new SqlConnection(context.Database.Connection.ConnectionString);
            con.Open();
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;

            cmd.CommandText = "alter table entities rebuild with (data_compression=page);";

            cmd.ExecuteNonQuery();
        }
    }

Main函数里的调用 :

 private static void Main(string[] args)
        {
            Database.SetInitializer(new CreateDatabaseWithCompressionIfNotExists());
 //这里就会调用实现对表的修改了。
            var test = new testEntities();
            test.Entities.Add(new Model.Entity());
            test.SaveChanges();
        }

具体查看是否进行压缩的一种方式:

在:Microsoft SQL SERVER Management Studio里 "右键"相应的表->Properties->Storage->Compresion 这里可以看到相应的Compression type

具体查看是否进行压缩的一种方式:

在:Microsoft SQL SERVER Management Studio里 "右键"相应的表->Properties->Storage->Compresion 这里可以看到相应的Compression type

时间: 2024-10-27 05:44:50

Entity Framework Database/Code First实现对表进行压缩配置的相关文章

创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添加一个User类: namespace MyFirstApp.Models { public class User { public int ID { get; set; } public string Name { get; set; } public string Email { get; se

1.Relationship in Entity Framework Using Code First Approach With Fluent API【使用EF Code-First方式和Fluent API来探讨EF中的关系】

In this article, you will learn about relationships in Entity Framework using the Code First Approach with Fluent API. 在这篇文章中,你将会学习到使用EF Code-First方式和Fluent API来探讨EF中的关系(一对一,一对多,多对多). Introduction[介绍] A relationship, in the context of databases, is a

MVC2、MVC3、MVC4、MVC5之间的区别 以及Entity Framework 6 Code First using MVC 5官方介绍教程

现在MVC的技术日趋成熟,面对着不同版本的MVC大家不免有所迷惑 -- 它们之间有什么不同呢?下面我把我搜集的信息汇总一下,以便大家能更好的认识不同版本MVC的功能,也便于自己查阅. View Engine : View Engine is responsible for rendering of the HTML code from your views to the browser.MVC 2 uses only Web Forms view engine (.aspx) as a defa

使用Entity Framework Core Code First创建SQLite数据库

Entity Framework Core(以下简称"EF Core")支持多种数据库.在这篇文章中,我们看看如何使用EF Core的Code First方式创建SQLite数据库 下载SQLite,解压后会得到三个文件,放到c:\sqlite目录下 我们先创建一个.NET Core控制台程序 添加EF Core for SQLite组件库 "dependencies": { "Microsoft.EntityFrameworkCore.Sqlite&qu

[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例

本文我们来学习一下在Entity Framework中使用Context删除多对多关系的实体是如何来实现的.我们将以一个具体的控制台小实例来了解和学习整个实现Entity Framework 多对多关系的实体删除的操作过程. 你将学习到 怎样创建一个引用Entity Framework的项目: 怎样配置Entity Framework的数据库连接: 怎样去掉Entity Framework Code First 生成的表名的复数: 怎样通过EntityTypeConfiguartion配置实体的

Entity Framework之Code First

EF(Entity Framework )是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping (对象关系映射(Object RelationalMapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.)) 解决方案. Entity Framework利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),而数据字段都转换为属性 (property),关系则转换为结合属性(association),让数据

Entity Framework 6 Code First创建

基本上我是DB先设计好的,所以就按现存在的table去写程式. 1.Web.config里配置Db连接字串,Connection String Name为DefaultConnection <connectionStrings> <!--<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\

mvc+entity framework database first,生成的model每次更新一个表会更新所有的model

在使用Entity Framework 的Database frist或model first时,直接加attribute到modle类上是太现实也不合理的,因为model类是自动生成的,重新生成后会覆盖自己的修改.一个比较合理 做法,就是用 partial class的方式来实现. 比如有一个Model类: Movie.那我们就可以添加一个局部类文件,局部类的内容如下: using System.ComponentModel.DataAnnotations; namespace Movies.

Entity Framework 6 Code First 系列:无需修改实体和配置-在MySql中使用和SqlServer一致的并发控制

无需修改实体和配置,在MySql中使用和SqlServer一致的并发控制.修改RowVersion类型不可取,修改为Timestamp更不可行.Sql Server的RowVersion生成一串唯一的二进制保证Row的版本,无关TimeStamp,更无论TimeStamp的精度问题.使用MySql触发器只能解决uuid的插入的默认值和更新的随机值,由于MySql的自身为了防止无限递归的策略,它的触发器无法在当前表的触发器中更新当前表,所以触发器无法实现更新在SqlServer中由数据库生成的Ro