【问题标题】:The method is not kicking in if there is DataContext如果存在 DataContext,则该方法不会启动
【发布时间】:2018-05-07 08:15:47
【问题描述】:

美好的一天

我正在尝试硬删除软删除的记录,我有一个方法 Task PermanantlyDeleteDeal(GetDealInput input) 当我调用该方法时它不会进入。

由于样板 0.9.6 不是硬删除,我现在使用 Database>DataContext.cs 类执行硬删除

这是我的 DataContext 类

public class DataContext : DbContext
{
    public virtual DbSet<Deal> Deal{ get; set; }   

    public DataContext()
       : base("Default")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
    }}

这是你调用方法的javaScript上的函数

function DeleteLead(btnCaller) {
abp.message.confirm('Lead will be deleted.', 'Are you sure?', function (isConfirmed) {
    if (isConfirmed) {
        var button = $(btnCaller);
        var proposalId = button.data('content');
        var proposalObject = Object({
            Id: proposalId
        });
        abp.ui.setBusy();
        _leadService.permanantlyDeleteLead(proposalObject).done(function (result) {
            abp.notify.success('Successfully deleted a proposal', 'Quotation deleted');
            Refresh();
        }).always(function () {
            abp.ui.clearBusy();
        });
    }
});

}

这里是永久删除评论

public async Task PermanantlyDeleteDeal(GetDealInput input)
    {
        UserFriendlyException ufex = null;
        try
        {
            DataContext db = new DataContext();

            using (Repository.Repository<Deal> repo = new Repository.Repository<Deal>(db))
            {
                using (Repository.Repository<DealComment> dealCommentRepo = new Repository.Repository<DealComment>(db))
                {
                    using (Repository.Repository<Proposal> proposalRepo = new Repository.Repository<Proposal>(db))
                    {
                        using (Repository.Repository<Quotation> quotationRepo = new Repository.Repository<Quotation>(db))
                        {
                            Deal deal = repo.GetById(input.Id);
                            List<DealComment> listOfDealComments = dealCommentRepo.GetAll().Where(dc => dc.DealId == deal.Id).ToList();

                            List<Proposal> listOfProposals = proposalRepo.GetAll().Where(x => x.DealId == deal.Id).ToList();
                            List<Quotation> listOfQuotations = quotationRepo.GetAll().Where(x => x.DealId == deal.Id).ToList();

                            if (listOfProposals.Count > 0 || listOfQuotations.Count > 0)
                            {
                                string message = string.Empty;

                                message += listOfProposals.Count > 0 ? "Cannot delete deal, this deal is linked to:\nProposals\n" : "Cannot delete deal, this deal is linked to:\n";

                                foreach (var item in listOfProposals)
                                {
                                    message += $"- {item.Application}\n";
                                }

                                message += listOfQuotations.Count > 0 ? "Quotations:\n" : "";

                                foreach (var item in listOfQuotations)
                                {
                                    message += $"- {item.Description}\n";
                                }

                                ufex =  new UserFriendlyException("Ooops! There is a problem.", $"{message}");

                                throw ufex;
                            }
                            else
                            {
                                foreach (var item in listOfDealComments)
                                {
                                    dealCommentRepo.Delete(item);
                                    dealCommentRepo.SaveChanges();
                                }

                                if (deal != null)
                                {
                                    repo.Delete(deal);
                                    repo.SaveChanges();
                                }
                            }
                        }
                    }
                }
            }

        }
        catch
        {
            if(ufex != null)
              throw ufex;
            else
               throw new UserFriendlyException("Ooops! There is a problem.",$"Deal with Id[{input.Id}] could not be deleted.");
        }
    }

Abp.Boilerplate 0.9.6 Abp.EntityFramework 0.9.6

【问题讨论】:

  • 这次我想使用DataContext,因为样板不能解决我的问题
  • 我假设使用 DataContext 将执行硬删除? var 雇主 = 新雇主 { Id = 1 }; ctx.Employ.Remove(雇主); ctx.SaveChanges();并且您仍在尝试使用 ABP,但仅用于软删除。所以你试图将两者一起用于dataContext来弥补那个版本的Abp不能做的事情?

标签: javascript model-view-controller aspnetboilerplate


【解决方案1】:

我过去也遇到过同样的问题,为了解决这个问题,我必须确保项目引用的实体框架的版本与所有项目的实体框架版本相同解决办法。

如果需要在 DataContext 类中确保启用

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

关键是与 ABP 上下文生成的名称相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多