我正在使用 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/