Я сталкиваюсь с ошибкой при попытке получить информацию о DbSets в объекте DbContext с помощью ядра Entity Framework.
Мой объект DbContext выглядит следующим образом:
public class CatalogueContext : DbContext
{
public DbSet<ConnectorCatalogueItemConv> CatalogueItemConvs { get; set; }
public CatalogueContext(DbContextOptions<CatalogueContext> options)
: base(options)
{
}
public CatalogueContext()
{
}
}
Я пытаюсь создать экземпляр контекста, вызывая метод, который получает обобщенный c тип T, который может быть потомком DbContext this way:
public T GetContext<T>() where T: DbContext, new()
{
var optionsBuilder = new DbContextOptionsBuilder<T>();
var connectionString = Configuration.GetConnectionString(ExternalTablesKey);
optionsBuilder.UseSqlServer(connectionString);
return Activator.CreateInstance(typeof(T), optionsBuilder.Options) as T;
}
Строка подключения получена правильно с помощью Microsoft.Extensions.Configuration, поэтому проблема в том, что ее нет.
Наконец, я вызываю этот метод и пытаюсь получить любую запись в DbSets, объявленную следующим образом:
public void SomeMethod()
{
using (var db = this.GetContext<CatalogueContext>())
{
var val = db.CatalogueItemConvs.ToList(); //Here is where I get the error below.
}
}
Показанная ошибка говорит:
Метод ' ProcessModelFinalized 'в типе' Microsoft.EntityFrameworkCore.Metadata.Conventions.SqlServerValueGenerationStrategyConvention 'из сборки' Microsoft.EntityFrameworkCore.SqlServer, версия = 3.0.0.0, культура = нейтральная, PublicKeyToken = реализация * 1018 1018 не имеет 1018. *
Я искал везде, но, похоже, об этой ошибке очень мало информации. Есть мысли?
РЕДАКТИРОВАТЬ 1: Мое решение включает Microsoft.EntityFrameworkCore.SqlServer в версии 3.0.0.0
РЕДАКТИРОВАТЬ 2: По запросу, я отредактировал код, включив в него только одну сущность и ее объявление класса. На данный момент нет сопоставления.
public class ConnectorCatalogueItemConv
{
public string CodConnector { get; set; }
public string CodCatalogue { get; set; }
public string CodItemCia { get; set; }
public string CodItemInbk { get; set; }
public bool Defaultvalue { get; set; }
}
РЕДАКТИРОВАТЬ 3: Как создать экземпляр DbContext в EF Core