具有多个数据库服务器的实体框架

时间:2015-05-12 18:56:12

标签: c# entity-framework nhibernate multi-database

今天,我们正在为使用SQL Server CE和Entity Framework 6.13作为ORM(代码优先)的Windows环境开发解决方案。但是,我们正在研究将其移植到Linux环境的可用性,当然,由于Linux不支持SQL Server数据库,我们打算在Linux机器上使用SQLite并继续在Windows机器上使用SQL Server。并且解决方案(.sln)对于两种环境都是相同的。

那么,是否可以让实体框架模型连接多个数据库(SQLServer,SQLite,..)?我应该为每个数据库创建一个模型吗?

对于这种情况,NHibernate是一个比实体框架更好的解决方案吗?或者还有别的吗?

我已经找到了几个答案,但最近没有人。

Ps:首先不需要代码,如果需要,我们会更改代码。

非常感谢! : - )

1 个答案:

答案 0 :(得分:1)

使用NHibernate(使用FluentNHibernate)和代码就像

using NHCfg = NHibernate.Cfg;

var config = new Configuration().AddMappingsFromAssembly<Entity>();
if (UseSqlCe)
{
    config.SetProperty(NHCfg.Environment.Driver, typeof(SqlCeDriver).AssemblyQualifiedName);
    config.SetProperty(NHCfg.Environment.Dialect, typeof(SqlCeDialect).AssemblyQualifiedName);
}
else if (UseSqlite)
{
    config.SetProperty(NHCfg.Environment.Driver, typeof(Sqlite20Driver).AssemblyQualifiedName);
    config.SetProperty(NHCfg.Environment.Dialect, typeof(SqliteDialect).AssemblyQualifiedName);
}

使用EF,它类似于http://rob.conery.io/2014/02/05/using-entity-framework-6-with-postgresql/,你需要与MSSqlServer(CE)的强大联系作斗争,例如:

  • 仅迁移或代码优先创建?为MSSQL工作
  • 默认架构为'dbo'

我的建议是从你更熟悉的事情开始。

请注意,我有偏见,但NHibernate有一些原因:

  • 在内存中轻松测试sqlite和

    config.SetProperty(NHibernate.Cfg.Environment.ConnectionProvider, typeof(SingletonConnectionProvider).AssemblyQualifiedName);
    
    /// <summary>
    /// ensures that the same connection is used for all sessions. Useful for in-memory databases like sqlite
    /// </summary>
    public class SingletonConnectionProvider : DriverConnectionProvider
    {
        private IDbConnection _theConnection;
    
        public override void CloseConnection(IDbConnection conn)
        {
        }
    
        public override IDbConnection GetConnection()
        {
            if (_theConnection == null)
            {
                _theConnection = base.GetConnection();
            }
            return _theConnection;
        }
    }
    
  • bioth数据库的架构创建(SchemaExport类)

  • 使用期货阅读批处理