簡體   English   中英

在 Asp.Net Core 中初始化 DBContext

[英]Initializing DBContext in Asp.Net Core

我想在我的項目中使用存儲庫和工作單元。 但是在 ASP.NET MVC 中我們想使用 DBContext 來使用這段代碼時

MyDbContext db=new MyDbContext();

但是在 ASP.NET Core 中編寫此代碼時它需要一個參數,因為在DbContext類中使用此代碼

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

錯誤:
錯誤 有什么問題?

public MyDbContext(DbContextOptions<MyDbContext> options)

您的MyDbContext類中沒有空的構造函數,因此您應該在構造函數中傳遞參數DbContextOptions<MyDbContext> options

例如你可以看到它 -> link1

您可以像這樣初始化您的數據庫上下文:

var optionBuilder = new DbContextOptionsBuilder<MyDbContext>();
optionBuilder.UseSqlServer("Server=localhost;...");
var context = new MyDbContext(optionBuilder.Options);

以前的代碼是配置連接的options ,然后使用這些選項創建MyDbContext

例如,如果您想使用InMemoryDatabase進行單元測試,您可以將其更改為:

var optionBuilder = new DbContextOptionsBuilder<MyDbContext>().UseInMemoryDatabase("testindDB")`;

您不應該實例化 DbContext,您應該將它作為構造函數參數請求到您的存儲庫。 然后您的 IOC 容器將在運行時提供 DbContext。 這確保您可以在整個給定的 ASP.NET Web 請求中使用相同的 DbContext,這將防止您可能會遇到的許多問題。

您可以在此處查看通用存儲庫的示例: http : //deviq.com/repository-pattern/

在 ASP.NET 應用程序中通常也不需要單獨的工作單元(但有時需要)。 這是因為您的請求應該非常小,並且您應該能夠在單個控制器或服務中完成大部分工作,然后只需通過存儲庫進行保存。 並不是說您永遠不需要 UoW,而是它比胖客戶端場景(例如 Windows 應用程序或服務)中的必要性要低。

你可以試試:在你的班級 UnitOfWork

private MyDBContext _context;

public UnitOfWork(MyDBContext context)
{
      _context = context;
}

在您的控制器中:

private UnitOfWork _unitOfWork;

public MoviesController(MyDBContext context)
{
      _unitOfWork = new UnitOfWork(context);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM