这个数据结构可以在EF4,nHibernate,Subsonic中建模吗?

时间:2010-12-08 01:43:52

标签: orm entity-framework-4

我们目前没有使用任何类型的ORM。我想在现有应用程序中建模一个相对简单的数据库结构。这是尝试在仍然使用SQL Server(2008)而不是移动到非关系文档数据库(Couch,Mongo等)时为模式添加灵活性和运行时自定义

我们在很多地方使用这种模式,但为了清晰起见,我将在这里对其进行泛化:

我们有一个Object表,其结构如下:

create table Object (
    ObjectID int,
    FixedObjectProperty1 varchar(25),
    FixedObjectProperty2 int,
    etc.
)

还有一个相关的Object_Attributes表,它保存每个对象的“灵活”属性。这实际上是每个对象的一组名称/值对,具有以下结构:

create table Object_Attributes (
    Object_AttributesID int,
    ObjectID int,
    PropertyName varchar(50),
    PropertyValue varchar(50)
)

我想使用一些ORM技术(EF4,Subsonic,nHibernate或“自己动手”)对其进行建模,以获取上面的数据结构并生成动态/匿名对象(最终将发送到Web客户端)作为JSON)具有以下结构(例如Object_Attributes表中的3条记录:

ObjectID
FixedObjectProperty1
FixedObjectProperty2
PropertyName1
PropertyName2
PropertyName3,
etc

当然,我还需要能够将JSON反序列化回DB。 赞赏任何的想法或建议。

2 个答案:

答案 0 :(得分:1)

IMO无法在EF中映射此内容。您将无法将1-N关系投射到展平结构中。

此外,我不认为这是ORM的情况。 ORM表示对象实现映射,在.NET的情况下,对象是强类型语言结构,必须在编译时定义。因此,Object_Attributes中的每个新属性都需要重新定义映射,修改类并重新编译应用程序。

使用自己的ORM工具,您可能需要使用完全动态的语言。 .NET不是这样的环境。

您可以尝试做的是使用通用方法加载对象和object_attributes(对象将具有属性集合)并在此结构的顶部构建一些动态展平包装器(DLR)。但是在JSON的情况下,简单地创建自定义序列化会更容易。

答案 1 :(得分:0)

这样做的方法是在数据库中创建视图并为视图创建实体。