c# - 在单个上下文中使用多个模式的 Entity Framework 和迁移

标签 c# entity-framework ef-code-first entity-framework-6

我正在使用 Entity Framework Code First 开发 Multi-Tenancy 应用程序。每个租户在数据库中都有不同的模式,但应用程序将有一个适用于所有租户的上下文和模型。

Entity Framwork 6 能够在同一个环境中使用多个模式和多个上下文 数据库,但我没有找到在单个上下文中使用多个模式的方法。

我已经(通过命令行)生成了到默认“dbo”模式的迁移。我想使用这些迁移更新其他模式。

最佳答案

虽然我同意多上下文绝对是更好的方式(这也是我设置自己的项目的方式),但我想回答您最初的问题,即如何在单一上下文中使用多个模式:

在每个模型的映射配置中,您可以调用“ToTable(myTableName, mySchema)”来修改表所属的模式:

public class MyEntityMap : EntityTypeConfiguration<MyEntity>
{
    public MyEntityMap ()
    {
        HasKey(t => t.MyId);
        Property(t => t.MyId)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        ToTable("MyEntity", "MySchema");
    }
}

这将允许您在维护单个上下文的同时分别设置每个表的架构。

由于您声明要在不同的模式中使用相同的模型,这使得在不了解您的设置的更多信息的情况下变得更加困难。如果您只与少数客户打交道并且不介意在代码中维护他们的模式,那么您可以简单地为每个模式创建一个映射(如上所述),然后为每个客户添加一个新的 DbSet。如果您正在尝试使其可扩展到大量客户,那么我强烈建议您研究一种不同的方法,因为当您的 dba 在不同模式中看到 100 多个相同的表而不是在每个表上使用 customerID 列时,他可能会尖叫.

关于c# - 在单个上下文中使用多个模式的 Entity Framework 和迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15479606/

相关文章:

c# - 使用转换为字符串的数据列表填充 Html.TextBox

c# - 调试单元测试时执行随机跳转到抛出的异常

c# - 单击按钮后为我的表选择一个类? (HTML 表格)

c# - 低效的 Entity Framework 查询

c# - 在表中,列数据类型为 varchar,使用 linq to sql 仅检索列中数字/数字的值

c# - 如何使用 AddOrUpdate 的多个条件来确定数据库是否应该添加模型或更新?

asp.net-mvc - Entity Framework DbSet.Find 抛出异常

entity-framework-4.1 - 在 Entity Framework 4.1 中同步反向关联的指南

c# - IIS 随机错误请求 - 主机名

entity-framework - CREATE DATABASE 权限在数据库 'master' Entity Framework 迁移中被拒绝