我正在尝试创建一个Web API。我在这里使用实体框架,代码第一种方法。
这是一个n层架构。意思是,我在一个解决方案中创建了多个项目,如下所示。
我有一个控制器方法,这是一个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方法中的上下文为null(我已经放置了注释)。
如何为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;
}
}
}