2015-12-07 3 views
0

У меня есть эта сущность Page: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() метод, который я получил это исключение:

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

Как это решить в ABP - http://www.aspnetboilerplate.com/?

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

ответ

0

Хотя если предположить у вас есть DbContext:

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

protected override void OnModelCreating(DbModelBuilder modelBuilder){ 

    modelBuilder.Entity<Page>() 
     .HasOptional(a => a.Translations) 
     .WithMany() 
     .WillCascadeOnDelete(true); 
} 
+0

Когда вы создаете свою текущую настройку api и запускаете действие add-migrate, дайте мне этот результат: ** RenameColumn (таблица: «dbo.Pages», имя: «CoreId», newName: «Translations_Id»); CreateIndex ("dbo.Pages", "Translations_Id"); } ** Это абсурд, я думаю –

0

вы попробовать

_pageRepository.DeleteAll();

Смежные вопросы