npgsql - npgsql 3.1 中的 ValueGenerator 工厂支持
问题描述
我正在尝试在 ADD 上实现一个自动生成的值,根据这个示例,它非常简单。问题是生成器方法永远不会被调用,所以我想知道 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";
}
推荐阅读
- r - R!mutate 条件和 list intersect (一名球员在场上多少次?)
- javascript - onclick 在 Safari 和移动设备上不起作用
- r - 尝试将数据框中与另一列中的值对应的特定行中的所有值展开为行
- javascript - 使用 C# 进行 AES 加密 使用 crypto-js 进行解密
- php - 尝试使用 PHP 登录到我的托管站点时,我收到此“连接失败”错误消息
- javascript - 将 useEffect 与类组件一起使用
- javascript - Firebase,将数据保存在唯一键中
- java - @query 获取最大日期的记录
- powershell - 将所有用户添加到 AD 组,不包括使用 powershell 的少数用户
- angular - 如何在 ag-grid 中获得正确的过滤器模型?