我在OrientDB中创建了一个实现记录级安全性的类:
create class material;
alter class material superclass +ORestricted;
alter class material strictmode true;
create property material.mat_ref string;
alter property material.mat_ref mandatory true;
create property material.mat_locked boolean;
alter property material.mat_locked mandatory true;
create property material.mat_active boolean;
alter property material.mat_active mandatory true;
...
我尝试使用OrientDB.NET将此类映射到C#类:
public class Material : ODocument
{
public Material()
{
base.OClassName = GetType().Name.ToLower();
}
public string Reference
{
get { return GetField<string>("mat_ref"); }
set { SetField<string>("mat_ref", value); }
}
...
}
然后我从群集中获取记录:
var _mat = _db.Select().From<Material>().Where("mat_ref").Like("A%").ToList<Material>().First();
编辑映射对象的任何字段后,我想更新数据库中的相关记录:
_mat.Reference = "12345";
_db.Update<Material>(_mat).Run();
生成一个像这样的SQL查询字符串:
UPDATE #18:0 SET mat_ref = '12345', mat_locked = False, mat_active = True, _allow = System.Collections.Generic.HashSet`1[System.Object]
&#39; _allow&#39;从ORestricted(类型Hashset)继承的属性显然被错误地序列化并在运行时抛出异常:
com.orientechnologies.orient.core.sql.OCommandSQLParsingException: Error on parsing command at position #0: Error parsing query:...
我知道我可以避免序列化&#39; _allow&#39;通过仅更新已更改的属性,但我想使其变得通用。难道我做错了什么?有没有解决方法?