gpt4 book ai didi

nhibernate - 我可以使用 NHibernate 以 xml 序列化形式存储对象吗?

转载 作者:行者123 更新时间:2023-12-03 16:28:16 25 4
gpt4 key购买 nike

假设我有这样一个类:

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

public DateTime Date { get; set; }
public string String1 { get; set; }
public string String2 { get; set; }
public string String3 { get; set; }
public string String4 { get; set; }
}

是否可以让 NHibernate 将其存储在以下模式中?

CREATE TABLE [dbo].[MyClass](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Xml] [varchar](max) NOT NULL,
)

Id 映射到 Id,然后所有其他字段都被序列化为 XML(或其他方式)?我不介意这些其他字段是否必须像下面这样在子对象上进行,如果有帮助的话:

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

public AllOtherOptions Options { get; set; }
}

public class AllOtherOptions
{
public DateTime Date { get; set; }
public string String1 { get; set; }
public string String2 { get; set; }
public string String3 { get; set; }
public string String4 { get; set; }
}

最佳答案

我正在考虑为即将开展的项目做类似的事情。该项目需要收集大量数据,但只有少数元素需要存储在关系数据库中。我还没有开始试验,但这些是我目前的想法。

您可以通过创建实现 IUserType 的类型来映射 XML 数据类型。如果子类 (AllOtherOptions) 是可序列化的,您应该能够将 XML 字段映射为 MyClass 中的私有(private)成员,并根据需要序列化/反序列化 AllOtherOptions。您可以动态维护 XML 字段(听起来工作量很大)或创建一个拦截器来执行此操作。我的想法是 MyClass 将实现一个接口(interface),例如

public interface IXmlObjectContainer
{
void SerializeChildObjects();
void DeSerializeChildObjects();
}

拦截器会根据需要调用这些方法。这是概念验证的想法。我可能会通过公开成对的 xml 字段和可序列化对象来改进它,以从 IXmlObjectContainer 实现者中删除序列化工作。或者可能通过 XML 字段的获取/设置访问器处理序列化。

更多信息:

  1. Working with XML Fields in NHibernate
  2. Another XML implementation of IUserType

关于nhibernate - 我可以使用 NHibernate 以 xml 序列化形式存储对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/807967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com