今天,我们正在为使用SQL Server CE和Entity Framework 6.13作为ORM(代码优先)的Windows环境开发解决方案。但是,我们正在研究将其移植到Linux环境的可用性,当然,由于Linux不支持SQL Server数据库,我们打算在Linux机器上使用SQLite并继续在Windows机器上使用SQL Server。并且解决方案(.sln)对于两种环境都是相同的。
那么,是否可以让实体框架模型连接多个数据库(SQLServer,SQLite,..)?我应该为每个数据库创建一个模型吗?
对于这种情况,NHibernate是一个比实体框架更好的解决方案吗?或者还有别的吗?
我已经找到了几个答案,但最近没有人。
Ps:首先不需要代码,如果需要,我们会更改代码。
非常感谢! : - )
答案 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)的强大联系作斗争,例如:
我的建议是从你更熟悉的事情开始。
请注意,我有偏见,但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类)