SQL Server 对 OrmLite 的特定类型支持

2024-01-31

我刚刚了解了一种天才类型,它可以简化我的很多工作,但看起来我喜欢的 ORM 无法识别它。

有没有办法让 ServiceStack OrmLite 识别HierarchyId在 SQL Server 中?关于要修改哪些文件的任何建议以及如何继续的任何提示?

EDIT :

这是问题的更好说明。我有以下课程:

public class MyClass
{
    public int Id { get; set; }
    public SqlHierarchyId HierarchyId { get; set; }
}

SQL层次结构ID http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.types.sqlhierarchyid%28v=sql.110%29.aspx是自定义 SQL Server 数据类型。 OrmLite 将为它生成以下类:

有趣的是,我可以使用[StringLength(255)]属性上的属性,它将得到varchar(255)输入:

我在这里手动更改了表格并添加了列数据类型以展示差异。请注意第三列的数据类型:

有一个varchar表示与其他 DBMS 完全兼容,因为它可以在 C# 内转换 https://stackoverflow.com/a/4316585/837623,但对于 SQL Server,最好让它与相应的数据类型匹配。这将使视图的创建更容易(由于视图的内置功能)hierarchyid数据类型)。

我知道 EF4 不支持该类型(不确定 5)。我还浏览了OrmLiteDialectProviderBase.cs https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.csGitHub 上的文件,我可以看到支持的 ADO.NET 数据类型的列表。

我的简单问题是:这是 ADO.NET 的强烈限制还是在 OrmLite 中的某个时候可以看到?如果有任何建议,我愿意帮助扩展这部分。


ADO.NET已经支持hierarchyid类型,可以找到一个例子here http://blogs.msdn.com/b/jimoneil/archive/2009/02/23/h-is-for-hierarchyid.aspx并显示ADO.NET可以直接从Sql Server读取值作为hierarchyid,但您需要将参数作为字符串传递到服务器。

向 ORM 框架添加对 Hierarchyid 类型方法的支持将打破 ORM API 和 RDMS 之间的抽象。我认为这就是此类功能尚未添加到实体框架的原因。

您可以通过在数据库中保留层次结构的字符串表示形式并将 hierarchyid 版本作为数据库和 C# 类中的计算属性来解决此问题,您需要从 ORM 映射中排除计算的 C# 属性。

例如,您的表列将声明为:

[SqlHierarchyId] AS ([hierarchyid]::Parse([HierarchyId])) PERSISTED 

你的班级为:

public class MyClass {

    public string HierarchyId {
        get;
        set;
    }

    [Ignore]
    public SqlHierarchyId SqlHierarchyId {
        get {
            return SqlHierarchyId.Parse(new SqlString(HierarchyId));
        }
        set {
            HierarchyId = value.ToString();
        }
    }

}

这将保留来自 .Net 层的更新,并允许您使用 Hierarchyid 方法在 SQL Server 中构造查询并使用 .Net 层中的具体化对象。

您必须针对 ORM 层中的字符串表示形式构建查询,但这仍然可以利用一些 Hierarchyid 辅助方法,例如:

public IEnumerable<MyClass> GetDescendants(MyClass node) {

    string currentLocation = node.HierarchyId;
    string followingSibling 
        = node.SqlHierarchyId.GetAncestor(1)
              .GetDescendant(node.SqlHierarchyId, SqlHierarchyId.Null)
              .ToString();

    return db.Select<MyClass>(n => n.HierarchyId > currentLocation 
                                && n.HierarchyId < followingSibling);

}

如果我的 ORMLite 语法错误,我深表歉意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 对 OrmLite 的特定类型支持 的相关文章

随机推荐

  • 使用 CoreGraphics 查找二次贝塞尔曲线的最小值/最大值

    我正在使用 CoreGraphics 绘制二次贝塞尔曲线 但想要计算曲线的最小 最大值 我不是数学背景 所以这变得有点麻烦 有谁有关于如何解决这个问题的文章或想法 对于二次贝塞尔曲线来说 这实际上非常简单 将三个控制点定义为P0 x0 y0
  • Nginx 重写查询参数并进行多次替换

    您好 我们使用 nginx 由于系统发生变化 我们必须临时使用查询参数对某些 URL 进行 301 处理 我进行了很多搜索但没有找到解决方案 我们想 将查询参数列表替换为新值 进行多次替换 所以我们的 URI 应该重写为 page manu
  • C# RSA 无填充

    我正忙着尝试移植如下所示的 Java 代码 Cipher rsa Cipher getInstance RSA ECB nopadding rsa init Cipher DECRYPT MODE RSAPrivateKey decrypt
  • Gson 使用存根序列化循环引用

    我正在尝试实现一些简单的 Json 序列化功能 但我很难应对 Gson 的巨大复杂性 所以基本上我有一堆实体类 它们通过大量循环引用相互引用 为了将此结构序列化为 JSON 我想跟踪已序列化的对象 实体类都实现了一个名为Identified
  • Scala 向后兼容性

    哪些变化或代码演变破坏了向后兼容性 主要是二进制兼容性 是否已在任何地方完全指定 我检查了Scala 语言规范 http www scala lang org docu files ScalaReference pdf 但没有看到任何关于此
  • 从特征序列化分解矩阵(SparseLU 对象)

    我正在尝试解决Ax b其中矩阵 A 可以大到接近1M x 1M在大小上 是稀疏且对称的 但可能没有明确定义 问题是使用以下方法计算分解可能需要很长时间稀疏LU对象 http eigen tuxfamily org dox devel cla
  • PPModel.php 第 51 行中的 PayPal REST API 问题

    每当我尝试使用 create php 在 paypal 上创建付款时 都会出现此错误 致命错误 找不到类 string public html demos demo files integrate paypal rest api php m
  • 删除观察者

    在 NSManagedObject 子类中 我有代码 void awakeFromInsert self addObserver NSApp delegate forKeyPath name options NSKeyValueObserv
  • Lombok/Jackson - 用于 json 数组的 POJO

    我有一个 json 数组 需要从服务器接收 反序列化 并将其发送 序列化 到另一台服务器 Example car name string parts engine wheels 我开始编写以下 POJO 来表示这个 Json 数组 impo
  • 从会话存储文件中读取会话数据

    面临问题PHP unserialize 函数如标题所示 它抛出错误 unserialize function unserialize Error at offset 0 of 1781 bytes 我也尝试过session decode 返
  • 如何将详细垃圾收集输出重定向到文件?

    如何将详细垃圾收集输出重定向到文件 Sun 的网站显示了 Unix 的示例 但不适用于 Windows 从输出java X Xloggc
  • 如何将从请求生成的 xml 结构转换为 Web 服务

    我有一个字符串 var 用于存储来自对 RESTful 服务的请求的 xml 我在使用 xslt 文件动态转换此文件而不保存它时遇到问题 我收到这个错误 System UriFormatException Invalid URI The U
  • C# 在 application.run() 之后执行代码

    我有一个与此类似的问题 表单启动后如何执行代码 https stackoverflow com questions 4100428 how can i execute code after my form starts 但那里的解决方案对我
  • 是否可以将 Protobuf-Net 与没有无参数构造函数的类一起使用?

    使用 Protobuf Net 我发现在没有无参数构造函数的情况下似乎不可能反序列化一个类 或者我可能会丢失一些东西 我不想要一些带有无参数构造函数的类 我可以使用某种属性或其他技术吗 protobuf net 目前依赖于无参数构造函数的工
  • 缩略图/图像缓存文件?

    为了为我正在编写的应用程序提供更好的安全性和隐私性 我将删除在 Android 设备上找到的图像和图片 因此 我很想知道操作系统是否创建了任何缓存 缩略图文件 例如 以便图库应用程序可以在处理完整的实际文件之前显示快速预览 如果创建了此类文
  • 关于Python Flask 500 Internal Server Error的问题

    这是我的Python代码 from flask import Flask render template app Flask name app route profile
  • 逐渐淡化图片

    此功能的想法是仅淡化图片的上半部分 使其逐渐变暗 这是我所拥有的 但它似乎使所有上半部分变成纯黑色 def fadeDownFromBlack pic1 w getWidth pic1 h getHeight pic1 for y in r
  • 为什么我的 Heroku 应用程序无法在生产环境中使用 Sendgrid 发送电子邮件?

    我的设计电子邮件在开发中运行良好 但现在我已经推送到 Heroku 并正在使用 sendgrid 插件 它们没有被发送 我没有收到错误 看起来它发送得很好 只是它从未真正到达我的收件箱 这是我的config environment prod
  • 按最大日期分组

    我在执行这段代码时遇到问题 SELECT FROM tblpm n WHERE date updated SELECT MAX date updated FROM tblpm GROUP BY control number HAVING c
  • SQL Server 对 OrmLite 的特定类型支持

    我刚刚了解了一种天才类型 它可以简化我的很多工作 但看起来我喜欢的 ORM 无法识别它 有没有办法让 ServiceStack OrmLite 识别HierarchyId在 SQL Server 中 关于要修改哪些文件的任何建议以及如何继续