gpt4 book ai didi

c# - 如何序列化 NHibernate 映射对象的所有属性?

转载 作者:太空狗 更新时间:2023-10-29 19:51:24 24 4
gpt4 key购买 nike

我有一些 Web 方法可以将我的对象作为序列化 XML 返回。它只是序列化对象的 NHibernate 映射属性......任何人都有一些见解?似乎 Web 方法实际上是在序列化 NHibernate 代理而不是我的类。我已尝试使用 [XMLInclude] 和 [XMLElement],但属性仍未序列化。我有一个非常可怕的 hackish 方法来解决这个问题,但我想知道是否有更好的方法!

像这样:

<?xml version="1.0" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="StoryManager" assembly="StoryManager">
<class name="Graphic" table="graphics" lazy="false">
<id name="Id" column="id" type="int" unsaved-value="0" >
<generator class="identity"/>
</id>

<property name="Assigned" />
<property name="Due" />
<property name="Completed" />
<property name="UglyHack" insert="false" update="false" />


<many-to-one name="Parent" class="Story" column="story_id"/>

</class>
</hibernate-mapping>

public class Graphic
{
private int m_id;
public virtual int Id
{
get { return m_id; }
set { m_id = value; }
}

private DateTime? m_assigned;
public virtual DateTime? Assigned
{
get { return m_assigned; }
set { m_assigned = value; }
}

private DateTime? m_due;
public virtual DateTime? Due
{
get { return m_due; }
set { m_due = value; }
}

private DateTime? m_completed;
public virtual DateTime? Completed
{
get { return m_completed; }
set { m_completed = value; }
}

public bool UglyHack
{
get { return m_due < m_completed; } // return something besides a real mapped variable
set {} // trick NHibernate into thinking it's doing something
}
}

这显然是没法写代码的。如果我在那里没有“假”映射(UglyHack 属性),该属性将不会被序列化。现在我正在研究使用(数据)传输对象,并且可能会使用反射...

最佳答案

序列化 NH 映射对象的最佳方式是不序列化它 :)。

如果您通过网络发送它,您真的应该为它创建一个 DTO。如果您不想创建该对象,您可以在您不想序列化的属性上设置 [XmlIgnore]。

如果你想要所有的属性,你必须从数据库中加载它们 - 对于一些人来说,一个急切的加载就足够了(太多的连接将开始复制数据)你必须以任何方式访问该属性你想触发负载。

编辑:

我想补充一点——通过网络发送您的域实体总是是个坏主意。就我而言,我是通过艰难的方式学习的——我通过 WebService 公开了一些实体——现在几乎所有对我的域的更改(重命名属性、删除属性等)都会杀死使用 WS 的应用程序——加上一大堆属性上有 [XmlIgnore](不要忘记循环依赖)。

我们会尽快重写 - 但请放心,我永远不会再做这件事。 :)

编辑2

你可以使用 AutoMapper用于将数据从您的实体传输到 DTO。他们在网站上提供了一些示例。

关于c# - 如何序列化 NHibernate 映射对象的所有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1190718/

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