我正在尝试首先编写一个带有扳手和实体框架核心的数据库。 但是当 EnsureCreated 被命中时,应用程序抛出以下异常
System.InvalidOperationException: 'No primary key was found in the database for table Table DistributionChannel. Call SpannerModelValidationConnectionProvider.Instance.EnableDatabaseModelValidation(false) to disable model validation if this error is a false positive.'
public class DistributionChannel{
public Guid Id { get; set; }
public string Name {get;set;}
}
public class SpannerContext : DbContext, IDesignTimeDbContextFactory<SpannerContext>
{
public SpannerContext()
{
}
public SpannerContext(DbContextOptions options) : base(options)
{
}
public DbSet<DistributionChannel> DistributionChannels { get; set; }
public SpannerContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<SpannerContext>();
var configBuilder = new ConfigurationBuilder()
.SetBasePath($"{AppContext.BaseDirectory}/Configurations")
.AddJsonFile("migrations.json")
.Build();
var configuration = configBuilder.GetSpannerConfiguration();
var databaseName = DatabaseName.FromProjectInstanceDatabase(configuration.ProjectId, configuration.InstanceId, configuration.DatabaseId);
var dataSource = $"Data Source={databaseName}";
var connectionString = new SpannerConnectionStringBuilder(dataSource).ConnectionString;
builder.UseSpanner(connectionString,
config => { config.CommandTimeout(configuration.Timeout); });
return new SpannerContext(builder.Options);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.EnableSensitiveDataLogging();
base.OnConfiguring(optionsBuilder);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new DistributionChannelConfiguration());
modelBuilder.AddJsonFields();
}
}
internal class DistributionChannelConfiguration : IEntityTypeConfiguration<DistributionChannel>
{
public void Configure(EntityTypeBuilder<DistributionChannel> entity)
{
entity.ToTable("DistributionChannel");
entity.HasKey(x => x.Id);
entity.Property(e => e.Name)
.IsRequired()
.HasMaxLength(255)
.IsUnicode(false);
}
}
我正在调用 Database.EnsureCreated
//rest of code
using var scope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope();
using var context = scope.ServiceProvider.GetRequiredService<SpannerContext>();
context.Database.EnsureCreated();
我在这里遗漏了一些微不足道的东西吗?