ABP - Как удалить зависимые элементы из сущности - структура сущности

у меня есть этот объект Страница:

    public class Page : FullAuditedEntity<int, User>, IMultiLanguageEntity<PageTranslation>
{

    public string Name { get; set; }
    public string Content{ get; set; }

    public Page()
    {
        Translations = new List<PageTranslation>();
    }

    public virtual IList<PageTranslation> Translations { get; set; }
}

И объект PageTranslation:

    [Table("PageTranslations")]
public class PageTranslation : Entity<int>, IEntityTranslation<Page>
{
    public Page Core { get; set; }
    public int CoreId { get; set; }
    public string Language { get; set; }

    public string Name { get; set; }
    public string Content{ get; set; }
}

Я хочу обновить объект страницы с обновленными значениями и переводами, поэтому я вызываю эту службу:

        public void UpdatePage(UpdatePageInput input)
    {
        var item = _pageRepository.Get(input.Id);
        item.Content = input.Content;
        item.Description = input.Description;
        item.Title = input.Title;
        item.Name = input.Name;
        item.Translations.Clear(); // there is a problem
        item.Translations.addRange(input.Translations);
    }

Когда я вызываю метод item.Translations.Clear(), я получаю это исключение:

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

Как решить эту проблему в ABP — http://www.aspnetboilerplate.com/?

Спасибо за помощь !


person Martin Haščák    schedule 07.12.2015    source источник


Ответы (2)


Предполагая, что у вас есть DBContext:

U может объявить действие удаления:

protected override void OnModelCreating(DbModelBuilder modelBuilder){

    modelBuilder.Entity<Page>()
        .HasOptional(a => a.Translations)
        .WithMany()
        .WillCascadeOnDelete(true);
}
person vwseppe    schedule 07.12.2015
comment
Когда вы создаете настройку Fluent API и начинаете действие добавления-миграции, дайте мне следующий результат: RenameColumn(table: dbo.Pages, name: CoreId, newName: Translations_Id); CreateIndex(dbo.Pages,Translations_Id); что, по-моему, ерунда - person Martin Haščák; 07.12.2015

ты пробовал

_pageRepository.DeleteAll();

person Alper Ebicoglu    schedule 21.06.2017