ABP - 如何从实体 - 实体框架中删除依赖项目

时间:2015-12-07 10:05:28

标签: asp.net-mvc entity-framework asp.net-boilerplate

我有这个实体页面

    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/

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

虽然假设你有一个DBContext:

你可以声明删除操作:

protected override void OnModelCreating(DbModelBuilder modelBuilder){

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

答案 1 :(得分:0)

你试过

吗?
  

_pageRepository.DeleteAll();