Как я могу заставить отношения быть обязательными при использовании SmoothHabanero - PullRequest
2 голосов
/ 18 апреля 2011

В настоящее время я работаю над проектом и решил использовать Habanero в качестве своего ORM. Я использую SmoothHabanero для настройки своих бизнес-объектов. У меня есть отношение к другому классу, который должен иметь хотя бы один экземпляр объекта, чтобы быть действительным. Как бы я это сделал?

1 Ответ

1 голос
/ 18 апреля 2011

ОК, это может быть немного подробно, поэтому позвольте мне начать с некоторых основ.

Smooth - это проект сообщества First Code для habanero ORM.Smooth основан на подходе «Соглашение над конфигурацией».

Для ваших объектов домена Habanero не требуется свойство внешнего ключа, чтобы оно могло корректно отображаться в базе данных при условии, что вы следуете некоторому соглашению, которое может выяснить Smooth..

Обычно

public class Customer : BusinessObject
{
}
public class SalesOrder : BusinessObject
{
    /// <summary>
    /// The type this SalesOrder is for.
    /// </summary>
    public virtual Customer Customer
    {
        get { return Relationships.GetRelatedObject<Customer>("Customer"); }
        set { Relationships.SetRelatedObject("Customer", value); }
    }
}

В этом случае заказ клиента имеет единственную связь с клиентом.Заказчик обязателен в отношении заказа на продажу, т. Е. Заказ на продажу не может быть сохранен без установки клиента.

На уровне домена все это имеет смысл.Однако на уровне базы данных отношения с клиентами отображаются с использованием внешнего ключа в таблице SalesOrder.Если вы следуете соглашению, что CustomerID является свойством внешнего ключа в таблице SalesOrder, то это все, что вам нужно сделать, чтобы установить отношения в модели домена и правильно сопоставить их с базой данных.

Теперь дляответ на ваш вопрос.

Если классы определены в соответствии с вышеизложенным, то все, что вам нужно сделать, это добавить атрибут «[AutoMapCompulsory]», и Smooth выполнит все необходимые настройки отношения и его внешнегоКлюч как обязательный для вас.

    public class Customer : BusinessObject
{
}
public class SalesOrder : BusinessObject
{

    /// <summary>
    /// The type this SalesOrder is for.
    /// </summary>
    [AutoMapCompulsory]
    public virtual Customer Customer
    {
        get { return Relationships.GetRelatedObject<Customer>("Customer"); }
        set { Relationships.SetRelatedObject("Customer", value); }
    }
}

Надеюсь, это поможет Бретт

...