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/?
Спасибо за помощь!
2 ответа
Предполагая, что у вас есть DBContext:
Вы можете объявить об удалении:
protected override void OnModelCreating(DbModelBuilder modelBuilder){
modelBuilder.Entity<Page>()
.HasOptional(a => a.Translations)
.WithMany()
.WillCascadeOnDelete(true);
}