Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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# Azure功能项目中的EF代码首次迁移_C#_Entity Framework_Ef Code First_Azure Sql Database_Azure Functions - Fatal编程技术网

C# Azure功能项目中的EF代码首次迁移

C# Azure功能项目中的EF代码首次迁移,c#,entity-framework,ef-code-first,azure-sql-database,azure-functions,C#,Entity Framework,Ef Code First,Azure Sql Database,Azure Functions,我想在Azure functions项目中使用EF Code first迁移,该项目是带有EF 6.2.0的类库.net 4.6.2。我添加了db上下文和实体。当我尝试运行启用迁移或添加迁移时,请将此类库设置为默认项目,然后返回以下错误。我在解决方案中没有任何web项目 使用“2”参数调用“SetData”时出现异常:“Type” 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProjec

我想在Azure functions项目中使用EF Code first迁移,该项目是带有EF 6.2.0的类库.net 4.6.2。我添加了db上下文和实体。当我尝试运行
启用迁移
添加迁移
时,请将此类库设置为默认项目,然后返回以下错误。我在解决方案中没有任何web项目

使用“2”参数调用“SetData”时出现异常:“Type” 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' 在程序集“Microsoft.VisualStudio.ProjectSystem.VS.实现”中, 版本=15.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a' 未标记为可序列化。位于 C:\Users\xxxxx-win.nuget\packages\entityframework\6.2.0\tools\entityframework.psm1:720 字符:5 +$domain.SetData('project',$project) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:NotSpecified:(:)[],MethodInvocationException +FullyQualifiedErrorId:序列化异常

但当我运行该项目时,它会自动创建带有
InitialCreate
条目的
\uu MigrationHistory
表。但我在解决方案中的任何位置都看不到此迁移文件

dbcontext文件以供参考

 public class TestDbContext : DbContext
    {
        public TestDbContext(string cs)
            : base(cs)
        {
        }

        public TestDbContext() :
            base(ConfigurationManager.ConnectionStrings["sql_connection"].ConnectionString)
        {
            Database.SetInitializer(new TestDBInitializer());
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<TestRaw>().ToTable("TestRaw");
            modelBuilder.Entity<TestRequest>().ToTable("TestRequest");
        }

        public virtual DbSet<TestRaw> TestRaw { get; set; }

        public virtual DbSet<TestRequest> TestRequest { get; set; }

    }
    public class TestDBInitializer : CreateDatabaseIfNotExists<TestDbContext>
    {
        protected override void Seed(TestDbContext context)
        {
            base.Seed(context);
        }
    }
公共类TestDbContext:DbContext
{
公共TestDbContext(字符串cs)
:基底(cs)
{
}
公共TestDbContext():
基本(ConfigurationManager.ConnectionString[“sql\U连接”].ConnectionString)
{
SetInitializer(新的TestDBInitializer());
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable(“TestRaw”);
modelBuilder.Entity().ToTable(“TestRequest”);
}
公共虚拟数据库集TestRaw{get;set;}
公共虚拟数据库集测试请求{get;set;}
}
公共类TestDBInitializer:CreateDatabaseIfNotExists
{
受保护的覆盖无效种子(TestDbContext上下文)
{
种子(上下文);
}
}

此外,azure函数不使用app.config。所以不确定EF相关依赖项注册在哪里?我们可以将EF代码优先迁移与Azure功能一起使用吗?如果是,如何查看迁移文件夹和相关文件?在部署到functionapp时,是否需要注意与迁移相关的任何问题?

我将把这个答案分为两部分

  • 尝试启用/添加迁移时出现的错误(“调用“SetData”…”的异常”)可能是由于包含上下文和实体的项目目标框架与您尝试使用的命令不匹配造成的。尽管根据您的描述,您似乎已经正确设置了这些,意思是:.net 4.6.2和EF 6.2.0(因此两者都不是.net core)

    通过为我的上下文和实体类创建一个.NET标准2.0类库,在其中安装EF 6.2,并运行“启用迁移”等旧命令,我成功地获得了相同的错误

    是导致相同错误的其他原因(还指向版本冲突和在PackageManager控制台中设置正确的项目等)

    创建.NETFramework4.6.2类库、安装EF6.2并使用这些命令对我很有用,当然也应该对您有用

    因为您说运行应用程序实际上运行迁移(因为您设置了数据库初始值设定项),这表明您可能只是在使用旧命令,而实际需要的是“dotnet ef…”

    您可能希望提供有关解决方案结构(哪些项目针对哪些版本)的更详细信息,以便进行进一步分析

    顺便说一句,Azure函数现在也支持.NET Core,因此您可能希望一路尝试.NET Core(这意味着函数项目、类库和EF都以Core为目标)

  • Azure函数和EF支持:在Azure函数中使用EF是无法阻止的。我刚刚创建了带有EF Code First migrations(EF 6.2)和数据库初始值设定项的函数,以在运行时将db迁移到最新版本

    我在一个项目中有函数,在另一个类库项目中有数据库上下文和实体,其中还包含一个app.config文件(仅用于创建迁移或手动更新数据库等)。然后,只要在functions项目中引用这个项目,就可以使用其中的代码

    在函数中,只需创建上下文类的新实例。您可以使用基本的
    ConfigurationManager.ConnectionString[“foobarConnString”]获取数据库连接字符串。ConnectionString
    (或者等效的.NET核心代码,如果以核心为目标)

    当然,这意味着您需要在functions项目和model项目中引用EF库


  • 我将把这个答案分成两部分

  • 尝试启用/添加迁移时出现的错误(“调用“SetData”…”的异常”)可能是由于包含上下文和实体的项目目标框架与您尝试使用的命令不匹配造成的。尽管根据您的描述,您似乎已经正确设置了这些,意思是:.net 4.6.2和EF 6.2.0(因此两者都不是.net core)

    通过为我的上下文和实体类创建一个.NET标准2.0类库,在其中安装EF 6.2,并运行“启用迁移”等旧命令,我成功地获得了相同的错误

    是导致相同错误的其他原因(还指向版本冲突和在PackageManager控制台中设置正确的项目等)

    创建.NETFramework4.6.2类库,安装EF6.2并使用这些命令对我来说很有效,应该是肯定的