我们目前没有使用任何类型的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。 赞赏任何的想法或建议。
答案 0 :(得分:1)
IMO无法在EF中映射此内容。您将无法将1-N关系投射到展平结构中。
此外,我不认为这是ORM的情况。 ORM表示对象实现映射,在.NET的情况下,对象是强类型语言结构,必须在编译时定义。因此,Object_Attributes中的每个新属性都需要重新定义映射,修改类并重新编译应用程序。
使用自己的ORM工具,您可能需要使用完全动态的语言。 .NET不是这样的环境。
您可以尝试做的是使用通用方法加载对象和object_attributes(对象将具有属性集合)并在此结构的顶部构建一些动态展平包装器(DLR)。但是在JSON的情况下,简单地创建自定义序列化会更容易。
答案 1 :(得分:0)
这样做的方法是在数据库中创建视图并为视图创建实体。