Azure表和实体继承

问题描述:

假设我正在为他们关心的兽医和动物构建数据库。我有以下实体:Azure表和实体继承

类动物:TableServiceEntity
Dog类:动物
类猫:动物

狗和猫每一个都有其独特的属性。我有一个名为Vets的Azure表,其中vet.Guid作为分区键,“Dog_”+ dog.Guid或“Cat_”+ cat.Guid作为行键。如果我通过使用AsTableServiceQuery()检索所有内容,那么我可以将一个动物实体投射到Dog或Cat上,并且这些独特的属性保持不变?

从更广泛的意义上来说,在这些情况下,每个人都需要做些什么?在将Dog和Cat保持在一张表中以进行高效查询,但在业务层进行额外步骤,并将单独的表与额外的查询进行比较,但代码较少?

需要记住的是,Windows Azure表中的数据以AtomPub格式返回给您。因此,您有一个序列化过程,可将XML映射到DTO上的公共属性。您可以指定在多余或缺少属性的情况下执行什么操作(视为错误或忽略)。此外,您可以通过钩住ReadingEntity事件来自行覆盖序列化过程。

因此,在你的问题的上下文中,你需要记住,如果你要序列化为一个动物,你不能投射到一个狗,因为你需要在运行时指定序列化类型。例如。

ctx.CreateQuery<TypeToSerialize>().Where(s => s.Property == blah); 

如果您选择TypeToSerialize作为Dog,则可以始终向下转换为Animal,但这可能没有那么有用。但是如果你选择TypeToSerialize作为动物,那么狗所拥有的信息已经不存在了,因为它不会在任何地方序列化,并且会被有效忽略。

我提到ReadingEvent的原因是,您可以自己处理序列化,然后所有投注都关闭。您可以检查属性回来,并决定哪些键入要序列化为或者你可以在额外的属性存储到属性包等

HTH

+0

使一吨的感觉,谢谢! – Yellowmoon 2011-05-09 22:13:54

+0

@Yellowmoon:那么也许你应该给答案投票? – 2012-06-14 17:09:55