Невозможно преобразовать лямбда-выражение в тип "DbContextOptions <DataContext>", так как это не тип делегата - PullRequest
0 голосов
/ 03 февраля 2019

Я создал класс DataContect, который унаследован от класса IdentityDbContext:

using ProjDAL.Entities;
using ProjDAL.Relations;
using ProjDAL.Services;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;

namespace ProjDAL.EF
{
    public class DataContext : IdentityDbContext<ApplicationUser>
    {

        public DataContext(DbContextOptions<DataContext> options) : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
        }
.......................................................
}

В решении имеется консольное приложение, в котором я создаю новый DataContext:

using System;
using DbInitialize.Interface;
using ProjDAL.EF;

namespace DbInitialize.Provider 
{
    public class DbInitializeProvider : IDbInitialize
    {
        private DataContext _db;

        public DbInitializeProvider()
        {
            _db = new DataContext(options => options.UseSqlServer("Data Source=.\\SQLEXPRESS;Initial Catalog=ProjAppTest;Integrated Security=True;MultipleActiveResultSets=true"));
        }

        public void SetCreateDatabase()
        {
            Console.WriteLine("Check for database availability: ");
            using (var transaction = _db.Database.BeginTransaction())
            {
                try {
                    if(_db.Database != null)
                    {
                        Console.WriteLine("Done!\r\n");
                    }
                    else
                    {
                        _db.Database.EnsureCreated();
                        Console.WriteLine("Database was created!\r\n");
                    }
                    transaction.Commit();
                }
                catch (DbException error)
                {
                    Console.WriteLine(error);
                    transaction.Rollback();
                }
            }
        }   
    }
}

Файл My Program.cs:

using System;
using DbInitialize.Provider;
using ProjDAL.EF;

namespace DbInitialize
{
    class Program
    {
        private static readonly DbInitializeProvider _db;
        delegate void Display();

        static Program()
        {
            _db = new DbInitializeProvider();
        }

        static void Main(string[] args)
        {
            try
            {
                Display display = _db.SetCreateDatabase;
                display.Invoke();

                Console.WriteLine($"\r\n{new string('-', 80)}");
                Console.WriteLine("For continue press any button...");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            Console.ReadLine();
        }
    }
}

Я получаю сообщение об ошибке: Невозможно преобразовать лямбда-выражение в тип "DbContextOptions", так как это не тип делегата Как правильно создать экземпляр DataContext и задать параметры параметров?

Если вам нужна дополнительная информация, пожалуйста, сообщите мне.Спасибо за помощь.

1 Ответ

0 голосов
/ 03 февраля 2019

При создании класса DataContext параметр не соответствует тому, что вы определили в конструкторе DataContext.Он ожидает объект типа DbContextOptions<DataContext> Но вы предоставляете действие с параметром параметров options => options.UseSqlServer("Data Source=.\\SQLEXPRESS;Initial Catalog=ProjAppTest;Integrated Security=True;MultipleActiveResultSets=true")

Вам необходимо создать объект параметров и предоставить экземпляр конструктору:

var optionsBuilder = new DbContextOptionsBuilder<DataContext>();
optionsBuilder.UseSqlServer("YOUR CONNECTION STRING");

_db = new DataContext(optionsBuilder.Options)

Или же вы можете использовать конструктор без аргументов и настроить его в своем классе DataContext в методе OnConfiguring.

См. Документацию здесь: https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext

...