我第一次尝试使用 Entity Framework Core for C#。我的项目确实可以编译,但我的添加迁移没有运行。
我收到错误:
尝试激活“MySql.EntityFrameworkCore.Storage.Internal.MySQLTypeMappingSource”时无法解析类型“Microsoft.EntityFrameworkCore.Storage.TypeMappingSourceDependency”的服务。
我的项目文件:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BCrypt.Net-Next" Version="4.0.2" />
<PackageReference Include="EntityFramework" Version="6.4.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="MySql.EntityFrameworkCore" Version="6.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
我的数据库上下文:
internal class DbModelContext : DbContext
{
public DbSet<DbUser> Users { get; set; }
public DbModelContext(DbContextOptions<DbModelContext> options)
: base(options) { }
}
Run Code Online (Sandbox Code Playgroud)
我的用户表:
internal class DbUser
{
[Key]
public string? Email { get; set; }
public string? PasswordHash { get; set; }
public Guid UserId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的 Program.cs (我使用 net6 所以我没有startup.cs)
//Init DbConnectorClass
DatabaseConnector dbConnector = new();
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
//TODO: move to appsettings.json
var connString = "server=192.168.178.XXX;user=XXX;database=XXX;password=XXX;port=3306";
builder.Services.AddDbContext<DbModelContext>(options => options.UseMySQL(connString));
builder.Services.AddScoped<IAuthenticationHandler>(ah => new AuthenticationHandler(dbConnector));
WebApplication app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Run Code Online (Sandbox Code Playgroud)
<PackageReference Include="EntityFramework" Version="6.4.4" />
Run Code Online (Sandbox Code Playgroud)
这不是Entity Framework 核心,而是旧的 EF 6。您需要安装/替换它
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.1" />
Run Code Online (Sandbox Code Playgroud)
或者你喜欢的版本。
另外,您使用的 MySql 提供程序也不是很好。您可能想切换到Pomelo
小智 5
public class MysqlEntityFrameworkDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
{
serviceCollection.AddEntityFrameworkMySQL();
new EntityFrameworkRelationalDesignServicesBuilder(serviceCollection)
.TryAddCoreServices();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在startup.cs 文件中添加另一个类,以解决此问题。
| 归档时间: |
|
| 查看次数: |
10581 次 |
| 最近记录: |