我有这个实体页面:
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 :(得分:0)
虽然假设你有一个DBContext:
你可以声明删除操作:
protected override void OnModelCreating(DbModelBuilder modelBuilder){
modelBuilder.Entity<Page>()
.HasOptional(a => a.Translations)
.WithMany()
.WillCascadeOnDelete(true);
}
答案 1 :(得分:0)
_pageRepository.DeleteAll();