I'm facing an error while trying to obtain information of the DbSets in a DbContext object by using Entity Framework core.
My DbContext object looks this way:
public class CatalogueContext : DbContext
{
public DbSet<ConnectorCatalogueItemConv> CatalogueItemConvs { get; set; }
public CatalogueContext(DbContextOptions<CatalogueContext> options)
: base(options)
{
}
public CatalogueContext()
{
}
}
I'm trying to instante the context by calling a method which receives a generic type T which might be childs of 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;
}
The connection string is obtained properly by using Microsoft.Extensions.Configuration so the problem it's not there.
Finally, I invoke this method and try to obtain any record on the DbSets declared as follows:
public void SomeMethod()
{
using (var db = this.GetContext<CatalogueContext>())
{
var val = db.CatalogueItemConvs.ToList(); //Here is where I get the error below.
}
}
The error shown says:
Method 'ProcessModelFinalized' in type 'Microsoft.EntityFrameworkCore.Metadata.Conventions.SqlServerValueGenerationStrategyConvention' from assembly 'Microsoft.EntityFrameworkCore.SqlServer, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' does not have an implementation.'
I searched everywhere, but seems to be that there's very few information about this error. Any thoughts?
EDIT 1: My solution includes Microsoft.EntityFrameworkCore.SqlServer in version 3.0.0.0
EDIT 2: As requested, I have edited the code to include only one entity and its class declaration. There's no mapping at this point.
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; }
}