Entity Framework 有多个数据库服务器

Entity Framework with mutliple database servers

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

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

对于这种情况,NHibernate 是比 Entity Framework 更好的解决方案吗?或者还有别的吗?

我已经找到了几个关于这个的答案,但最近没有找到。

Ps:代码优先不是必需的,我们愿意根据需要进行更改。

非常感谢! :-)

使用 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 数据库的 schemacreation (SchemaExport class)

  • 使用 futures 读取批处理