【问题标题】:EF5 database migrations: How to Enable FILESTREAMSEF5 数据库迁移:如何启用 FILESTREAMS
【发布时间】:2013-12-02 01:26:36
【问题描述】:

我正在开发一个应用程序一段时间,我们需要添加迁移以在 SQL 服务器上启用 FILESTREAM。我的 Up() 方法如下所示:

public override void Up()
    {
        //Enable filestream
        Sql("USE master " +
            "Go " +
            "EXEC sp_configure 'show advanced options' " +
            "GO " +
            "EXEC sp_configure filestream_access_level, 1 " +
            "GO " +
            "RECONFIGURE WITH OVERRIDE " +
            "GO");
        //Need to add some script here to create FILEGROUP and add a file to that
        //file group to be used by FILESTREAM
        CreateTable(
            "dbo.PatientAttachmentEntities",
            c => new
                {
                    Id = c.Guid(nullable: false),
                    PatientMedicalDataId = c.Guid(nullable: false),
                    FileName = c.String(nullable: false),
                    FileDescription = c.String(),
                })
            .PrimaryKey(t => t.Id)
            .ForeignKey("dbo.PatientMedicalDataEntities", t => t.PatientMedicalDataId, cascadeDelete: true)
            .ForeignKey("dbo.AttachmentContentEntities", t => t.Id)
            .Index(t => t.PatientMedicalDataId)
            .Index(t => t.Id);

   //CreateTable(
   //         "dbo.AttachmentContentEntities",
   //         c => new
   //             {
   //                 Id = c.Guid(nullable: false),
   //                 //Need to know if the following line is ok to setup a FILESTREAM column
   //                 Content = c.Binary(storeType:"varbinary(max) FILESTREAM", nullable:true),
   //             })
   //         .PrimaryKey(t => t.Id);
   Sql("CREATE TABLE [dbo].[AttachmentContentEntities]( " +
       "[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL PRIMARY KEY, " +
       "[Content] [varbinary](max) FILESTREAM  NOT NULL ) " +
       "ON [PRIMARY] FILESTREAM_ON [MEDIC_FS]");
     }

我需要一些 sql 脚本来添加一个文件组和一个文件到该组(该文件必须与我的数据库文件在同一路径上),我还需要知道我已经添加的脚本是否正常以及类型是否正确我把c.Binary方法装上都OK了。

非常感谢。

【问题讨论】:

    标签: sql entity-framework filestream database-migration


    【解决方案1】:

    我终于有了一个解决方案,我认为无法使用脚本在 Windows 级别启用文件流,但可以使用此代码实现其余配置。希望它可以对那里的某些人有所帮助。

    public override void Up()
    {
        //File Stream
            Sql("USE master " +
                "EXEC sp_configure 'show advanced options' " +
                "EXEC sp_configure filestream_access_level, 1 " +
                "RECONFIGURE WITH OVERRIDE " +
                "ALTER DATABASE Medic " +
                "ADD FILEGROUP MEDIC_FS " +
                "CONTAINS FILESTREAM " +
                "DECLARE @db_path NVARCHAR(MAX) " +
                "SELECT @db_path = physical_name FROM sys.master_files WHERE database_id = DB_ID(N'Medic') AND type_desc = 'ROWS' " +
                @"SET @db_path = REVERSE(RIGHT(REVERSE(@db_path),(LEN(@db_path)-CHARINDEX('\', REVERSE(@db_path),1))+1)) + 'MEDIC_FS' " +
                "DECLARE @Sql NVARCHAR(MAX) " +
                "SET @Sql = 'ALTER DATABASE Medic ADD FILE ( NAME= ''Medic_FS'', FILENAME = ' + QuoteName(@db_path,'''') + ' ) TO FILEGROUP MEDIC_FS' " +
                "EXEC( @Sql ) ", suppressTransaction: true);        
        CreateTable(
            "dbo.PatientAttachmentEntities",
            c => new
                {
                    Id = c.Guid(nullable: false),
                    PatientMedicalDataId = c.Guid(nullable: false),
                    FileName = c.String(nullable: false),
                    FileDescription = c.String(),
                })
            .PrimaryKey(t => t.Id)
            .ForeignKey("dbo.PatientMedicalDataEntities", t => t.PatientMedicalDataId, cascadeDelete: true)
            .ForeignKey("dbo.AttachmentContentEntities", t => t.Id)
            .Index(t => t.PatientMedicalDataId)
            .Index(t => t.Id);
    
      Sql("CREATE TABLE [dbo].[AttachmentContentEntities]( " +
       "[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL PRIMARY KEY, " +
       "[Content] [varbinary](max) FILESTREAM  NOT NULL ) " +
       "ON [PRIMARY] FILESTREAM_ON [MEDIC_FS]");
     }
    

    这对我来说没问题。

    【讨论】:

      猜你喜欢
      • 2013-11-28
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多