我正在使用Entity Framework Core与npgsql postgresql来进行编程。
我的问题是,使用迁移操作,如何标记一个类属性以生成JSONB列类型?
例如:
public class MyTableClass
{
public int Id { get; set; }
// My JSONB column
public string Data { get; set; }
}
提前感谢。
我正在使用Entity Framework Core与npgsql postgresql来进行编程。
我的问题是,使用迁移操作,如何标记一个类属性以生成JSONB列类型?
例如:
public class MyTableClass
{
public int Id { get; set; }
// My JSONB column
public string Data { get; set; }
}
提前感谢。
public class MyTableClass
{
public int Id { get; set; }
[Column(TypeName = "jsonb")]
public string Data { get; set; }
}
Data = table.Column<string>(type: "jsonb", nullable: true),
使用 @bruno.almeida 建议的 string
是一个不错的解决方案,但是无法查询。
其他的方法包括:
JsonDocument
或 JsonElement)JsonDocument
是我最喜欢的,因为它可以进行查询,而且灵活快捷,例如:
public JsonDocument Customer { get; set; }
RecordErrors
的类,我认为它足够通用,可以在许多错误存储情况下使用:public class RecordErrors
{
public IEnumerable<ResultError> Errors { get; set; } = Enumerable.Empty<ResultError>();
}
ResultError
类只是具有额外属性,如ErrorCode
和Message
,但如果您想要简单的字符串错误值,它可以很容易地被替换为String
。
我的实体看起来像这样:
public class MyFileUpload
{
public int Id { get; set; }
[StringLength(800)]
public string Name { get; set; } = string.Empty;
...
[Column(TypeName = "jsonb")]
public RecordErrors? Errors { get; set; } = null;
}
运行迁移会创建一个带有jsonb
类型的列。
然后,您可以使用通常的方式将数据保存到数据库中:
_databaseContext.SaveChangesAsync(cancellationToken);
在我的实例中,数据库中的结果是类似于以下 JSON 的内容:
{
"Errors": [
{
"Code": "Columns.Unsupported",
"Message": "The upload contains the following unsupported column headings: Column 1, Column 2, Column 3, Column 4."
}
]
}