2015-06-04 2 views
1

Мне нужно создать приложение для веб-баз данных в Asp.Net и C#, которое будет работать со всеми поставщиками баз данных, такими как SQL Server, MySQL и т. Д. Если у клиента есть SQL Server небольшое изменение в программа должна заставить мое веб-приложение работать с SQL Server, если у клиента есть MySQL, он также должен работать с MySQL.Создание веб-приложения, которое поддерживает несколько бэкендов

Есть ли какие-либо инструменты для этого? или я должен следовать любым процедурам программирования или методам его достижения?

Так направляйте меня для достижения вышеуказанного сценария.

+0

Посмотрите на MVC, тогда есть разделение проблем. –

+0

MVC был бы хорошим выбором, но если вы хотите придерживаться Asp.net, вы можете использовать Microsoft Enterprise Library, которая имеет общие функции db, такие как DBCommand, DBReader, DBAdapter и т. Д., Просто передайте правильную базу данных и используйте эту общую библиотеку.Я использовал это в моем проекте, у которого были как SQL, так и Oracle DB. – Sushil

+0

Вы также захотите избежать прямого использования запросов к базе данных в своем приложении. Вы должны использовать хранимые процедуры, чтобы имена и параметры процедуры, переданные из приложения, были одинаковыми независимо от используемой базы данных. – Tim

ответ

0

Я бы использовал dapper, который является микро ORM для .Net. Он поддерживает SQLite, SQL Server CE, Firebird, Oracle, MySQL, PostgreSQL и SQL Server.

Лично я был очень доволен использованием dapper, и он фактически разработан и используется Stack Overflow.

0

Использование SimpleData http://simplefx.org/simpledata/docs/ очень проста в использовании и поддерживает: SQL Server 2005, а затем SQL Server Compact Edition 4.0 оракул VistaDB MySQL 4.0 и более поздних SQLite 3.0 и выше PostgreSQL sqlanywhere Informix Microsoft Access 2000 , 2003 и 2007 гг.

2

Для обеспечения независимости внешних систем (например, базы данных), вы захотите архитектовать свое решение, чтобы говорить только с интерфейсом. Затем вы можете использовать несколько методов, включая инъекцию зависимостей, чтобы решить, какую реализацию использовать во время выполнения.

Чтобы упростить здесь, позвольте нам просто использовать завод.

Прежде всего, нужно решить, что должна делать ваша база данных. Простой пример - мы будем хранить или извлекать целое число. Итак, сначала давайте определим этот интерфейс. Я просто оставляю асинхронные вещи для простоты, но вы действительно этого хотите, когда разговариваете с БД.

public interface IDatabase{ 
    void Store(int value); 
    int Get(); 
} 

Итак, теперь у нас есть что-то, что наш код вызова может использовать для обозначения ЛЮБОГО типа базы данных.

Далее нам понадобятся различные типы классов для каждого DB

public class SqlServerDB : IDatabase{ 
    public void Store(int value){//store it} 
    public void Get(){//get it} 
} 

public class MySqlDB : IDatabase{ 
    public void Store(int value){//store it} 
    public void Get(){//get it} 
} 

Опять же, вы не хотите, чтобы вызывающий код, чтобы узнать о реализации, так что вы не можете создать экземпляр объекта с только новым , Вместо этого вам нужно будет создать класс, который знает о различных типах баз данных.

Я использую строку здесь, но вы должны использовать перечисление в реальном коде.

public static class DatabaseFactory{ 
    public static IDatabase GetDatabase(string dbName){ 
     switch(dbName){ 
      case "sqlserver": 
       return new SqlServerDB(); 
      case "mysql": 
       return new MySqlDB(); 
      default: 
       throw new ArgumentException("Don't know about that DB"); 
     } 
    } 
} 

Теперь ваш код вызова не должен изменяться с помощью БД. Если у вас есть объект конфигурации (например, встроенный в .NET), вы можете легко изменить используемую базу данных.

IDatabase myDB = DatabaseFactory.GetDatabase(Config.DBName); 
myDB.Store(191); 

int result = myDB.Get(); 
//result will equal 191! 
Смежные вопросы