Свободное владение Nhibernate - сопоставление один к одному - обновление / удаление - PullRequest
2 голосов
/ 25 мая 2011

У меня есть два класса Office и FileDataObject, определенные как:

public class Office
{
   public virtual string Name { get; set; }
   public virtual string Phone { get; set; }
   public virtual **FileDataObject** OfficePdf { get; set; }
}

public class FileDataObject
{
   public virtual int? Id { get; set; }
   public virtual ContentType ContentType {get;set;}
   public virtual string FilePath {get;set;}
}

с отображениями, определенными как:

public class OfficeMap : ClassMap<Office>
{
   Map(x => x.Name).Not.Nullable();
   Map(x => x.Phone).Length(20);
   References<FileDataObject>(x => x.OfficePdf).Cascade.All().Column("OfficePdfId").Nullable().ForeignKey("FK_Office_FileDataObject");
}

public class FileDataObjectMap : ClassMap<FileDataObject>
{
   Id(x => x.Id).UnsavedValue(null).GeneratedBy.Native();
   Map(x => x.ContentType);
   Map(x => x.FilePath);
}

Для одного офиса мне нужен только один OfficePdf (FileDataObject), но он МОЖЕТ БЫТЬ НЕДЕЙСТВИТЕЛЕН, если для определенного офиса не загружен pdf. (то есть отношение 0..1)

Схема для вышеупомянутых двух генерируется правильно с
Таблица: Office-столбец: OfficePdfId -> отображение-> PK-Id таблицы: FileDataObject.

Обратите внимание, что я не хочу, чтобы Таблица: FileDataObject имел столбец OfficeId, поскольку FileDataObject используется также некоторыми другими объектами.

Хотя FileDataObject сохраняется правильно, проблема, с которой я сталкиваюсь, -

Когда пользователь обновляет существующий офис pdf, я не совсем понимаю, стоит ли
сначала удалите существующий FileDataObject, а затем создайте новый или
Обновление существующего PDF будет лучшим выбором.

Или есть ли способ, которым FNH может позаботиться об этом?

Не могли бы вы, пожалуйста, руководство.

Спасибо!

1 Ответ

1 голос
/ 25 мая 2011

Если у вас нет особых требований, которые будут выполнены при удалении и повторном создании, вероятно, проще всего просто обновить существующее. Вы можете принять решение создать или обновить класс Office, поскольку он является владельцем FileDataObject

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...