2010-06-29 67 views
0

这是我在Stack Overflow上的第一篇文章! (yay!)1到N与Castle ActiveRecord的关系映射

我遇到了一个Castle ActiveRecord映射问题,我认为这是一个很常见的情况,但也许我没有“google”的权利。

我有一个名为Product的实体,另一个名为Warranty的实体。产品有两个属性(其中包括),每种类型的保修。因此,模型看起来是这样的(属性和其他属性被省略):

public class Product 
{ 
    ... 
    public Warranty StandardWarranty { get; set; } 
    public Warranty ExtendedWarranty { get; set; } 
} 

public class Warranty 
{ 
    ... 
    public Product Product { get; set; } 
} 

起初,我以为我会需要做保修一个基类,然后创建两个实体类,StandardWarranty和ExtendedWarranty,但类不会在任何类型的数据或行为中出现分歧,因此使用带有鉴别器列的单个表继承似乎过于复杂并且过于复杂。

我可以在ActiveRecord文档中找到最接近的东西就是使用“Any”属性。但是文档似乎暗示应该将它用于涉及单独的具体类的多态行为的场景。但在我开始收缩那个兔子洞之前,我想和社区进行核实。

也许我应该只是使用一对多的关系呢?一个产品有很多保证?但是产品类最多只有2个,至少为0个,所以这仍然不正确。

任何输入都会有帮助!

谢谢, 马特

+0

看起来对我来说确实如此。 – 2010-06-29 13:41:18

回答

0

我没有做太多的映射与城堡AR,但我已经做了我使用Rails的份额。我的猜测是你应该能够做到以下几点:

public class Product 
{ 
    ... 
    [OneToOne] 
    public Warranty StandardWarranty { get; set; } 

    [OneToOne] 
    public Warranty ExtendedWarranty { get; set; } 
} 

public class Warranty 
{ 
    ... 
    [PrimaryKey(PrimaryKeyType.Foreign)] 
    public int ProductId { get; set; } 

    [OneToOne] 
    public Product Product { get; set; } 
}