城堡ActiveRecord的1对N关系映射

时间:2010-06-29 03:38:03

标签: c# mapping castle-activerecord

这是我在Stack Overflow上的第一篇文章! (耶!)

我遇到了Castle ActiveRecord映射的问题,我认为这是一种非常常见的情况,但也许我没有“谷歌”正确。

我有一个名为Product的实体,另一个名为Warranty的实体。产品上有两个属性(包括其中),每个属性都是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个,所以这看起来仍然不正确。

任何输入都会有所帮助!

谢谢, 马特

1 个答案:

答案 0 :(得分:0)

我没有对Castle 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; } 
}