脚本存储过程,代码优先实体框架中的函数

时间:2014-10-23 03:03:34

标签: c# .net entity-framework ef-migrations

我正在使用手动数据库迁移。

目前,只要有任何新的存储过程或函数,我就会通过以下方法创建迁移:

Add-Migration CreatefnGenerateRequestCode

现在,框架已经创建了类CreatefnGenerateRequestCode

我有两个选项(据我所知),我可以编写内联create procedure SQL代码,或者我可以从文件夹中读取SQL脚本。

我不喜欢内联方法,因为程序变得复杂,我不想保持连接字符串。

所以我发现的是我可以使用dll加载嵌入式资源的方法。

现在,我要做的是创建一个脚本文件

我有一个名为Scripts的文件夹存储fnGenerateRequestCode.sql,现在我已将其嵌入到dll中。

现在,在这段代码的帮助下,我从dll中读到了它:

private string GetFileCode(string resourceName)
{
    var assembly = Assembly.GetExecutingAssembly();
    string result;

    using (Stream stream = assembly.GetManifestResourceStream(resourceName))
    {
        using (StreamReader reader = new StreamReader(stream))
        {
            result = reader.ReadToEnd();
        }
    }

    return result;
}

我的整个迁移类看起来像这样:

public override void Up()
{
    var resourceName = "CBA.RBS.CEDS.Data.Scripts.fnGenerateRequestCode.sql";
    var inlinecode = this.GetFileCode(resourceName);

    if (string.IsNullOrWhiteSpace(inlinecode)) { }
    else
    {
        Sql(inlinecode);
    }
}

public override void Down()
{
    Sql("Drop function dbo.fnGenerateRequestCode");
}

但是这种方法的问题是每次我都有一个脚本要执行,我将不得不嵌入我不知道的DLL是否真的是一个很好的解决方案,因为dll将被加载到记忆,它最终会占用大量的内存空间。

我尝试了其他方法,但在执行Update-Database时无法读取这些脚本文件。

我试过的一种方法是Copy to Output Directory,但我认为我不能读到同样的错误:

  

PM> Update-database指定'-Verbose'标志以查看SQL   语句被应用于目标数据库。应用显式   迁移:[201410230234306_CreateFullBackupProcedure]。应用   显式迁移:201410230234306_CreateFullBackupProcedure。   System.IO.DirectoryNotFoundException:找不到部分内容   路径   'C:\用户\马勒姆\应用程序数据\本地\组件\ DL3 \ G787MA29.K3X \ JL3MCKQY.NGR \ 8b8db792 \ 7af63578_6beecf01 \脚本\ spFullBackup.sql'

有人可以澄清两件事:

  1. 当我们用dll嵌入资源时,它是否会占用空间。如果是的话那么我的做法很好吗?
  2. 其他人在做什么?

0 个答案:

没有答案