【问题标题】:Entity Framework 7 - single dbcontext, different schemasEntity Framework 7 - 单个 dbcontext,不同的模式
【发布时间】:2016-03-01 04:00:31
【问题描述】:

我有一个 ASP.NET 5 web api,我希望将一个 dbcontext 用于多个模型。这些模型指向我的数据库中具有不同架构的表。

以下模型包含多个类

  • 授权
  • 学习

简化一点:Auth.cs

public class MyContext : DbContext
    {
        public DbSet<Auth.App> Apps { get; set; }
        public DbSet<Auth.Permission> Permissions { get; set; }
        public DbSet<Study.StudyLink> StudyLinks { get; set; }
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        foreach (var entity in modelBuilder.Model.GetEntityTypes())
        {
            if (entity.Name.Contains("Auth+"))
            {
                modelBuilder.HasDefaultSchema("auth"); // Switch to the auth schema
                modelBuilder.Entity(entity.Name).ToTable(entity.Name.Replace("myproject.Models.Auth+", string.Empty));
            }
            if (entity.Name.Contains("Study+"))
            {
               modelBuilder.HasDefaultSchema("study"); // Switch to the study schema
               modelBuilder.Entity(entity.Name).ToTable(entity.Name.Replace("myproject.Models.Study+", string.Empty));
            }
        }
    }

仅使用 Auth 模型,我能够更改默认模式并且可以毫无问题地访问表。当我添加 Study 模型时,modelBuilder.Model.GetEntityTypes() foreach 会同时显示 Auth 和 Study 模型,切换默认架构也是如此,这意味着我无法访问 Auth 架构,因为它切换到学习。

有什么方法可以在不使用 HasDefaultSchema() 的情况下应用架构,还是需要为我在数据库中使用的每个架构创建一个新的上下文?

谢谢

【问题讨论】:

    标签: asp.net-mvc entity-framework web-services


    【解决方案1】:

    您可以将架构添加到 .ToTable("tableName", "schemaName"):

    if (entity.Name.Contains("Auth+"))
    {
       modelBuilder.Entity(entity.Name).ToTable(entity.Name.Replace("myproject.Models.Auth+", string.Empty),"auth");
    }
    

    https://msdn.microsoft.com/en-us/data/jj591617.aspx?f=255&MSPPError=-2147217396#2.3

    【讨论】:

    • 就这么简单.. 非常感谢史蒂夫 - 这比我想象的要简单得多!
    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    相关资源
    最近更新 更多