比方说,我的C#项目中有以下类:
public class AnimalContainer
{
string SomeData {get; set;}
AnimalBase Animal {get; set;}
}
public class AnimalBase
{
string Name {get; set;}
int Age {get; set;}
}
public class Cat : AnimalBase
{
string FurColor {get; set;}
}
现在,如果我创建一个新的Cat
,将其放在AnimalContainer
中并将其存储到MongoDB,整个猫类将保存到Mongo,而不仅仅是基类成员。
(编辑)在上面的例子中,Mongo上的数据看起来像这样:
{
"SomeData": "x",
"Animal": {
"Name": "Cat Damon",
"Age": 3,
"FurColor": "Black"
}
}
我想知道,我怎样才能确保只有基类被保存到Mongo而不是我目前看到的行为。
答案 0 :(得分:0)
我曾经发现过一个关于Java流媒体的幻灯片,如何通过网络像流媒体对象这样的瘦身或者保存到某些东西。 如果我能找到它,我会相信它。但是,我发现他的论点非常好,为什么不应该像你那样做。 他建议不要直接传输对象,而是创建第二个包含要保存的数据的对象。
E.g。如果要保存/发送用户对象:
//some constructor which copies the values for stremin
UserStreamingObject DecoratorObject = new UserStreamingObject(User);
Stream.send(DecoratorObject);
//other Site
Stream.receive(DecoratorObject);
User bla = new User(DecoratorObject);
我建议您执行以下操作,因为我不熟悉C#,我会解释一下。 制作某种Copy Constructor,一种从其子类创建动物实例并保存此实例的方法。您必须将实际类型保存在某处以进行反射。因为您可以在数据库中保存数据,而不应该存在数据库,如果C#流引用了对象(如java那样),您可以在数据库中保存大型树。 您不仅可以保存大量数据,还可以保存您不想保存和/或不应保存的数据,如密码或个人数据。