實體框架核心使用多個DbContexts

asp.net-core-1.1 c# dbcontext entity-framework-core

我有一個問題,當我嘗試訪問我的PartsDbContext中的字段時,我收到以下錯誤:

System.Data.SqlClient.SqlException:'無效的對象名'fieldName''

這似乎是因為我正在嘗試使我的PartsDbContext使用與我的ApplicationDbContext相同的數據庫,該數據庫與Identity一起使用。我需要知道如何設置第二個dbcontext以使用使用/創建不同數據庫的EF核心。

我已經嘗試創建第二個連接字符串,但這會讓我犯這個錯誤:

System.Data.SqlClient.SqlException:'無法打開登錄請求的數據庫“PartsDb”。登錄失敗。用戶'DESKTOP-4VPU567 \ higle'登錄失敗。'

這是我的代碼:

appsettings.json

"ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-PrecisionCustomPC-b14db89e-86ad-4855-a17f-ac64a04339aa;Trusted_Connection=True;MultipleActiveResultSets=true",
    "PartsConnection":  "Server=(localdb)\\mssqllocaldb;Database=PartsDb"
},
"Logging": {
    "IncludeScopes": false,
    "LogLevel": {
        "Default": "Warning"
    }
}

PartsDbContext.cs

public class PartsDbContext : DbContext
{
    public DbSet<PartsViewModels.Tower> Towers { get; set; }
    public DbSet<PartsViewModels.Motherboard> Motherboards { get; set; }

    public PartsDbContext(DbContextOptions<PartsDbContext> options)
        : base(options)
    {
    }
}

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddDbContext<ApplicationDbContext>(options =>
         options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddEntityFramework()
        .AddDbContext<PartsDbContext>(options =>
          options.UseSqlServer(Configuration.GetConnectionString("PartsConnection")));

    services.AddMvc();

    services.AddAuthorization(options =>
    {
        options.AddPolicy("RequireAdminRole", policy => policy.RequireRole("Admin"));
    });

    // Add application services.
    services.AddTransient<IEmailSender, AuthMessageSender>();
    services.AddTransient<ISmsSender, AuthMessageSender>();
}

AdminController.cs

[Authorize(Policy = "RequireAdminRole")]
public class AdminController : Controller
{
    private readonly PartsDbContext _context;

    public AdminController(PartsDbContext context)
    {
        _context = context;
    }

    public IActionResult Index()
    {
        return View();
    }

    public IActionResult Towers()
    {
        var model = _context.Towers.ToList();
        return View(model);
    }
}

line var model = _context.Towers.ToList();是錯誤出現的地方。

再來一次。我想設置我的PartsDbContext以與EF-Core自動創建數據庫的方式一起使用Entity Framework Core。

一般承認的答案

我想到了。這主要是因為我不小心刪除了Identity正在使用的數據庫,我需要弄清楚如何將其恢復。

顯然,我的連接字符串沒有任何問題。我只需要進入包管理器並按以下順序鍵入這些命令:

  1. Add-Migration init -Context PartsDbContext
  2. Update-Database -Context PartsDbContext

我發現了這一點,因為這是我必須要做的才能使我的ApplicationDbContext再次工作,並且事實證明,當您使用單個用戶身份驗證在Visual Studio中創建新的MVC核心Web應用程序時,此步驟已完成。

所以基本上添加更多DbContexts的步驟是:

  1. 創建一個DbContext類
  2. appsettings.json中為該DbContext創建一個Connection字符串
  3. 在的DbContext添加到您的Startup.cs配置服務
  4. 在將使用它的控制器中設置DbContext。
  5. 打開包管理器並運行上面的2行。 (如果“-Context”不起作用,請嘗試“--context”
  6. 運行你的程序,讓EntityFrameworkCore處理剩下的事情。


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow