2

I need to implement the following pattern: https://msdn.microsoft.com/en-us/library/dn589799.aspx

I read on a book that following:

If you are using Entity Framework 6 (EF 6), the retry logic for transient faults is built in to the framework. When your EF 6 model is in your project, you need to create a new class that derives from DbConfiguration and customizes the execution strategy in the constructor. EF 6 will look for classes that derive from DbConfiguration in your project and use them to provide resiliency. To set this, add a new Class file to your project and add using statements for System.Data.Entity and System.Data.Entity.SqlServer.

The code is as follows:

  public class EFConfiguration : DbConfiguration
    {
        public EFConfiguration()
        {
            this.SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
        }
    }

However I am not sure how to implement it on my code:

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);
        }
    }
1
  • Doesn't it work to add it to your constructor? Commented Jul 6, 2015 at 8:51

1 Answer 1

1
+50

Here you're bit confused with resiliency and retry for consistency.

Connection Resiliency refers to the ability for EF to automatically retry any commands that fail due to these connection(Network unavailability) breaks.

I wish you may not want to interfere with this as EF does it very well. From the MSDN article that you mentioned, it seems like you want to use a caching pattern for your entities.

Well I can suggest you can try implementing UnitOfWork to keep your context CRUD operations at one place.

Then you can implement your cache in the UnitOfWork class and fetch/create/invalidate cache items based on type of operation request.

Make sure that cache-aside pattern doesn't give you 100% consistency. E.g. if an external operation changes the data in the DB then Cache would not be aware about that change.

Sign up to request clarification or add additional context in comments.

1 Comment

I think I pasted the wrong link, but yes thanks for the information!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.