【问题标题】:Add schema to each query in Entity Framework 6将架构添加到 Entity Framework 6 中的每个查询
【发布时间】:2014-09-22 22:02:28
【问题描述】:

首先,我是 EF 新手,但我是一位经验丰富的 NHibernate 用户...

我正在尝试更新与现有数据库通信的现有 EF 存储库层,以在提交给数据库的每个查询中自动包含架构。澄清:

  • 数据库表已经存在,但它们已移动到 SQL Server 中的新架构中
  • C# 类模型已经存在

数据库不是每次都创建的,因为它已经存在,所以永远不会调用 DbContext 的 OnModelCreating 方法。这些类有来自 DataAnnotations 命名空间的 [Key] 等,所以我猜它首先是代码。

在 NHibernate 中,这很容易,因为我可以在构建配置时添加默认架构,这样每个查询都会自动添加架构,而不管现有的类模型如何 - 数据库和类模型不需要更新了。

这在实体框架中是否可行,如果可以,我将把这个覆盖放在哪里?如果没有,我如何更改 EF 以将模式注入每个查询?我可以重写查询生成函数吗?

谢谢

【问题讨论】:

    标签: entity-framework schema entity-framework-6


    【解决方案1】:

    在您的 DbContext 中添加以下内容

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("myNewSchema");
    }
    

    如果在其他地方没有定义模式,这将在全局范围内处理它。我认为在别处明确定义的架构将覆盖您在此处设置的默认架构。

    【讨论】:

    • 嗯,这就是我的想法……但是我的应用程序运行时不会调用此方法。这个方法应该在什么时候运行?每次实例化dbcontext?
    • 这是初始化过程的一部分,因此它应该只在给定的应用程序域中运行一次。这就是为什么代码中的第一个查询比其他所有查询慢得多的部分原因。您是直接从 DbContext 继承的吗?你能抛出一个 System.Diagnotics.Debugger.Launch();在该方法中,然后编写一个带有简单查询的单元测试。
    猜你喜欢
    • 2014-03-15
    • 2015-11-09
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多