我想在Azure函数项目中使用EF代码第一迁移,该项目是 EF 6.2.0
类.net 4.6.2
。我添加了DB上下文和实体。当我尝试通过将此类库设置为默认项目来运行enable-migrations
或add-migration
时,然后将其置于错误之下。我在解决方案中没有任何网络项目。
异常调用" setData",带有" 2"参数: 'Microsoft.visualStudio.projectSystem.vs.implementation.package.automation.oaproject' 在汇编'microsoft.visualstudio.projectsystem.vs.implementation中 版本= 15.0.0.0,文化=中性,publicKeytoken = b03f5f7f11d50a3a' 没有标记为序列化。" c: users xxxxx-win.nuget packages entityframework 6.2.0 tools entityframework.psm1:720 char:5 $ domain.setdata('project',$ project) ~~~~~~~~~~~~~~~~~~~~~~~~~~ categoryInfo:未指定:(:) [],methodInvocation exception 完全QualifiedErrid:serializationException
但是,当我运行项目时,它会自动创建使用InitialCreate
条目的__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);
}
}
另外,Azure函数不使用app.config。因此,不确定在哪里注册了与EF相关的依赖关系?我们可以使用Azure功能使用EF代码的第一迁移吗?如果是,如何查看迁移文件夹和相关文件?我需要在部署到functionApp时要照顾任何与迁移有关的东西?
我将分为两个部分。
-
尝试启用/添加迁移时您遇到的错误("异常调用" setData" ...")可能是由包含您的上下文和实体和命令的项目的目标框架中的不匹配引起的您正在尝试使用。尽管基于您的描述,您似乎具有正确的设置,但含义为:.NET 4.6.2和EF 6.2.0(因此,都不是.NET Core)。
我通过为我的上下文和实体类创建.NET标准2.0类库,在其中安装EF 6.2并运行旧命令,例如"启用迁移"等。
。
在堆栈溢出是遇到相同错误的其他一些原因(还指向版本冲突并在软件包管理器控制台等中设置正确的项目)。
创建.NET Framework 4.6.2类库,安装EF 6.2并使用这些命令为我工作,并且绝对应该为您工作。
因为您说运行该应用程序实际运行迁移(因为您具有数据库初始化器集)会表明,当您实际想要的是" dotnet ef ..."时,您可能只是在使用旧命令。
您可能需要提供有关解决方案结构(针对哪些版本的项目)的更多详细信息,以实现进一步的分析。
作为旁注,Azure函数现在也支持.NET Core,因此您可能需要一路尝试.NET Core(这意味着函数项目,类库和EF都是针对核心的)。/p>
-
Azure功能和EF支持:没有阻止您在Azure函数中使用EF。我刚刚创建了EF代码第一迁移(EF 6.2)和数据库初始化器设置的功能,以在运行时迁移到最新版本。
我在一个项目中具有功能,以及另一个类库项目中的数据库上下文和实体,其中包含一个app.config文件(仅用于创建迁移或手动更新数据库等)。然后,这只是在功能项目中引用该项目以便能够在其中使用代码的问题。
在功能中,您只需创建上下文类的新实例即可。您可以使用基本
ConfigurationManager.ConnectionStrings["foobarConnString"].ConnectionString
(或等效的.NET核心代码,如果针对Core)获取数据库连接字符串。自然意味着您需要在功能项目和模型项目中引用EF库。