.net - 在具有相同架构的多个数据库中使用 EF(或另一个 .NET ORM)

标签 .net entity-framework nhibernate orm

请原谅我对 EF 和/或 ORM 术语的无知。我熟悉 ORM 及其用途,但无法找到是否有支持我的用例的对象。

我有针对不同客户端的独特数据库,分布在 3 个数据库服务器上。然而,这些不同数据库的模式是精确的。我的问题是,如何才能让 EF(或另一个 .NET orm [NHibernate?])支持这种类型的架构?当我从数据库生成模型时,它似乎为该单个数据库创建了一个连接字符串。我需要它来确定在运行时使用的正确连接字符串。

那么,为每个唯一的客户端数据库保存生成模型(无法扩展),我该怎么办?

感谢您的帮助或指导。

最佳答案

不可能编写一个通用答案,因为每个 ORM 都有自己的规则(我将其设为社区 wiki 来合并其他答案)。

Entity Framework

它将使用哪个数据库通过连接字符串声明(通常在 app.config 文件中)。当您创建上下文时,它将读取默认上下文,但有一个构造函数接受它作为参数:

string connectionString = "...";
using (var repository= new MyRepository(connectionString))
{
}

通常 EF 连接字符串(在其自己的有关模型的数据之后)定义提供者的标准连接字符串:

provider=System.Data.SqlClient;provider connection string= "data source=tcp:serverName;initial catalog=databaseName;user id=username;

不要忘记从代码中转义 "。您可以从 app.config 中读取完整的连接字符串(以使用它,例如作为搜索和替换的模板) > 文件。在这种情况下,您可以说:“让我们使用与 Microsoft SQL Server 的连接,这是它的连接字符串”。只需将初始目录更改为您要连接的数据库到这里你就完成了。

DevExpress

string connectionString = "...";
XpoDefault.DataLayer = XpoDefault.GetDataLayer(
    connectionString,
    AutoCreateOption.DatabaseAndSchema);

光速

继承自ConnectionStrategy并覆盖Connection属性。要使用它,您可以设置 ModelUnitOfWork 对象的 ConnectionStrategy 属性。

NHibernate

继承NHibernate.Connection.DriverConnectionProvider类并重写GetConnection()方法。请参阅this example了解更多详情。

关于.net - 在具有相同架构的多个数据库中使用 EF(或另一个 .NET ORM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20427051/

相关文章:

.net - 使用 Windows.Forms.Webbrowser.Navigate() 时禁用 Javascript 弹出窗口

c# - ExecuteSqlCommand并行执行

c# - 使用 Entity Framework 加载子实体时性能不佳

mysql - Hibernate,如何建模这种关系

c# - 没有外键的 NHibernate 映射引用

c# - 如何使用带有 CancellationToken 的任务包装单个同步操作?

.net - 使用ConfigurationManager.OpenMappedExeConfiguration时如何从定义为NameValueSectionHandler的ConfigSection中获取值

c# - 从 ServiceHost 获取端口号

c# - 代码优先迁移是否自动在服务器上运行?

nhibernate - 使用 NHibernate 的 WCF 数据服务 (OData) 是否成功?