Соотношения от 1 до N с замком ActiveRecord - PullRequest
0 голосов
/ 29 июня 2010

Это мой первый пост о переполнении стека! (Яй!)

У меня проблемы с отображением Castle ActiveRecord, которое, как мне показалось, будет довольно распространенным сценарием, но, возможно, я не "правильно" настроил Google.

У меня есть один объект под названием «Продукт», а другой - «Гарантия». Продукт имеет два свойства (среди прочих), каждый из которых имеет тип Гарантия. Таким образом, модель выглядит примерно так (атрибуты и другие свойства опущены):

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

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

Сначала я подумал, что мне нужно сделать гарантию базовым классом, а затем создать два конкретных класса, StandardWarranty и ExtendedWarranty, но эти классы не расходятся ни с каким видом данных или поведением, поэтому при использовании единого наследования таблиц с колонка дискриминатора казалась излишней и слишком сложной.

Самым близким, что я мог бы придумать в документации ActiveRecord, было бы использование атрибута «Любой». Но документация, похоже, намекала на то, что ее следует использовать в сценариях, где полиморфное поведение связано с отдельными конкретными классами. Но я хотел бы посоветоваться с сообществом, прежде чем начать сворачивать эту кроличью нору.

Возможно, я должен просто использовать вместо этого отношения один ко многим? Один продукт имеет много гарантий? Но класс продукта будет иметь не более 2 и не менее 0, так что это все равно кажется неправильным.

Любой вклад будет полезен!

Спасибо, Мэтт

1 Ответ

0 голосов
/ 29 июня 2010

Я не сделал слишком много картирования с 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; } 
} 
...