C# 获取所有0';从postgres数据库中获取Guid值
我正在使用LINQ在.net core中执行一个简单的GET和POST请求。C# 获取所有0';从postgres数据库中获取Guid值,c#,postgresql,asp.net-core,C#,Postgresql,Asp.net Core,我正在使用LINQ在.net core中执行一个简单的GET和POST请求。 这两个操作都工作正常,我正在Postgres数据库中自动生成GUID,并且工作正常, 但是在GET请求期间,我得到的GUID都是0 Model Class - public class Model { public int Id { get; set; } public string Name { get; set; } public Guid UUID { get; } publi
这两个操作都工作正常,我正在Postgres数据库中自动生成GUID,并且工作正常,
但是在GET请求期间,我得到的GUID都是0
Model Class -
public class Model {
public int Id { get; set; }
public string Name { get; set; }
public Guid UUID { get; }
public DateTime CreatedAt { get; set; }
}
我只使用get代码>用于GUID,因为我正在数据库中自动生成它。当我添加set时代码>或专用集代码>,则生成GUID的数据库函数不起作用。
对于所有其他数据,我的工作都很好
Insert query -
DataModel.Model model = new DataModel.Model
{
Name = "abc",
CreatedDate = DateTime.UtcNow
}
respository.Insert(model);
它是在数据库中生成的,
但是,在《邮递员》中就这样
根据邮差屏幕截图,您必须将型号更改为:
public class Model {
public int Id { get; set; }
public Guid UUID { get; set; }
}
请注意,我将set添加到了UUID。如果没有此Ef,则无法为UUID分配新值。它将具有默认值-所有0。EF Core无法使用数据库中生成的值填充只读属性。
您可以添加一个setter,该setter将自动映射到数据库列。
或者添加私有setter并配置efcore,以便在从数据库检索实体时使用私有setter设置值
您可以将EF Core配置为在插入新记录时为Guid
type生成唯一值
在MyDbContext中
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Model>()
.Property(b => b.UUID)
.ValueGeneratedOnAdd();
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.Property(b=>b.UUID)
.ValueGeneratedOnAdd();
}
在您的特定情况下,我建议去掉Id
列,UUID
列也是唯一的,可以作为主键
请您展示一个您拥有全部0的操作,此处缺少一些上下文。表是如何映射的?是否使用ORM?Guid是一种初始化为全零的值类型。基本上,它没有被设置。EF Core不能用数据库中生成的值填充只读属性,添加setter或添加private setter,并将EF Core配置为在从数据库检索实体时使用private setter设置值。您需要配置EF Core以在“添加”上生成新值-对于Guid
您不需要在数据库端执行此操作。ValueGeneratedOnAdd()
-将生成新的唯一Guid
。对于数据库端,您需要配置为对新值使用数据库功能。UUID是要在json中打印的名称,它作为[JsonPropertyName(“UUID”)]
显示在那里,我仍然看不到您得到任何操作。如果没有此功能,我们将无法帮助您。抱歉,但现在我们仍然需要repository.get由于在获取模型时您有0,而不是在插入新记录时,我们不需要您的repository.insert,我们需要repository.get我已在问题中添加了它,请告诉我您是否需要它
Mapping model class for json output -
Dto.Model mapModel = new Dto.Model
{
[JsonPropertyName("id")]
public int Id { get; set; }
[JsonPropertyName("uuid")]
public Guid UUID { get; set; }
[JsonPropertyName("name")]
public string Name { get; set; }
[JsonPropertyName("created_at")]
public DateTime CreatedAt { get; set; }
}
Mapping -
mapModel.Id = model.Id;
mapModel.Name = model.Name;
mapModel.UUID = model.UUID;
mapModel.CreatedAt = model.CreatedAt;
public class Model {
public int Id { get; set; }
public Guid UUID { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Model>()
.Property(b => b.UUID)
.ValueGeneratedOnAdd();
}