"Невозможно привести объект типа "ConcreteTypeMapping" к типу " Microsoft.EntityFrameworkCore.Место хранения.RelationalTypeMapping " WebApi на macos
Я выполнил инструкцию по созданию WebAPI в mac os с помощью visual studio.
https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api-mac?view=aspnetcore-2.1 https://github.com/aspnet/Docs/blob/master/aspnetcore/tutorials/first-web-api-mac.md
Автозагрузка.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IAdminUOW, AdminUOW>();
services.AddTransient(typeof(IGenericRepository<>), typeof(GenericRepository<>));
services.AddDbContext<MeroRentalContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
sqlServerOption => sqlServerOption.MigrationsAssembly("Database"))
);
services.AddMvc();
}
MeroRentalContext.cs
контекст базы данных cs файл
public class MeroRentalContext : DbContext
{
public MeroRentalContext(DbContextOptions<MeroRentalContext> options)
: base(options)
{ }
public DbSet<AdminUser> TodoItems { get; set; }
}
пользователей администратори.cs файл
public class AdminUser
{
public Guid UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public DateTime CreatedTimeStamp { get; set; }
public DateTime? ModifiedTimeStamp { get; set; }
public DateTime? LogDate { get; set; }
public short? LogNumber { get; set; }
public bool ReloadActiveFlag { get; set; }
public bool isActive { get; set; }
public string ExtraText { get; set; }
public string ResetPasswordToken { get; set; }
public DateTime? ResetPasswordTokenCreatedTimeStamp { get; set; }
}
универсальный класс для класса db data
public class GenericRepository<T> : IGenericRepository<T> where T : class
{
private readonly MeroRentalContext _entities;
public GenericRepository(MeroRentalContext dbContext)
{
_entities = dbContext;
}
public virtual IQueryable<T> GetAll()
{
IQueryable<T> query = _entities.Set<T>();
return query;
}
public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
IQueryable<T> query = _entities.Set<T>().Where(predicate);
return query;
}
}
таблица в базе данных
CREATE TABLE dbo.AdminUser (
UserId uniqueidentifier NOT NULL,
FirstName varchar(max) NOT NULL,
LastName varchar(max) NOT NULL,
Email varchar(max) NOT NULL,
UserName varchar(max) NOT NULL,
Password varchar(max) NOT NULL,
CreatedTimeStamp datetime NOT NULL DEFAULT (getdate()),
ModifiedTimeStamp datetime NULL,
LogDate datetime NULL,
LogNumber smallint NULL,
ReloadActiveFlag bit NOT NULL DEFAULT ((0)),
isActive bit NOT NULL DEFAULT ((1)),
ExtraText varchar(max) NULL,
ResetPasswordToken varchar(max) NULL,
ResetPasswordTokenCreatedTimeStamp datetime NULL
);
ALTER TABLE dbo.AdminUser ADD CONSTRAINT PK__AdminUse__1788CC4C305F59E9 PRIMARY KEY (UserId);
так как при отладке получать ошибки как
невозможно привести объект типа "ConcreteTypeMapping" к типу " Microsoft.EntityFrameworkCore.Место хранения.RelationalTypeMapping
больше деталей на снимке экрана
сделал некоторые исследования, но не в состоянии найти решение https://github.com/aspnet/EntityFrameworkCore/issues/8369 https://github.com/aspnet/EntityFrameworkCore/issues/11704 https://www.ctolib.com/article/comments/61636
2 ответов
согласно https://github.com/aspnet/EntityFrameworkCore/issues/11704 у вас есть несоответствие версии.
некоторые из ваших версий Entity Framework ссылаются на 2.1
а некоторые ссылки 2.0
.
вам нужно изменить их все на справочную версию 2.1
.
вы должны открыть все csproj
файлы и ищите 2.0
и 2.1
.
это проблема несоответствия версии. Просто обновите всю справочную версию 2.0
до 2.1
.
Microsoft.AspNetCore.All --version 2.1.0
Microsoft.EntityFrameworkCore --version 2.1.0
Microsoft.NETCore.App --version 2.1.0
надеюсь, изменив эти ссылки, он будет работать.