2011-05-13 69 views
0

作为示例,我有一个对象Person,Person由男人和女人继承。 Person包含男人和女人共享的属性,而男人和女人包含特定的属性。用Code First存储对象,作为类和子类相关

我想要做的就是使用Entity Framework 4.1 Code First将它们存储在数据库中。所以我做了三个模型对象

class Person { 
    int Id { get; set; } 
    string Name { get; set; } 
    string Weight { get; set; } 
    public virtual Woman Woman { get; set; } 
    public int WomanID { get; set; } 
    public virtual Man Man { get; set; } 
    public int ManID { get; set; } 
} 

class Woman { 
    int Id { get; set; } 
    bool IsPregnant { get; set; } 
} 

class Man { 
    int Id { get; set; } 
    bool ThinksWithDick { get; set; } 

} 

所以我人 - >男人/女人有1到0..1的关系。我不知道如何用Code First强制执行此操作。我读过1对1关系(here),但那不是我要找的。

也许这完全是错误的方法,但我相信别人碰到了同样的事情。无需手动应用数据库中的约束就可以完成。

回答

1

从人身上删除ManId和WomanId以及男人和女人。 将PersonId和Person添加到女人和男人类。

class Person { 
    int Id { get; set; } 
    string Name { get; set; } 
    string Weight { get; set; } 
} 

class Woman { 
    int Id { get; set; } 
    bool IsPregnant { get; set; } 
    int PersonId {get; set;} 
    public virtual Person {get; set;} 
} 

class Man { 
    int Id { get; set; } 
    bool ThinksWithDick { get; set; } 
    int PersonId {get; set;} 
    public virtual Person {get; set;} 
} 
+1

在你的情况下,无论是男人还是女人都可以从Person类派生出来。 – hazimdikenli 2011-05-13 09:33:48

+0

我尝试了继承方式。所以女人/男人继承人。在数据库中,EF在Person表中添加一个“Discriminator”字段,其中包含类名“Woman”或“Man”。这似乎恰好符合我的需要。感谢名单! – Saab 2011-05-13 09:48:02