.NET Core项目数据保存时连接字符串登录异常问题
问题:非M1 Mac上.NET Core应用无法连接Docker中的SQL Server保存数据
我是老款非M1芯片Mac用户,拥有一个.NET Core应用,已通过Docker拉取SQL Server镜像,同时使用Azure Data Studio。在Azure Data Studio中,用完全相同的信息可以正常登录数据库,但从应用保存数据时遇到登录问题。已成功添加迁移并更新数据库,试过更换密码、使用不同镜像、重新部署Docker、更换EF版本等方法,问题仍未解决。
Docker运行命令
docker run -e "ACCEPT_EULA=1" -e "MSSQL_SA_PASSWORD=SimplePassword123" -e "MSSQL_PID=Developer" -p 1433:1433 -d --name=sql mcr.microsoft.com/azure-sql-edge
EF Core 8连接字符串配置
builder .Services .AddDbContext<ApplicationDbContext>(o => o.UseSqlServer( "Server=localhost,1433;Database=LostPawsDb;User Id=sa;Password=SimplePassword123;TrustServerCertificate=True;")); builder.Services.AddTransient<IPetRepository, PetRepository>(); builder.Services.AddTransient<IPetService, PetService.Logic.PetService>();
避免设计时异常的代码
ApplicationDbContextFactory
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; using Microsoft.Extensions.Configuration; namespace PetService.Database; public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext> { public ApplicationDbContext CreateDbContext(string[] args) { var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>(); optionsBuilder.UseSqlServer( "Server=localhost,1433;Database=LostPawsDb;User Id=sa;Password=SimplePassword123;TrustServerCertificate=True;"); return new ApplicationDbContext(optionsBuilder.Options); } }
ApplicationDbContext
using Microsoft.EntityFrameworkCore; using PetService.Database.Entities; namespace PetService.Database; public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } public DbSet<PetEntity> Pet { get; set; } public DbSet<IllnessEntity> Illness { get; set; } public DbSet<PetMediaEntity> PetMedia { get; set; } public DbSet<LocationEntity> Location { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { if (modelBuilder == null) { throw new ArgumentNullException(nameof(modelBuilder)); } modelBuilder.Entity<PetEntity>().ToTable(nameof(Pet)); modelBuilder.Entity<IllnessEntity>().ToTable(nameof(Illness)); modelBuilder.Entity<PetMediaEntity>().ToTable(nameof(PetMedia)); modelBuilder.Entity<LocationEntity>().ToTable(nameof(Location)); } }
内容的提问来源于stack exchange,提问作者denisaemailova
相关产品推荐
相关产品推荐

