實體框架和在單個上下文中具有多個模式的遷移

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

我正在使用Entity Framework Code First開發一個多租戶應用程序。每個租戶在數據庫中都有不同的模式,但應用程序將為所有租戶提供單個上下文和模型。

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。如果你試圖讓這個可擴展到大量客戶,那麼我強烈建議尋找一種不同的方法,因為當他在不同的模式中看到100多個相同的表而不是在每個表上使用customerID列時,你的dba可能會尖叫。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因