使用Entity Framework或NHibernate扩展属性

时间:2010-03-20 20:48:25

标签: nhibernate entity-framework orm

是否有一种简单的方法可以将某些权限的属性作为批量存储在列中,如XML或其他什么?那些属性的Querieng当然不是一种选择,但是如果没有数据库迁移就能扩展数据模型仍然是有价值的。

5 个答案:

答案 0 :(得分:3)

对于NHibernate,您可以使用动态组件 http://nhibernate.info/doc/nh/en/index.html#components-dynamic 要么  使用字典作为名称 - 值列表 nhforge.org/doc/nh/en/index.html#collections-mapping 甚至鸭子打字 http://fabiomaulo.blogspot.com/2009/07/duck-typing-with-nhibernate.html

答案 1 :(得分:2)

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

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

最诚挚的问候,
Oliver Hanappi

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

是的,您可以使用可序列化对象和IUserType实现在NHibernate中执行此操作。 This link描述了如何为SQL Server XML字段创建IUserType实现,this link描述了如何构建它以将对象序列化为XML字段。

答案 4 :(得分:0)

您可以尝试将xml转换为字符串,然后再将其存储在数据库中。

  

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

http://msdn.microsoft.com/en-us/library/cc716791.aspx