Замок ActiveRecord - генерация схемы без обеспечения ссылочной целостности? - PullRequest
0 голосов
/ 28 апреля 2010

Я только начал играть с активной записью Касла, потому что это похоже на нежный путь в NHibernate. Мне очень нравится идея создания схемы базы данных из моих классов во время разработки.

Я хочу сделать что-то похожее на следующее:

[ActiveRecord]
public class Camera : ActiveRecordBase<Camera>
{
    [PrimaryKey]
    public int CameraId {get; set;}
    [Property]
    public int CamKitId {get; set;}
    [Property]
    public string serialNo {get; set;}
}

[ActiveRecord]
public class Tripod : ActiveRecordBase<Tripod>
{
    [PrimaryKey]
    public int TripodId {get; set;}
    [Property]
    public int CamKitId {get; set;}
    [Property]
    public string serialNo {get; set;}
}

[ActiveRecord]
public class CameraKit : ActiveRecordBase<CameraKit>
{
    [PrimaryKey]
    public int CamKitId {get; set;}
    [Property]
    public string description {get; set;}
    [HasMany(Inverse=true, Table="Cameras", ColumnKey="CamKitId")]
    public IList<Camera> Cameras {get; set;}
    [HasMany(Inverse=true, Table="Tripods", ColumnKey="CamKitId")]
    public IList<Camera> Tripods {get; set;}

}

Комплект камеры должен содержать любое количество штативов и камер. Наборы камер существуют независимо от камер и штативов, но иногда связаны между собой.

Проблема в том, что если я использую createchema, это накладывает ограничения внешнего ключа на таблицы Camera и Tripod. Я не хочу этого, я хочу иметь возможность установить нулевой CamKitId на столах штатива и камеры, чтобы указать, что он не является частью CameraKit.

Есть ли способ сообщить activerecord / nhibernate о том, чтобы он по-прежнему считался связанным, без обеспечения целостности? Я думал, что мог бы иметь запись cameraKit там, чтобы указать «нет комплекта камеры», но это похоже на oeverkill.

Или моя схема неверна? Я делаю то, что не должен делать с ORM? (Я не особо использовал ORM)

Спасибо!

1 Ответ

3 голосов
/ 28 апреля 2010

Используйте [BelongsTo] для моделирования отношений «многие-к-одному», например ::10000

[ActiveRecord]
public class Camera : ActiveRecordBase<Camera>
{
    [PrimaryKey]
    public int CameraId {get; set;}

    [BelongsTo]
    public CameraKit CamKit {get; set;}

    [Property]
    public string serialNo {get; set;}
}

Таким образом, вы можете установить CamKit камеры на null, чтобы указать «нет комплекта камеры».

См. http://www.castleproject.org/activerecord/documentation/trunk/usersguide/relations/belongsto.html для справки.

...