NOP拆分二:EF提供的五种初始化方式

说明

EF接口文档
接上一篇,EF通过SetInitializer(IDatabaseInitializer) 方法设置数据库初始化方式,因此我们可以通过实现IDatabaseInitializer接口自定义数据库初始化方式。除此之外,EntityFramework提供了五种数据库初始化方式,分别是

说明
CreateDatabaseIfNotExists 当数据库不存在时,创建并初始化数据库
DropCreateDatabaseAlways 每次App Domain启动时,都删除并重建数据库
DropCreateDatabaseIfModelChanges 当数据库模型发生改变时,删除并重建数据库
MigrateDatabaseToLatestVersion 通过Migrations将数据库迁移到最新版本
NullDatabaseInitializer 禁用初始化,相当于SetInitializer(null)

下面是一些例子,我将SQL打印成日志,可以帮助我们分析。这里使用数据库SqlServer,将上一篇中MSDataProvider的SetDatabaseInitializer做了一些修改,其他代码不变。
测试代码如下:

 [TestMethod]
        public void InitDatabaseTest()
        {
            DataSettings setting = new DataSettings
            {
                DataConnectionString = ConfigurationManager.ConnectionStrings["Conn"].ConnectionString,
                DataProvider = ConfigurationManager.ConnectionStrings["Conn"].ProviderName,
                DBType = ConfigurationManager.AppSettings["dbType"]
            };

            EfDataProviderManager manager = new EfDataProviderManager(setting);
            IDataProvider provider =  manager.LoadDataProvider();
            provider.InitDatabase();
            using (NopObjectContext context = new NopObjectContext(setting.DataConnectionString))
            {
                IDbSet<Vendor> set = context.Set<Vendor>();
                //经测试 ,InitializeDatabase在这一步执行
                Vendor vendor = set.Add(new Vendor
                {
                    Name = "欢迎加QQ交流",
                    Email = "[email protected]"
                });
                context.SaveChanges();
            }
        }

CreateDatabaseIfNotExists

MSDataProvider代码:

 public void SetDatabaseInitializer()
  {
       var initializer = new CreateDatabaseIfNotExists<NopObjectContext>();
       Database.SetInitializer(initializer);
   }

运行前数据库,我的数据库是develop,此时还没有创建
运行前数据库
运行后,打印出的SQL(只留了关键部分):

2019-04-11 00:18:45,961 [12] DEBUG Nop.Data.NopObjectContext - Opened connection at 2019/4/11 0:18:45 +08:00
 Nop.Data.NopObjectContext 
2019-04-11 00:18:45,990 [12] DEBUG Nop.Data.NopObjectContext - Started transaction at 2019/4/11 0:18:45 +08:00
 Nop.Data.NopObjectContext 
2019-04-11 00:18:45,995 [12] DEBUG Nop.Data.NopObjectContext - CREATE TABLE [dbo].[Vendor] (
    [Id] [int] NOT NULL IDENTITY,
    [Name] [nvarchar](200) NOT NULL,
    [Email] [nvarchar](400),
    [Description] [nvarchar](max),
    [PictureId] [int] NOT NULL,
    [AdminComment] [nvarchar](max),
    [Active] [bit] NOT NULL,
    [Deleted] [bit] NOT NULL,
    [DisplayOrder] [int] NOT NULL,
    [MetaKeywords] [nvarchar](400),
    [MetaDescription] [nvarchar](max),
    [MetaTitle] [nvarchar](400),
    [PageSize] [int] NOT NULL,
    [AllowCustomersToSelectPageSize] [bit] NOT NULL,
    [PageSizeOptions] [nvarchar](200),
    CONSTRAINT [PK_dbo.Vendor] PRIMARY KEY ([Id])
) Nop.Data.NopObjectContext 
2019-04-11 00:18:46,008 [12] DEBUG Nop.Data.NopObjectContext - CREATE TABLE [dbo].[VendorNote] (
    [Id] [int] NOT NULL IDENTITY,
    [VendorId] [int] NOT NULL,
    [Note] [nvarchar](max) NOT NULL,
    [CreatedOnUtc] [datetime] NOT NULL,
    CONSTRAINT [PK_dbo.VendorNote] PRIMARY KEY ([Id])
) Nop.Data.NopObjectContext 
2019-04-11 00:18:46,010 [12] DEBUG Nop.Data.NopObjectContext - CREATE INDEX [IX_VendorId] ON [dbo].[VendorNote]([VendorId]) Nop.Data.NopObjectContext 
2019-04-11 00:18:46,011 [12] DEBUG Nop.Data.NopObjectContext - ALTER TABLE [dbo].[VendorNote] ADD CONSTRAINT [FK_dbo.VendorNote_dbo.Vendor_VendorId] FOREIGN KEY ([VendorId]) REFERENCES [dbo].[Vendor] ([Id]) ON DELETE CASCADE Nop.Data.NopObjectContext 
2019-04-11 00:18:46,016 [12] DEBUG Nop.Data.NopObjectContext - CREATE TABLE [dbo].[__MigrationHistory] (
    [MigrationId] [nvarchar](150) NOT NULL,
    [ContextKey] [nvarchar](300) NOT NULL,
    [Model] [varbinary](max) NOT NULL,
    [ProductVersion] [nvarchar](32) NOT NULL,
    CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY ([MigrationId], [ContextKey])
) Nop.Data.NopObjectContext 
2019-04-11 00:18:46,019 [12] DEBUG Nop.Data.NopObjectContext - INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion])
VALUES (N'201904101618447_InitialCreate', N'Nop.Data.NopObjectContext',  略 , N'6.2.0-61023')
 Nop.Data.NopObjectContext 
2019-04-11 00:18:46,029 [12] DEBUG Nop.Data.NopObjectContext - Committed transaction at 2019/4/11 0:18:46 +08:00
 Nop.Data.NopObjectContext 

以下LOG是我执行了set.Add
2019-04-11 00:18:46,110 [12] DEBUG Nop.Data.NopObjectContext - Opened connection at 2019/4/11 0:18:46 +08:00
 Nop.Data.NopObjectContext 
2019-04-11 00:18:46,111 [12] DEBUG Nop.Data.NopObjectContext - Started transaction at 2019/4/11 0:18:46 +08:00
 Nop.Data.NopObjectContext 
2019-04-11 00:18:46,172 [12] DEBUG Nop.Data.NopObjectContext - INSERT [dbo].[Vendor]([Name], [Email], [Description], [PictureId], [AdminComment], [Active], [Deleted], [DisplayOrder], [MetaKeywords], [MetaDescription], [MetaTitle], [PageSize], [AllowCustomersToSelectPageSize], [PageSizeOptions])
VALUES (@0, @1, NULL, @2, NULL, @3, @4, @5, NULL, NULL, NULL, @6, @7, NULL)
SELECT [Id]
FROM [dbo].[Vendor]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity() Nop.Data.NopObjectContext 
2019-04-11 00:18:46,172 [12] DEBUG Nop.Data.NopObjectContext - 
 Nop.Data.NopObjectContext 
2019-04-11 00:18:46,174 [12] DEBUG Nop.Data.NopObjectContext - -- @0: '用户名' (Type = String, Size = 200)
 Nop.Data.NopObjectContext 
2019-04-11 00:18:46,174 [12] DEBUG Nop.Data.NopObjectContext - -- @1: '[email protected]' (Type = String, Size = 400)
 Nop.Data.NopObjectContext 
2019-04-11 00:18:46,174 [12] DEBUG Nop.Data.NopObjectContext - -- @2: '0' (Type = Int32)
 Nop.Data.NopObjectContext 
2019-04-11 00:18:46,174 [12] DEBUG Nop.Data.NopObjectContext - -- @3: 'Fal
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值