NUnit 中 DbContextOptionsBuilder 的数据类型
Data type for DbContextOptionsBuilder in NUnit
我正在尝试查找 DbContextOptionsBuilder 的数据类型。
我有一个 Entity Framework DBContext 文件。我使用 NUnit 设置了一个 InMemory 数据库。我如何在没有 var 的情况下进行设置?我知道最好的做法是为每个测试都有一个干净的数据库,但只是想学习,并为多个测试拥有一个数据库。
电子 DBContext 文件
public partial class ElectronicsContext : DbContext
{
public ElectronicsContext()
{
}
public ElectronicsContext(DbContextOptions<ElectronicsContext> options)
: base(options)
{
}
public virtual DbSet<Product> Product { get; set; }
public virtual DbSet<ProductCategory> ProductCategory { get; set; }
N单元测试
public class TestClass
{
[SetUp]
public void TestProducts()
{
// This Works
// var context = new DbContextOptionsBuilder<ElectronicsContext>()
// .UseInMemoryDatabase(databaseName: "ProductsTest")
// .Options;
// This does not work
DbContextOptionsBuilder<ElectronicsContext> context = new DbContextOptionsBuilder<ElectronicsContext>()
.UseInMemoryDatabase(databaseName: "ProductsTest")
.Options;
当运行这个:我收到下面的错误,但是它以其他方式工作
[Test]
public void TestProducts()
{
DbContextOptionsBuilder<ElectronicsContext> context = new DbContextOptionsBuilder<ElectronicsContext>()
context.Product.Add(new Product { ProductId = 1, ProductName = "TV", ProductDescription = "TV testing", ImageLocation = "test" });
context.SaveChanges();
Error: 'DbContextOptionsBuilder<ElectronicsContext>' does not contain a definition for 'Product' and no accessible extension method 'Product' accepting a first argument of type 'DbContextOptionsBuilder<ElectronicsContext>' could be found (are you missing a using directive or an assembly reference?)
问题是您试图将 DbContextOptions
类型的对象分配给 DbContextOptionsBuilder<ElectronicsContext>
类型的变量。查看作业的最后一行,您有 .Options;
// This does not work
DbContextOptionsBuilder<ElectronicsContext> context = new DbContextOptionsBuilder<ElectronicsContext>()
.UseInMemoryDatabase(databaseName: "ProductsTest")
.Options;
由于 C# 是 static/strongly-typed,这是不允许的,编译器会报错。但是从 c# 3.0 开始,引入了 var
。它无非就是语法糖,是语言提供的一种快捷方式,可以减少一些常见情况下必须编写的代码量。
您的示例是鼓励您使用的示例之一 var
,比较行的长度和可读性...
没有var
DbContextOptionsBuilder<ElectronicsContext> context = new DbContextOptionsBuilder<ElectronicsContext>()
和var
var context = new DbContextOptionsBuilder<ElectronicsContext>()
我正在尝试查找 DbContextOptionsBuilder 的数据类型。
我有一个 Entity Framework DBContext 文件。我使用 NUnit 设置了一个 InMemory 数据库。我如何在没有 var 的情况下进行设置?我知道最好的做法是为每个测试都有一个干净的数据库,但只是想学习,并为多个测试拥有一个数据库。
电子 DBContext 文件
public partial class ElectronicsContext : DbContext
{
public ElectronicsContext()
{
}
public ElectronicsContext(DbContextOptions<ElectronicsContext> options)
: base(options)
{
}
public virtual DbSet<Product> Product { get; set; }
public virtual DbSet<ProductCategory> ProductCategory { get; set; }
N单元测试
public class TestClass
{
[SetUp]
public void TestProducts()
{
// This Works
// var context = new DbContextOptionsBuilder<ElectronicsContext>()
// .UseInMemoryDatabase(databaseName: "ProductsTest")
// .Options;
// This does not work
DbContextOptionsBuilder<ElectronicsContext> context = new DbContextOptionsBuilder<ElectronicsContext>()
.UseInMemoryDatabase(databaseName: "ProductsTest")
.Options;
当运行这个:我收到下面的错误,但是它以其他方式工作
[Test]
public void TestProducts()
{
DbContextOptionsBuilder<ElectronicsContext> context = new DbContextOptionsBuilder<ElectronicsContext>()
context.Product.Add(new Product { ProductId = 1, ProductName = "TV", ProductDescription = "TV testing", ImageLocation = "test" });
context.SaveChanges();
Error: 'DbContextOptionsBuilder<ElectronicsContext>' does not contain a definition for 'Product' and no accessible extension method 'Product' accepting a first argument of type 'DbContextOptionsBuilder<ElectronicsContext>' could be found (are you missing a using directive or an assembly reference?)
问题是您试图将 DbContextOptions
类型的对象分配给 DbContextOptionsBuilder<ElectronicsContext>
类型的变量。查看作业的最后一行,您有 .Options;
// This does not work
DbContextOptionsBuilder<ElectronicsContext> context = new DbContextOptionsBuilder<ElectronicsContext>()
.UseInMemoryDatabase(databaseName: "ProductsTest")
.Options;
由于 C# 是 static/strongly-typed,这是不允许的,编译器会报错。但是从 c# 3.0 开始,引入了 var
。它无非就是语法糖,是语言提供的一种快捷方式,可以减少一些常见情况下必须编写的代码量。
您的示例是鼓励您使用的示例之一 var
,比较行的长度和可读性...
没有var
DbContextOptionsBuilder<ElectronicsContext> context = new DbContextOptionsBuilder<ElectronicsContext>()
和var
var context = new DbContextOptionsBuilder<ElectronicsContext>()