Тип данных для DbContextOptionsBuilder в NUnit - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь найти тип данных для DbContextOptionsBuilder.

У меня есть файл DBContext Entity Framework.Я устанавливаю базу данных InMemory с помощью NUnit.Как я могу установить это без вар?Я знаю, что лучше иметь чистую базу данных для каждого теста, но я просто пытаюсь учиться и иметь базу данных для нескольких тестов.

Файл 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; }

Тест NUnit

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;

При выполнении этого: я получаю сообщение об ошибке ниже, однако это работает другим способом Moq и настройка контекста БД

    [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?) 

1 Ответ

0 голосов
/ 15 октября 2018

Проблема в том, что вы пытаетесь присвоить объект типа DbContextOptions переменной типа DbContextOptionsBuilder<ElectronicsContext>.Посмотрите на последнюю строку назначения, у вас есть .Options;

// This does not work
DbContextOptionsBuilder<ElectronicsContext> context = new DbContextOptionsBuilder<ElectronicsContext>()
    .UseInMemoryDatabase(databaseName: "ProductsTest")
    .Options;

Поскольку C # является статическим / строго типизированным, это не разрешено, и компилятор будет жаловаться на это.Однако начиная с c # 3.0 var вводится.Это не что иное, как синтаксический сахар, ярлык, предоставляемый языком для сокращения объема кода, который должен быть написан в некоторых распространенных ситуациях.

Ваш пример - один из примеров, где вам рекомендуется использовать var, сравните длину линий и читаемость ...

Без var

DbContextOptionsBuilder<ElectronicsContext> context = new DbContextOptionsBuilder<ElectronicsContext>()

С var

var context = new DbContextOptionsBuilder<ElectronicsContext>()
...