我正在尝试创建一个 Web API。我在这里使用 Entity Framework ,代码优先的方法。
这是一个 n 层架构。意思是,我在一个解决方案中创建了多个项目,如下所示。
我有一个 Controller 方法,它是一个 get 方法。我会将 userid 作为参数传递。
[Route("api/[controller]")]
[ApiController]
public class BankController : ControllerBase
{
private readonly IBankApplicationDAL _bankAPI;
public BankController(IBankApplicationDAL bankAPI)
{
_bankAPI = bankAPI;
}
[HttpGet("{userId}")]
public IActionResult GetAccountDetailsId(int userId)
{
try
{
var values = _bankAPI.GetAccountDetailsId(userId);
return Ok(values);
}
catch
{
throw;
}
}
}
在DAL层,这是我的:
using BankApplicationAPI.Model;
using BankApplicationAPI.Data;
using System;
using System.Linq;
namespace BankApplicationAPI.DAL
{
public class BankApplicationDAL : IBankApplicationDAL
{
DataContext context;
public AccountDetails GetAccountDetailsId(int userId)
{
try
{
var values = context.AccountDetails.FirstOrDefault(x => x.UserId == userId); // context is null here.
return values;
}
catch (Exception ex)
{
throw;
}
}
}
}
这是我拥有的 DataContext
:
namespace BankApplicationAPI.Data
{
public class DataContext : DbContext
{
public DataContext(DbContextOptions<DataContext> options) : base(options) { }
public DbSet<AccountDetails> AccountDetails { get; set; }
public DbSet<TransactionDetails> TransactionDetails { get; set; }
}
}
当我运行这个应用程序时,我得到一个异常,指出 DAL 方法中的上下文为空(我已放置注释的地方)。
如何为 DataContext
创建对象?有人能帮我一下吗?这很重要。非常感谢。
编辑
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
var connection = @"Server=.\sqlexpress;Database=AppDB;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<DataContext>(x => x.UseSqlServer(connection));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddSingleton<IBankApplicationDAL, BankApplicationDAL>();
}
最佳答案
你应该使用这个改变:
public class BankApplicationDAL : IBankApplicationDAL
{
DataContext _context;
public BankApplicationDAL(DataContext context)
{
_context = context;
}
public AccountDetails GetAccountDetailsId(int userId)
{
try
{
var values = context.AccountDetails.FirstOrDefault(x => x.UserId == userId); // context is null here.
return values;
}
catch (Exception ex)
{
throw;
}
}
}
关于c# - 在 Web API、 Entity Framework 中使用 n 层体系结构时,数据访问层中的上下文为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55683181/