Как правильно отобразить и обновить самоссылающуюся сущность с помощью fluent-nhibernate - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь создать объект, которому в настоящее время принадлежит Список того же объекта, эта ссылка существует в другой таблице.

Затем она отображается как API. Я могу получить данные, но каждый раз, когда я пытаюсь обновить коллекцию, это приводит к ошибке: a collection with cascade= all-delete-orphan was no longer referenced by the owning entity instance

public class MyEntity
{
   public virtual int Id { get; set; }
   public virtual ISet<MyEntity> LinkedEntities { get; set; }
}

Я использую автоматическое автоматическое преобразование nhibernate и, таким образом, переопределяю отображение по умолчанию.

var fluentConfigurationCampaign = Fluently.Configure()
.CurrentSessionContext("mySession")
.Database(
          MySQLConfiguration.Standard.ConnectionString(MyConnectionString)
        )
        .Mappings(m => m.AutoMappings.Add(AutoMap.AssemblyOf<MyEntity>(cfg)
.Conventions.Setup(c => c.Add<CustomForeignKeyConvention>())
.Override<MyEntity>(map => map.HasManyToMany(i => i.LinkedEntities)
.ParentKeyColumn("EntitySelf")
.ChildKeyColumn("EntityOther")
.Table("Linked").Cascade.AllDeleteOrphan())

Связанная таблица, как предполагает сопоставление, содержит только 3 свойства.

Сгенерированный самостоятельно идентификатор

ForeignKey EntitySelf, ссылающийся на таблицу Entity

ForeignKey EntityOther, связывающий таблицу Entity.

При обновлении сущности (через контроллер), я получаю EntityContract, который через autopper сопоставляется с сущностью.

Затем я делаю:

_session.Merge(myEntityFromController);
var oldEntity = _session.Get<T>(myEntityFromController.Id);
_session.Update(oldEntity);
_session.Flush();

, который отлично работает для всех других моих сущностей. Но, пытаясь изменить список LinkedEntities (либо удалив некоторые, либо добавив, либо даже не касаясь его), я получил ошибку: a collection with cascade= all-delete-orphan was no longer referenced by the owning entity instance

Любая помощь будет оценена, так как я застрял наЭта проблема ! Спасибо.

1 Ответ

0 голосов
/ 02 ноября 2019

Кажется, моя проблема была связана с частью .Cascade.AllDeleteOrphan() отображения. Я думал, что это будет ссылаться на мою Linked таблицу, но вместо этого, похоже, она пытается воздействовать на связанный MyEntity, что приводит к моей ошибке.

Удаление этого заставило все работать без необходимости какой-либо другой настройки.

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