我正在尝试使此tutorial适应如何在asp.net核心mvc中制作购物车,但是我在db上下文方面遇到了麻烦。我收到以下错误:
错误CS7036没有给出与“ StoreContext.StoreContext(DbContextOptions)”的所需形式参数“ options”相对应的参数
我已经看过这个question并实现了解决方案,但仍然不能解决我的问题。
这是我的代码:
public class ShoppingCart
{
private readonly StoreContext db;
public ShoppingCart(StoreContext context)
{
db = context;
}
string ShoppingCartId { get; set; }
public const string CartessionKey = "CartId";
public static ShoppingCart GetCart(HttpContext context)
{
var cart = new ShoppingCart();
cart.ShoppingCartId = cart.GetCartId(context);
return cart;
}
}
如果我按照建议将代码更改为以下内容:
public static ShoppingCart GetCart(HttpContext context)
{
**var cart = new ShoppingCart(db);**
cart.ShoppingCartId = cart.GetCartId(context);
return cart;
}
然后我收到一个新错误:
System.NullReferenceException:对象引用未设置为对象的实例。
因此,尽管进行了更正,但似乎仍无法正确注入数据库。有指导吗?
这里是存储上下文:
public StoreContext(DbContextOptions<StoreContext> options)
: base(options)
{
}
public DbSet<Product> Product { get; set; }
public DbSet<Supplier> Supplier { get; set; }
public DbSet<Cart> Cart { get; set; }
public DbSet<Order> Order { get; set; }
public DbSet<OrderDetail> OrderDetail { get; set; }
}
这是我启动时的连接字符串:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext<StoreContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("StoreContext")));
}
答案 0 :(得分:0)
嘿,您能告诉我们您的startup.cs文件吗?我认为这与它有关
好吧,我完全错过了这个问题,很糟糕,显然您是在创建购物车新类而没有传递注入顶部的上下文,
尝试将行更改为
var cart = new ShoppingCart(db);