C# 如何用实体框架实现瞬时故障处理模式
我需要实现以下模式: 我在一本书上读到如下内容: 如果您使用的是实体框架6(EF 6),则 瞬时故障内置于框架中。当您的EF 6型号 在项目中,您需要创建一个从 DbConfiguration并自定义中的执行策略 构造器。EF6将查找从 在项目中配置数据库,并使用它们提供恢复能力。到 设置此选项后,将新类文件添加到项目中,并使用 System.Data.Entity和System.Data.Entity.SqlServer的语句 代码如下:C# 如何用实体框架实现瞬时故障处理模式,c#,asp.net,asp.net-mvc,entity-framework,azure-sql-database,C#,Asp.net,Asp.net Mvc,Entity Framework,Azure Sql Database,我需要实现以下模式: 我在一本书上读到如下内容: 如果您使用的是实体框架6(EF 6),则 瞬时故障内置于框架中。当您的EF 6型号 在项目中,您需要创建一个从 DbConfiguration并自定义中的执行策略 构造器。EF6将查找从 在项目中配置数据库,并使用它们提供恢复能力。到 设置此选项后,将新类文件添加到项目中,并使用 System.Data.Entity和System.Data.Entity.SqlServer的语句 代码如下: public class EFConfigura
public class EFConfiguration : DbConfiguration
{
public EFConfiguration()
{
this.SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
}
}
但是,我不确定如何在我的代码中实现它:
public class AppDataContext : DbContext
{
public AppDataContext() : base("AppDataContext")
{
}
public DbSet<Module> Modulos { get; set; }
public DbSet<Empresa> Empresas { get; set; }
public DbSet<Entidad> Entidades { get; set; }
public DbSet<Propiedad> Propiedades { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
public class AppDataContextInitializer : System.Data.Entity.DropCreateDatabaseAlways<AppDataContext>
{
protected override void Seed(AppDataContext context)
{
#region Seed Modules
context.Modulos.Add(new Module() { Id = 1, ModuleName = "Contabilidad", FontAwesomeClass = "fa-ambulance" });
context.Modulos.Add(new Module() { Id = 2, ModuleName = "Recursos Humanos", FontAwesomeClass = "fa-heartbeat" });
context.Modulos.Add(new Module() { Id = 3, ModuleName = "Inventario", FontAwesomeClass = "fa-anchor" });
context.Modulos.Add(new Module() { Id = 3, ModuleName = "Produccion", FontAwesomeClass = "fa-binoculars" });
context.Modulos.Add(new Module() { Id = 3, ModuleName = "Ventas", FontAwesomeClass = "fa-coffee" });
context.Modulos.Add(new Module() { Id = 3, ModuleName = "Compras", FontAwesomeClass = "fa-calendar-o" });
context.Modulos.Add(new Module() { Id = 3, ModuleName = "Cotizaciones", FontAwesomeClass = "fa-building" });
#endregion
#region Seed Empresas
context.Empresas.Add(new Empresa() { Id = 1,
Nombre = "XYA",
NIT = "900854343",
NombreRepresentanteLegal = "Carla Peresz",
TelefonoRepresentanteLegal = "123",
NombreContacto = " Esteban Andres",
TelefonoContacto = "123"
});
#endregion
#region Seed Entidades
context.Entidades.Add(new Entidad()
{
Id = 1,
Nombre = "Empresa",
Propiedades = new List<Propiedad>()
{
new Propiedad()
{
Codigo="01",
Nombre="Twitter",
TipoDeDatos="Texto"
}
}
});
#endregion
#region Seed Propiedad
#endregion
base.Seed(context);
}
}
公共类AppDataContext:DbContext
{
公共AppDataContext():基(“AppDataContext”)
{
}
公共DbSet模{get;set;}
公共DbSet Empresas{get;set;}
公共数据库集实体{get;set;}
公共数据库集Propiedades{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}
}
公共类AppDataContextInitializer:System.Data.Entity.DropCreateDatabaseAlways
{
受保护的覆盖无效种子(AppDataContext上下文)
{
#区域种子模块
Add(new Module(){Id=1,ModuleName=“Contabilidad”,FontAwesomeClass=“fa救护车”});
Add(new Module(){Id=2,ModuleName=“Recursos Humanos”,FontAwesomeClass=“fa heartbeat”});
Add(new Module(){Id=3,ModuleName=“Inventario”,FontAwesomeClass=“fa-anchor”});
Add(new Module(){Id=3,ModuleName=“Produccion”,FontAwesomeClass=“fa binocopars”});
Add(new Module(){Id=3,ModuleName=“Ventas”,FontAwesomeClass=“fa coffee”});
Add(new Module(){Id=3,ModuleName=“Compras”,FontAwesomeClass=“fa-calendar-o”});
Add(new Module(){Id=3,ModuleName=“Cotizaciones”,FontAwesomeClass=“fa building”});
#端区
#区域种子商店
Add(新的Empresa(){Id=1,
Nombre=“XYA”,
NIT=“900854343”,
nombrepresentantelegal=“卡拉佩雷斯”,
Telefonorepresentatelegal=“123”,
NombreContacto=“Esteban Andres”,
TelefonoContacto=“123”
});
#端区
#区域种子生态
context.Entidades.Add(new Entidad())
{
Id=1,
Nombre=“Empresa”,
Propiedades=新列表()
{
新Propiedad()
{
Codigo=“01”,
Nombre=“推特”,
TipoDeDatos=“Texto”
}
}
});
#端区
#前种子区
#端区
种子(上下文);
}
}
在这里,您对弹性有点困惑,请重试以获得一致性
连接弹性是指EF能够自动重试由于这些连接(网络不可用)中断而失败的任何命令
我希望你不要干涉这件事,因为EF做得很好。从您提到的示例来看,您似乎希望为实体使用缓存模式
我建议您可以尝试实现将上下文CRUD操作保持在一个位置
然后,您可以在类中实现缓存,并根据操作请求的类型获取/创建/使缓存项无效
确保cache-aside模式不会提供100%的一致性。例如,如果外部操作更改了数据库中的数据,则缓存不会意识到该更改
我想我粘贴了错误的链接,但是是的,谢谢你提供的信息!将它添加到构造函数中不起作用吗?