实体框架7 - 单个dbcontext,不同的模式

时间:2016-02-29 19:16:57

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

我有一个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()的情况下应用架构,或者是否需要为我在数据库中使用的每个架构创建新的上下文?

由于

1 个答案:

答案 0 :(得分:1)

您可以将架构添加到.ToTable(&#34; tableName&#34;,&#34; schemaName&#34;):

$(function() {

  var ranges = [{
    lower: 500,
    upper: 1000
  }, {
    lower: 1100,
    upper: 2000
  }, {
    lower: 2100,
    upper: 5000
  }, {
    lower: 5100,
    upper: 10000
  }, {
    lower: 11000,
    upper: 20000
  }, {
    lower: 21000,
    upper: 50000
  }, ];
  var wslider = $("#sliderBar").width() / (ranges.length);
  for (var i = 0; i < ranges.length; i++) {
    var range = $('<div class="rangedot"><div class="intervalCircle"></div></div>');
    var left = (100 / (ranges.length) * i);
    rangeleft = "calc(" + left + "% - 2px)";
    range.css({
      left: rangeleft,
      width: wslider
    });
    range.on("click", function(idx) {
      return function() {
        var sliderleft = wslider * idx;
        $("#sliderInterval").animate({
          left: sliderleft
        });
        $("#budgetAmount").text("$" + ranges[idx].lower.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + " - " + "$" + ranges[idx].upper.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","));
      };
    }(i));
    $("#sliderBar").append(range);
    $("#sliderInterval").css("width", wslider + "px");
  }
  //$("#sliderInterval").show().text("BUDGET");
  $("#budgetAmount").show().text("$500 - $1,000");
});

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