Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取所有0';从postgres数据库中获取Guid值_C#_Postgresql_Asp.net Core - Fatal编程技术网

C# 获取所有0';从postgres数据库中获取Guid值

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

我正在使用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; }
    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();
}