具有实体框架或NHibernate的扩展属性

具有实体框架或NHibernate的扩展属性,nhibernate,entity-framework,orm,Nhibernate,Entity Framework,Orm,有没有一种简单的方法可以将entitie的某些属性以批量、XML或其他形式存储在列中?当然,根据这些属性进行查询不是一个选项,但能够在不迁移数据库的情况下扩展数据模型仍然很有价值。不在NHibernate中。我不知道实体框架 您仍然需要数据库迁移来存储XML字段,因此当您在实体框架或其他框架中发现此功能时,它不会阻止您进行数据库架构更新。据我所知,您无法直接使用NHibernate执行此操作,但是您可以实现一个私有属性,它将字段组合并分解为字符串,并映射到该属性,而不是直接映射字段 但我不确定这

有没有一种简单的方法可以将entitie的某些属性以批量、XML或其他形式存储在列中?当然,根据这些属性进行查询不是一个选项,但能够在不迁移数据库的情况下扩展数据模型仍然很有价值。

不在NHibernate中。我不知道实体框架


您仍然需要数据库迁移来存储XML字段,因此当您在实体框架或其他框架中发现此功能时,它不会阻止您进行数据库架构更新。

据我所知,您无法直接使用NHibernate执行此操作,但是您可以实现一个私有属性,它将字段组合并分解为字符串,并映射到该属性,而不是直接映射字段

但我不确定这是否真的是你首先应该做的事情。通常,需求往往在应用程序的开发和生命周期中出现,一旦您需要其中一个字段,即使您现在认为永远不需要查询该字段,您也会遇到困难。将列添加到现有数据库的表中并不是一件容易的事,您仍然需要为表中的每个元组更新xml,因此我确实认为最好在一列中只存储一个字段

致以最诚挚的问候,

Oliver Hanappi

在将xml存储到数据库之前,可以尝试将其转换为字符串

实体框架不支持 本机XML数据类型。这意味着 当实体映射到 具有XML列的表,则 XML的等效实体属性 列是一个字符串。对象可以是 断开连接并序列化为XML。 有关详细信息,请参见序列化 对象(实体框架)


是的,您可以在NHibernate中使用可序列化对象和IUserType实现来实现这一点。描述如何为SQL Server XML字段创建IUserType实现,并描述如何在此基础上构建以将对象序列化为XML字段。

对于NHibernate,您可以使用动态组件 或 将字典用作名称值列表 nhforge.org/doc/nh/en/index.html#集合映射 甚至鸭子打字

谢谢,奥利弗。我们已经考虑过了,但是对于所有实体来说,用某种ORM扩展代替基类会很好。我们正在设计只读数据模型以供web服务器使用。所以mutch定义了将要使用的过滤器,但它总是在改变我们将显示的数据。谢谢Jamie。如前所述,我想在一列中存储多个属性。那么,如果使用此IUserType映射到同一列的多个属性同时更改,会发生什么情况呢?据我所知,这个API应用的最后一个更改将覆盖其余部分…我将把作为XML持久化的属性映射为组件对象的属性。因此,您的IUserType将获取组件对象并序列化(NullSafeSet)和反序列化(NullSafeGet)组件对象。我还没有真正做到这一点——我有一个它的用例,并且进行了充分的研究,知道它是可以做到的,但最终得到了一个不同的解决方案。不幸的是,我只能给你指出(希望)正确的方向。