Cosa devo considerare quando si sposta un progetto utilizzando Entity Framework 6 da SQL Server a MySQL o PostgreSQL? [chiuso]

0

In primo luogo, devo confessare che questa domanda deriva principalmente dal modello di licenza ancora costoso utilizzato da Microsoft per SQL Server Standard. Anche perché la versione Web è ora disponibile solo tramite il provider di hosting Web. Per informazioni: è 1 licenza per 2 CPU Core + CAL per utente.

Da un contatto di vendita Microsoft ho parlato ieri: tra 550 e 800 € (notare l'incredibile differenza a seconda del rivenditore e immagino volume: 250 € vicino al 50%) per 2 Core + tra 280 e 293 € per utente.

Quindi, se potessimo spostare facilmente i nostri dati da SQL Server a qualsiasi motore open source (MySQL, PostgreSQL o NoSQL come Redis) adoriamo spendere questi soldi in tempo per apprendere nuove competenze invece di darlo a Microsoft per un sistema di grandi dimensioni per i nostri bisogni Quando scrivo sovradimensionato mi riferisco alle altre funzionalità incluse in Standard Edition invece di Web Edition (SSRS, SSAS, ecc ...)

La nostra architettura software è una Onion Architecture come proposto da Jeffrey Pallermo nel 2008:

Comepuoivederedall'immagineèstatousatopensandoaMVC.LoabbiamousatoconWebAPI2checondividelostessotipodifilosofia.

Ciaffidiamoai principi SOLID finché abbiamo tempo per farlo bene Quindi abbiamo utilizzato l'iniezione di dipendenza con istanza di richiesta utilizzando Ioc Container Autofac. Ogni azione del controller si rivolge principalmente ai servizi Dominio del livello principale dando loro l'implementazione IEntityRepository corretta risolta quando il controller viene istanziato durante il ciclo di vita delle richieste Asp.Net. Quindi, in teoria, abbiamo solo dipendenze sull'interfaccia IEntityRepository che fa il suo lavoro come "Contratto":

 public interface IWriteBaseRepository<TEntity> : IReadBaseRepository<TEntity>, IDisposable
    where TEntity : class
{
    TEntity Add(TEntity entity);

    IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities);

    TEntity Update(TEntity entity);

    TEntity AddOrUpdate(TEntity entity);

    IEnumerable<TEntity> AddOrUpdate(IEnumerable<TEntity> entities);

    void Delete(TEntity entity);

    void SaveChanges();

    IEnumerable<string> GetPendingChanges(TEntity entity, string identifierPropertyName, Dictionary<string, string> includeProperties = null);
}

Per la parte repository abbiamo usato l'approccio Code First e non c'è assolutamente alcuna intelligenza nel DB (grazie a Uncle Bob per le sue chiare visioni). I nostri repository restituiscono principalmente DbSet come IEnumerable. Quindi potresti aver intuito che utilizziamo strongmente il caricamento pigro per tipo di "Transito" nei nostri Servizi di dominio.

Quindi conoscendo i pochi che ho scritto e la tua esperienza passata sul passaggio da un motore DB a un altro, qualsiasi feedback sarebbe molto apprezzato prima di trovare il coraggio di immergermi in profondità in PostgreSQL che non mi ricorda un paio di ore così facili primo tentativo di Oracle nel 2002.

    
posta Guillaume RAYMOND 21.10.2016 - 15:04
fonte

1 risposta

3

Le tue preoccupazioni principali sono:

  1. Trovare un modo per rendere compatibili le tue query% di% quq con Linq compatibili con Postgres.

  2. Esame delle differenze tra i fornitori nelle istruzioni SQL e nelle funzionalità del database che stai utilizzando.

  3. Ricerca di sostituti per le funzionalità specifiche del fornitore che stai utilizzando in SQL Server che non sono presenti in Postgres.

Per il tuo fornitore di IQueryable , darei un'occhiata a dotConnect per PostGresql .

    
risposta data 22.10.2016 - 00:57
fonte

Leggi altre domande sui tag