首页 新闻 会员 周边

求教Entity Framework 数据库架构名问题

0
悬赏园豆:20 [已解决问题] 解决于 2014-03-03 09:27

现有两个相同结构的数据库,架构名称不同,第一个数据库为[cw1].[database1],第二个为[cw2].[database2],其中[cw1]、[cw2]为架构名称,[database1]、[database2]为数据库名称。在EF中EntityTypeConfiguration中,添加参数schemaName传递到 this.ToTable("表1", schemaName)
通过 Context context = new Context(conn, “cw1”, false);创建实例,执行查询等操作成功,接着调用 Context context2 = new Context(conn, “cw2”, false);
返回的查询中生成的SQL语句却都带这[cw1],而没有变成[cw2]

经跟踪,参数[cw2]已经传递到DbContext,似乎DbContext没有重新执行ModelCreate,而是直接使用了上次生成的Model

求教在第二次执行Context context2 = new Context(conn, “cw2”, false);时,重新创建模型,强制执行ModelCreate?

剑灵的主页 剑灵 | 初学一级 | 园豆:186
提问于:2013-11-28 16:53
< >
分享
最佳答案
0

等了这么久没发现标准答案,经分析是由于Context的Cache造成的,标准解决方法为自定义CacheName:

1、为Context增加IDbModelCacheKeyProvider接口扩展;

2、实现IDbModelCacheKeyProvider的CacheKey

public string CacheKey
{
        get { return this.SchemaName; }
}

3、初始化Context时为SchemaName赋唯一值

剑灵 | 初学一级 |园豆:186 | 2014-03-03 09:26

有具体代码吗? 我现在也遇到Entity Framework6要动态切换Schema问题,而OnModelCreating只执行一次,换了connString后Schema还是没变过来

魔方程 | 园豆:152 (初学一级) | 2021-06-09 09:20
其他回答(2)
0

dbContext.Dispose 以后重新创建上下文试试

收获园豆:10
Nature Q | 园豆:342 (菜鸟二级) | 2013-11-28 17:17
0

context2 = new Context(conn, “cw2”, false); 这样用感觉怪怪的,似乎有点偏门。

我一般是使用  

public class DBContext1 : DbContext{public DBContext1() : base(ConnectionString){}}

public class DBContext2 : DbContext{public DBContext2() : base(ConnectionString){}}

收获园豆:10
anytech | 园豆:212 (菜鸟二级) | 2013-12-02 20:58

我也觉得这样做挺好的

支持(0) 反对(0) kuangkro | 园豆:241 (菜鸟二级) | 2013-12-06 13:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册