0

我有这个实体页面

    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/中解决这个问题?

感谢帮助 !

4

2 回答 2

0

你试过了吗

_pageRepository.DeleteAll();

于 2017-06-21T04:09:56.890 回答
0

假设你有一个 DBContext:

你可以声明删除操作:

protected override void OnModelCreating(DbModelBuilder modelBuilder){

    modelBuilder.Entity<Page>()
        .HasOptional(a => a.Translations)
        .WithMany()
        .WillCascadeOnDelete(true);
}
于 2015-12-07T10:25:42.217 回答