c# - 如何设置使用 Database First 生成的 DbContext 的执行策略?
问题描述
我正在使用 Entity Framework 6 的 Database First 迁移为数据库自动生成一个DbContext
和一组实体。此数据库经常更改,因此需要每隔一段时间重新运行一次迁移以使其保持最新状态,从而删除手动对DbContext
. 为了给出DbContext
标准的重试逻辑,我想让它使用SqlAzureExecutionStrategy
.
到目前为止,我已经成功地使用反射动态创建了一个类,该类继承自DbContext
并配置DbConfigurationTypeAttribute
为使用执行策略。然而,这似乎有点反手 - 有没有更清洁,更明显的方法?
解决方案
这就是我所做的。我添加了一个新类:
namespace SharedTools
{
public class AzureDBConfiguration : DbConfiguration
{
public AzureDBConfiguration()
{
SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
}
}
}
然后...在我的 web.config 中,在实体框架配置部分:
</runtime>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
我刚刚添加了这个属性:
</runtime>
<entityFramework codeConfigurationType="SharedTools.AzureDBConfiguration, SharedTools">
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
调试器在 DBConfiguration 中首先被命中。它似乎已经成功了,没有反思。我确实通过在“实体”DBContext 对象的构造函数中放置一个断点并通过监视窗口对其进行探索来确认它。具体来说,查看 Configuration 对象的非公共成员,_internalContext 上有一个名为 AppConfig 的属性,您可以看到其中列出的 ConfigurationTypeName。
推荐阅读
- hybris - 更改 localhost:9002 以公开 API
- python - 将字符串日期时间转换为正确的日期时间格式并从熊猫数据帧中的 HH:MM:SS.sss 时间部分计算总秒数时出错
- java - 如何使用 Java Rest Client 获取 TWILIO CALL 信息
- php - 使用 Laravel 身份验证和 Ajax 将数据发送到数据库表时获取未经身份验证的消息
- apache-nifi - 使用记录路径处理 Nifi UpdateRecord 中的数字操作
- python - 如何使用较旧 TF 版本的较新 TF 版本的检查点
- javascript - 如何解构 Cloud Function 参数?
- javascript - Battleship JavaScript 不会显示二维数组
- javascript - 如何在javascript中将xml文件解析为字符串?
- python - 如何使用 Python 将记录添加到 MySQL 中具有两个字段的表中?