Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与Castle ActiveRecord的1到N关系映射_C#_Mapping_Castle Activerecord - Fatal编程技术网

C# 与Castle ActiveRecord的1到N关系映射

C# 与Castle ActiveRecord的1到N关系映射,c#,mapping,castle-activerecord,C#,Mapping,Castle Activerecord,这是我关于堆栈溢出的第一篇文章!(耶!) 我在使用Castle ActiveRecord映射时遇到了问题,我认为这是一个非常常见的场景,但可能我没有正确地使用“google” 我有一个实体叫做产品,另一个实体叫做保修。产品上有两个属性(除其他属性外),每个属性都是保修类型。因此,模型看起来像这样(省略了属性和其他属性): 起初,我认为我需要将保修作为一个基类,然后创建两个具体的类,StandardWarranty和ExtendedWarranty,但这些类在任何类型的数据或行为中都不存在差异,因

这是我关于堆栈溢出的第一篇文章!(耶!)

我在使用Castle ActiveRecord映射时遇到了问题,我认为这是一个非常常见的场景,但可能我没有正确地使用“google”

我有一个实体叫做产品,另一个实体叫做保修。产品上有两个属性(除其他属性外),每个属性都是保修类型。因此,模型看起来像这样(省略了属性和其他属性):

起初,我认为我需要将保修作为一个基类,然后创建两个具体的类,StandardWarranty和ExtendedWarranty,但这些类在任何类型的数据或行为中都不存在差异,因此使用带有鉴别器列的单表继承似乎过于复杂

在ActiveRecord文档中,我能想到的最接近的方法是使用“Any”属性。但文档似乎暗示,它应该用于存在与单独的具体类相关的多态行为的场景中。但我想在我开始钻兔子洞之前先和社区核实一下

也许我应该用一对多的关系来代替?一个产品有多个保证?但是product类最多有2个,至少有0个,所以这似乎仍然不正确

任何输入都会有帮助

谢谢,
Matt

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

在我看来,它是好的。
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; } 
}