【问题标题】:How to deal with a text[] array field type in Npgsql?如何处理 Npgsql 中的 text[] 数组字段类型?
【发布时间】:2020-02-18 09:10:31
【问题描述】:

我有一个带有单个表的 Postgres 12 数据库:

CREATE TABLE public.messages
(
    sender text COLLATE pg_catalog."default",
    "timestamp" timestamp with time zone,
    message_id bigint,
    text text COLLATE pg_catalog."default",
    priority bigint,
    parameters text[] COLLATE pg_catalog."default"
)

现在,当我想通过右键单击项目在遇到的 .NET Winforms(不是 .NET Core)应用程序中使用此表时,添加新项目,ADO.NET 实体数据模型,EF Code First from Database,配置我的连接(成功连接测试),选择我的表,我得到这个错误:

严重性代码描述项目文件行抑制状态 警告错误 6005:当前不支持数据类型“_text” 对于目标实体框架版本;列中的“参数” 表“test.public.messages”是 排除。 LogTest D:\Projekte\LogTest\Model1.cs 1

parameters 字段没有进入消息类:

[Table("public.messages")]
public partial class message
{
    public long id { get; set; }
    public string sender { get; set; }
    public DateTimeOffset? timestamp { get; set; }
    public long? base_message_id { get; set; }
    public string text { get; set; }
    public long? priority { get; set; }
}

除了parameters,模型可以工作,我可以从数据库中获取数据。当我尝试手动添加属性时,它仍然运行,但参数始终为空:

    public string[] parameters { get; set; } // also tried List<string>

我怎样才能让它工作?根据我阅读文档时的理解,我认为这应该是可能的?

我的应用程序面向 .NET Framework 4.6,我使用的是 EntityFramework6.Npgsql 6.4.1.0 版和 Npgsql 4.0.10.0 版。

【问题讨论】:

    标签: c# .net entity-framework npgsql postgresql-12


    【解决方案1】:

    EF6 不支持映射数组,并且可能永远不会支持 - EF6 的类型模型非常封闭/受限,并且不允许公开特定于数据库的类型(尤其是数组等复杂情况)。

    EF Core 提供程序确实对 PostgreSQL 数组提供了很好的支持,如果它们是您所做工作的核心,我建议您考虑改为使用 Core。

    【讨论】:

    • 好的,感谢您的澄清,看来我弄错了。我会看看 .Net Core。
    • 请注意,.NET (Core/Framework) 和 EF (Core/6) 并不相同——您可以在 .NET Core 上运行 EF6,也可以在 .NET Framework 上运行 EF Core (目前,但不是下一个版本)。
    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 2011-03-07
    • 2019-08-21
    • 1970-01-01
    相关资源
    最近更新 更多