Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编写存储过程脚本,代码优先实体框架中的函数_C#_.net_Entity Framework_Entity Framework Migrations - Fatal编程技术网

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

C# 编写存储过程脚本,代码优先实体框架中的函数,c#,.net,entity-framework,entity-framework-migrations,C#,.net,Entity Framework,Entity Framework Migrations,我正在使用手动数据库迁移 目前,只要有任何新的存储过程或函数,我都会通过以下方法创建迁移: Add-Migration CreatefnGenerateRequestCode 现在,框架已经创建了类CreatefnGenerateRequestCode 我有两个选择(据我所知),要么写内联create过程SQL代码,要么从文件夹中读取SQL脚本 我不喜欢内联方法,因为随着过程变得复杂,我不想继续连接字符串 所以我发现了一种方法,通过这种方法我可以用dll加载嵌入式资源 现在,我要做的是创建一个

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

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

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

我有两个选择(据我所知),要么写内联
create过程
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将被加载到内存中,它最终会占用大量内存空间

我尝试过其他方法,但在执行
updatedatabase
时无法读取这些脚本文件

我尝试的一种方法是
复制到输出目录
,但我认为我读不到与以下错误相同的内容:

PM>Update database指定“-Verbose”标志以查看SQL 正在应用于目标数据库的语句。应用显式 迁移:[201410230234306_CreateFullBackupProcedure]。应用 显式迁移:201410230234306_CreateFullBackupProcedure。 System.IO.DirectoryNotFoundException:找不到 路径 “C:\Users\MalhAm\AppData\Local\assembly\dl3\G787MA29.K3X\JL3MCKQY.NGR\8b8db792\7af63578\U 6beecf01\Scripts\spFullBackup.sql”

有人能澄清两件事吗

  • 当我们用dll嵌入资源时,它会占用空间吗。如果是这样,那么我的方法是好的
  • 其他人怎么样

  • 我也有同样的问题,我决定使用“复制到输出目录”。