Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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# 如何用实体框架实现瞬时故障处理模式_C#_Asp.net_Asp.net Mvc_Entity Framework_Azure Sql Database - Fatal编程技术网

C# 如何用实体框架实现瞬时故障处理模式

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

我需要实现以下模式:

我在一本书上读到如下内容:

如果您使用的是实体框架6(EF 6),则 瞬时故障内置于框架中。当您的EF 6型号 在项目中,您需要创建一个从 DbConfiguration并自定义中的执行策略 构造器。EF6将查找从 在项目中配置数据库,并使用它们提供恢复能力。到 设置此选项后,将新类文件添加到项目中,并使用 System.Data.Entity和System.Data.Entity.SqlServer的语句

代码如下:

  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%的一致性。例如,如果外部操作更改了数据库中的数据,则缓存不会意识到该更改


我想我粘贴了错误的链接,但是是的,谢谢你提供的信息!将它添加到构造函数中不起作用吗?