【问题标题】:CypherTypeException: Properties containing arrays of non-primitive types are not supportedCypherTypeException:不支持包含非原始类型数组的属性
【发布时间】:2014-07-10 06:23:30
【问题描述】:

我在使用 NEO4J 的 C# 客户端在 NEO4J 2.0.3 中创建节点时遇到此异常。 我的节点结构是这样的

namespace UserGraph.BusinessObjects
{
    public class UserInfo
    {
        public int UserID { get; set; }
        public string UserName { get; set; }
        public int HeadendId { get; set; }
        public int Score { get; set; }
        public string ThirdPartyObjID { get; set; }
        public long ThirdPartyTypeId { get; set; }
        public string[] ThirdPartyFriendsIds { get; set; }
        public List<Programme> Programs { get; set; }
        public List<Channel> Channels { get; set; }
    }

    public class Channel
    {
        public long ChannelID { get; set; }
        public String ChannelName { get; set; }
    }

    public class Programme
    {
        public long ProgrammeID { get; set; }
        public String ProgrammeName { get; set; }
    }
}

我认为 Neo4j 节点不保存复杂数据。我在这个链接上搜索并找到了http://docs.neo4j.org/chunked/stable/graphdb-neo4j-properties.html 谁能告诉我有什么方法可以将频道和节目对象的列表存储在我的 UserInfo 类中。

【问题讨论】:

  • 正如异常所说,您只能存储原始类型数组。在我看来,最好在不同节点类型之间添加关系。
  • 感谢@stephenmuss 的快速回复。这意味着我应该为 UserInfo、Channel 和 Programme 创建单独的节点。一旦创建,我应该在它们之间创建关系。
  • 没错。这更适合图形数据库。
  • 我完全同意@stephenmuss,但是你知道,如果你确实想存储这些元素,你基本上需要使用自定义序列化器 - 你可能会发现你需要像这样的东西字典见stackoverflow.com/questions/23132187/… 示例

标签: neo4j graph-databases neo4jclient


【解决方案1】:

我遇到了同样的问题,我不确定我是否同意所有复杂的“属性”都应该是关系的概念。归根结底,整个“节点”应该是可以序列化和存储的东西——这是使用 JSON 序列化/反序列化节点的优势之一。编码如下

public class Address {
    public string Line1 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Country { get; set; }
}

public class User {
    public string Name { get; set; }
    public string email { get; set; }
    public Address HomeAddress { get; set; }
    public Address WorkAddress { get; set; }
}

虽然可以为地址创建节点,但我会问一个问题——为什么要强制开发人员为这样的东西创建节点和关系。如果我从不打算独立于主用户对 Address 类的属性进行任何直接查询,那么将整个用户视为一个复杂对象并将其作为节点的数据完整存储要简单得多图表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多