首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DbContext动态映射表

DbContext动态映射表
EN

Stack Overflow用户
提问于 2011-09-30 23:03:22
回答 1查看 1.4K关注 0票数 2

如果我有一个在上下文创建期间创建的连接字符串的dbContext,然后我想根据其中的一些information....how映射表名,我会将该数据传递给表映射吗?例如:

代码语言:javascript
复制
private object createContext(string name, string country)
{
    DbConnectionstringbuilder conn = new DbConnectionstringbuilder();
    conn.Add("Provider", "System.Data.SqlClient");
    conn.ConnectionString = string.Format(name, "dbName_" + country + "_moreName");   
    //maybe an if/else since we will say there are more names and countries
    return new object(conn.ToString());
}

现在,当您初始化dbcontext时,它类似于:

代码语言:javascript
复制
public class object : DbContext
{
    public object(string conn):base(conn)
    {
        DbDatabase.SetInitializer<object>(null);
    }
//insert dbset and mapping config calls here
}

现在,我希望将表映射为"table_“+ country + "_endtablename";我猜如何将数据传递给映射调用?

这些表映射到使用此格式的现有数据库。国家实际上来自登录用户的凭据,因此基于位置等。我只需要找到一种方法来访问这个国家代码,它是后者创建的dbcontext中基类的内部构造函数。

EN

回答 1

Stack Overflow用户

发布于 2011-10-01 03:00:05

好吧..。我会在您的DbContext类上创建一个工厂方法,然后为您希望支持的每个国家实现派生的DbContext类。这将使您能够自定义每个国家/地区的数据库初始化器。由于所有派生的、具体的DbContexts都使用相同的抽象父级,因此您可以将它们转换为父级并使用它们。在初始化器中,您可以使用fluent映射来设置数据库名称并映射所需的表名。EF Code First的美妙之处在于,它允许您使用标准的OO模式(如工厂方法)来解决您所描述的问题。

但是,我不得不说,您可能需要重新考虑您的表命名方案。您发现这很困难的原因是因为这是一个有点不寻常的设置。最终用户通常不会直接对数据库中的表进行查询,因为执行业务规则太难了。除非有技术原因,您要求每个数据库中的表具有国家编码名称,否则我会让技术驱动您的表命名方案,并让您的客户驱动最终用户体验。我认为国家编码的数据库名称就足够了。这实现了数据分离,但使编码变得更简单,并使为一个数据库编写的查询在另一个数据库上工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7612340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档