请原谅我对 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/