如何解决npgsql 3.1 中的 ValueGenerator 工厂支持
我正在尝试在 ADD 上实现一个自动生成的值,根据 this example,它非常简单。问题是生成器方法永远不会被调用,所以我想知道 npgsql 是否只是缺乏对此的支持?
示例:
modelBuilder.Entity<Customer>(entity =>
{
entity.Property(e => e.AccountNumber)
.ValueGeneratedOnAdd()
.HasValueGenerator<AccountGenerator>();
});
public class AccountGenerator : ValueGenerator<string>
{
public override bool GeneratesTemporaryValues => false;
private string NextAccountNumber()
{
.....
return "some generated string";
}
public override string Next(EntityEntry entry) => NextAccountNumber();
解决方法
Npgsql 像其他 EF Core 提供程序一样支持值生成器 - 但您需要发布一个完全可运行的代码示例而不是片段。下面的代码有效并插入“一些生成的字符串”。
await using var ctx = new BlogContext();
await ctx.Database.EnsureDeletedAsync();
await ctx.Database.EnsureCreatedAsync();
ctx.Customers.Add(new());
await ctx.SaveChangesAsync();
public class BlogContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
static ILoggerFactory ContextLoggerFactory
=> LoggerFactory.Create(b => b.AddConsole().AddFilter("",LogLevel.Information));
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseNpgsql(@"Host=localhost;Username=test;Password=test")
.EnableSensitiveDataLogging()
.UseLoggerFactory(ContextLoggerFactory);
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().Property(e => e.AccountNumber)
.ValueGeneratedOnAdd()
.HasValueGenerator<AccountGenerator>();
}
}
public class Customer
{
public int Id { get; set; }
public string AccountNumber { get; set; }
}
public class AccountGenerator : ValueGenerator<string>
{
public override bool GeneratesTemporaryValues => false;
public override string Next(EntityEntry entry) => "some generated string";
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。