- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
迁移到 Entity Framework 6 后,我在构建服务器上执行单元测试时遇到错误。
我正在使用 DropCreateDatabaseIfModelChanges
初始化程序。当我将其更改为 MigrateDatabaseToLatestVersion
时一切正常,但我想坚持使用之前的初始化程序。
我得到的错误是:
System.InvalidOperationException: System.InvalidOperationException: The model backing the 'AppContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269)..
这是正确的,它发生了变化,但是使用 DropCreateDatabaseIfModelChanges
初始化器,它应该被重新创建。有什么想法吗?
EF 在 App.config 中配置。这是相关部分:
<connectionStrings>
<add name="AppContext" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=my.app.unittest;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<contexts>
<context type="my.app.core.Data.AppContext, my.app.core">
<databaseInitializer type="System.Data.Entity.DropCreateDatabaseIfModelChanges`1[[my.app.core.Data.AppContext, my.app.core]], EntityFramework" />
</context>
</contexts>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
最佳答案
嗯,看起来 EF 6.0 引入了一个新规则:
“如果 DbContext 使用初始化程序并且配置了迁移,则在构建模型时抛出异常”。
直到并包括 EF 6 RC,这并没有被强制执行。烦人的部分是“迁移已配置”是由 DbMigrationsConfiguration 的实现定义的。似乎没有办法在测试中以编程方式禁用迁移 - 如果您实现了
我以与 Sebastian Piu 非常相似的方式解决它 - 我不得不从我的测试中删除 Configuration 类,但我不能只是删除它,因为我们正在为我们的主要项目使用迁移。啊!
这是我之前的代码:
public class MyDbContext : DbDContext, IMyDbContext
{
public IDbSet<Users> Users {get; set;}
public IDbSet<Widgets> Widgets {get; set;}
}
// Migrations are considered configured for MyDbContext because this class implementation exists.
internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
}
// Declaring (and elsewhere registering) this DB initializer of type MyDbContext - but a DbMigrationsConfiguration already exists for that type.
public class TestDatabaseInitializer : DropCreateDatabaseAlways<MyDbContext>
{
protected override void Seed(MyDbContext context) { }
}
我在测试代码中初始化 DbContext 时遇到了 System.InvalidOperationException。由于该应用程序不使用任何 Initializer,因此运行该应用程序不会像以前那样出现问题。这只会破坏我的测试。
解决方案(感觉更像是 EF 中缺少的东西的变通方法)是将 Initializer 和 DbMigrationsConfiguration 分段,以便在运行时环境中只看到一个。我希望我的测试使用 Initializer,我希望我的应用程序使用 DbMigrationsConfiguration。如果 DbContext 有一个接口(interface),这可以做得更干净,但遗憾的是它只实现了 IObjectContextAdapter。
首先我制作了我的 DbContext 摘要:
public abstract class MyDbContextBase : DbContext, IMyDbContext
{
public IDbSet<Users> Users {get; set;}
public IDbSet<Widgets> Widgets {get; set;}
}
然后我派生了2个类:
public class MyDbContext : MyDbContextBase
{
public MyDbContext(string connectionStringOrName, IDatabaseInitializer<MyDbContext> dbInitializer)
: base(connectionStringOrName)
{
}
}
public class MyTestDbContext : MyDbContextBase
{
public MyTestDbContext(string connectionStringOrName, IDatabaseInitializer<MyDbContext> dbInitializer)
: base(connectionStringOrName)
{
Database.SetInitializer(dbInitializer);
}
}
MyDbContext 和 MyTestDbContext 都是 IMyDbContext,因此您现有的依赖注入(inject)设置无需更改即可正常工作。我只测试了 Spring.NET。
我的 DbMigrationsConfiguration 实现了测试未使用的派生类型:
internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
}
最后,初始化器的类型被移动到派生的测试类类型:
public class TestDatabaseInitializer : DropCreateDatabaseAlways<MyTestDbContext>
{
protected override void Seed(MyTestDbContext context) { }
}
我可以确认我的测试正在通过并且我的应用程序(和迁移)仍在像以前一样工作。
关于c# - DropCreateDatabaseIfModelChanges EF6 导致 System.InvalidOperationException : The model backing the context has changed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19430502/
我对 mongoosejs 中模型的使用感到有些困惑。 可以通过这些方式使用 mongoose 创建模型 使用 Mongoose var mongoose = require('mongoose');
我正在看 from django.db import models class Publisher(models.Model): name = models.CharField(max_len
我有自己的 html 帮助器扩展,我用这种方式 model.Reason_ID, Register.PurchaseReason) %> 这样声明的。 public static MvcHtmlS
假设模型原本是存储在CPU上的,然后我想把它移到GPU0上,那么我可以这样做: device = torch.device('cuda:0') model = model.to(device) # o
我过去读过一些关于模型的 MVC 建议,指出不应为域和 View 重用相同的模型对象;但我找不到任何人愿意讨论为什么这很糟糕。 我认为创建两个单独的模型 - 一个用于域,一个用于 View - 然后在
我正在使用pytorch构建一个像VGG16这样的简单模型,并且我已经重载了函数forward在我的模型中。 我发现每个人都倾向于使用 model(input)得到输出而不是 model.forwar
tf.keras API 中的 models 是否多余?对于某些情况,即使不使用 models,代码也能正常运行。 keras.models.sequential 和 keras.sequential
当我尝试使用 docker 镜像运行 docker 容器时遇到问题:tensorflow/serving。 我运行命令: docker run --name=tf_serving -it tensor
我有一个模型,我用管道注册了它: register_step = PythonScriptStep(name = "Register Model",
如果 View 需要访问模型中的数据,您是否认为 Controller 应: a)将模型传递给 View b)将模型的数据传递给 View c)都不;这不应该是 Controller 所关心的。让 V
我正在寻找一个可以在模型中定义的字段,该字段本质上是一个列表,因为它将用于存储多个字符串值。显然CharField不能使用。 最佳答案 您正在描述一种多对一的关系。这应该通过一个额外的 Model 进
我最近了解了 Django 中的模型继承。我使用很棒的包 django-model-utils 取得了巨大的成功。我继承自 TimeStampedModel 和 SoftDeletableModel。
我正在使用基于 resnet50 的双输出模型进行项目。一个输出用于回归任务,第二个输出用于分类任务。 我的主要问题是关于模型评估。在训练期间,我在验证集的两个输出上都取得了不错的结果: - 综合损失
我是keras的新手。现在,我将使用我使用 model.fit_generator 训练的模型来预测测试图像组。我可以使用 model.predict 吗?不确定如何使用model.predict_g
在 MVC 应用程序中,我加入了多个表并将其从 Controller 返回到 View,如下所示: | EmployeeID | ControlID | DoorAddress | DoorID |
我在使用 sails-cassandra 连接系统的 Sails 中有一个 Data 模型。数据。 Data.count({...}).exec() 返回 1,但 Data.find({...}).e
我正在使用 PrimeFaces dataTable 开发一个 jsf 页面来显示用户列表。用户存储在 Model.User 类的对象中。
我正在关注https://www.tensorflow.org/tutorials/keras/basic_classification解决 Kaggle 挑战。 但是,我不明白应该将什么样的数据输入
我是这个领域的新手。那么,你们能帮忙如何为 CNN 创建 .config 文件吗? 传递有关如何执行此操作的文档或教程将对我有很大帮助。谢谢大家。 最佳答案 这个问题对我来说没有多大意义,因为 .co
我是“物理系统建模”主题的新手。我阅读了一些基础文献,并在 Modelica 和 Simulink/Simscape 中做了一些教程。我想问你,如果我对以下内容理解正确: 符号操作是将微分代数方程组(
我是一名优秀的程序员,十分优秀!